CAP
CAP原理介绍
- C:Consistency
- 一致性,即访问所有节点得到的数据都应该是一致的,这里的一致性是指强一致性(数据更新完,访问任何节点看到的数据完全一致),这里和弱一致性和最终一致性有区别
- A:Availability
- 可用性,所有的节点都保持高可用性,也就是说,任务没有发生故障的服务必须在有限的时间内返回合理的结果集
- P:Partiton tolerance
- 分区容忍性,这里的分区指网络意义上的分区,如果出现节点之间无法通信的情况,要保证系统可以正常服务
CAP理论,一个数据分布式系统不可能同时满足C,A,P三个条件,大多数开源的分布式系统都会实现P,也就是分区容忍性,之后在C和A之间做抉择。
CAP原理实际上是一个对分布式数据存储系统的一个定论,我们对于CAP的讨论的实际场景,更多的是针对那些有数据存储,数据复制场景,也就是所谓的NoSQL数据库
CAP原理简单实例
现在假设有两个节点,a1,a2
有一个数据number = 1,之后向a1提交更新,将数据number 设置为2
然后,a1把数据更新推送给a2,让a2也更新number
保证C和P
保证数据一致性,a1将数据复制给a2,那么a1和a2需要进行通信,我们保证了P,也就是分区容忍性,这时a2不一定能及时收到a1的数据复制消息,当有请求向a2访问number数据时,为了保证数据的强一致性,a2只能阻塞,等待数据同步完成后返回,这时,无法保证高可用(A)
所以,保证C和P时,无法保证A
保证A和P
为了保证高可用,a1和a2都必须在有限时间内返回,由于网络的不可靠,可能a2还没有收到a1发来的数据更新消息,就返回给客户端数据,这时候返回给客户端的可能是旧的数据,和a1不一致,因此违反了C,无法保证一致性(C)
所以,保证A和P时,无法保证C
保证A和C
如果要保证一致性和高可用,那么网络状况必须良好,a1发送给a2的数据更新,a2必须马上能收到,但在实际情况下,网络通常是不可靠的,可能存在丢包等现象,所以如果要满足即时更新,必须将a1和a2放到一个区内才可以,这样就放弃了P,整个系统也不再是一个分布式系统了
所以,保证A和C,无法保证P
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!