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这种量级的公司来说,舍弃可用性只是相对自己的一致性而言。
共同学习,写下你的评论
评论加载中...
作者其他优质文章