为了账号安全,请及时绑定邮箱和手机立即绑定

分布式数据系统-CAP理论

标签:
Java 架构

What’s CAP

CAP理论是针对分布式数据系统中,不能同时满足Consistency、Availability、 Partition Tolerance三个要素,最多只能满足其中两个要素

1.CAP理论关注的数据系统而不是广义的分布式系统
2.CAP理论不代表我们的整个数据系统只能满足其中2个要素,可以更细粒度控制:系统的A功能模块的数据选择CP,而B功能模块的数据选择AP

1.一致性(Consistency)

读取数据都能保证返回最新写操作的结果

这是一种理想场景,因为在分布式系统中,网络之间的数据同步也是需要时间的,所以我们对一致性的修饰词应该是“高”一致性(代表数据同步的速度比较快,延迟时间比较短),而不是绝对的一致。

2.可用性(Availability)

读取数据都能保证有限的时间内返回正常的结果

1.超时属于不可用
2.返回不能解析的错误也属于不可用,例如OOM或者系统错误

3.分区容错性(Partition Tolerance)

即使节点之间因为网络等原因发生了分区故障,系统也能正常提供服务

网络分区指因为网络等原因,部分节点之间的通信发生了异常,导致这些节点出现了孤立的情况,但是单个节点内部的网络和状态都是正常。

Why 2 out of 3?

1.CA:意即舍弃系统的可扩展性,而我们要设计的是分布式存储系统,所以P是一定不能舍弃的,所以问题就变成了二选一(C和A中选一个),所以CA的选择在分布式数据系统中是不存在的

1.如果选择了CA,舍弃了P,这种情况其实就是说不考虑分区容错性,这种只能是单点系统,否则如果是多节点系统的话因为网络问题永远无法避免,所以分区容错是永远不能舍弃的,所以CA在分布式数据系统的设计中是不存在的
2.如果选择了CA,舍弃了P,假设有N1和N2两个节点发生了分区的时候,如果要写入数据,那么为了保证C,系统需要禁止该写入或者返回error,这和我们选择的CA中的A是相冲突的,所以CA在分布式数据系统的设计中是不存在的

2.AP:读取数据的时候,为了保证系统的可用性,需要在规定的时间范围内返回正确的结果,但是因为舍弃了一致性,这个时候返回的数据是旧数据
3.CP:读取数据的时候,为了保证数据的一致性,需要等待最需数据同步完毕(可能会等待超时)或者直接返回错误(而超时和错误都导致了系统的不可用性)
4.CAP:由2和3得知,保证了A就没法保证C,反之亦然,所以CAP这种选择在分布式数据系统中是不存在的

综上所述,CAP三要素只能选择其中两项,更进一步说是只能是AP和CP

How to choose?

CP和AP的选择,其实是在一致性和可用性之间的一个取舍和权衡

例1:微博的消息发布,我们可以容忍某个明星发送的出轨消息晚点被我们看到,但是我们不太能容忍访问微博的时候报错或者超时了
例2:以QQ的个人信息(昵称、备注等信息)和账号密码信息(登录密码等信息)为例:针对个人信息,我们可以容忍一定时间内看不到新修改的数据(舍弃一致性),但是必须要保证用户可以去修改(选择了可用性),所以一般会选择AP。但是针对账号密码等登录信息,为了保证一致性,我们可以容忍用户等待一定的时间或者返回一个错误(舍弃了可用性),而不是登录到一个错误的账号密码上去,所以会选择CP,当然对QQ这种量级的公司来说,舍弃可用性只是相对自己的一致性而言。

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
0
获赞与收藏
4

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消