CAP 原理
随着系统的发展,越来越多的网站,特别是大型网站,基本都是分布式的。而分布式系统最大的难点,就是各个节点的状态同步问题。于此应运而生的CAP理论就是这方面的基本定理。
1、什么是CAP
C:Consistency,即一致性;表示所有的节点得到的数据应该是一样的,且这里的一致性指的是强一致性,数据更新完后,所有的节点的数据要完全一致。
A:Availability,即可用性;表示所有的节点都保持高可用性。
P:Partition tolerance,即分区容错性,三者不可兼得。分区一直指的是网络意义上的分区。由于网络出现不可靠的情况,节点之间可能出现无法通讯的情况,在节点不能通信时,要保证系统可以继续正常服务。
2、CAP三者关系
在一个数据分布式系统不可能同时满足C和A和P这3个条件。所以系统架构师在设计系统时,不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。由于网络的不可靠性质,大多数开源的分布式系统都会实现P,也就是分区容忍性,之后在C和A中做抉择。
3、场景分析
保证CP的情况:为了保证数据一致性,data1需要将数据复制给data2,即data1和data2需要进行通信。但是由于网络是不可靠的,我们系统有保证了分区容忍性,也就是说这个系统是可以容忍网络的不可靠的。这时候data2就不一定能及时的收到data1的数据复制消息,当有请求向data2访问number数据时,为了保证数据的一致性,data2只能阻塞等待数据真正同步完成后再返回,这时候就没办法保证高可用性了。
所以,在保证C和P的情况下,是无法同时保证A的。
保证A和P的情况下:为了保证高可用性,data1和data2都有在有限时间内返回。同样由于网络的不可靠,在有限时间内,data2有可能还没收到data1发来的数据更新消息,这时候返回给客户端的可能是旧的数据,和访问data1的数据是不一致的,也就是违法了C。
也就是说,在保证A和P的情况下,是无法同时保证C的。
保证A和C的情况下:如果要保证高可用和一致性,只有在网络情况良好且可靠的情况下才能实现。这样data1才能立即将更新消息发送给data2。但是我们都知道网络是不可靠的,是会存在丢包的情况的。所以要满足即时可靠更新,只有将data1和data2放到一个区内才可以,也就丧失了P这个保证。其实这时候整个系统也不能算是一个分布式系统了。
评论