塘沽网站开发,官方建设网站,通辽市 做网站,石家庄网站建设诚荐优度网络CAP原则又称CAP定理#xff1a;
指的是在一个分布式系统中#xff0c;一致性#xff08;Consistency#xff09;、可用性#xff08;Availability#xff09;、分区容错性#xff08;Partition tolerance#xff09;。CAP 原则指的是#xff0c;这三个要素最多只能同…CAP原则又称CAP定理
指的是在一个分布式系统中一致性Consistency、可用性Availability、分区容错性Partition tolerance。CAP 原则指的是这三个要素最多只能同时实现两点不可能三者兼顾。
CConsistency
一致性
“all nodes see the same data at the same time ” 更新操作成功并返回客户端完成后 所有节点在同一时间的数据应该完全一致。 访问所有的节点得到的数据应该是一样的。注意这里的一致性指的是强一致性也就是数据更新完访问任何节点看到的数据完全一致要和弱一致性最终一致性区分开来。 AAvailability
“Reads and writes succeed”
服务一直可用而且是正常响应时间
所有的节点都保持高可用性。注意这里的高可用还包括不能出现延迟比如如果节点B由于等待数据同步而阻塞请求那么节点B就不满足高可用性。
PPartiton tolerance
分区容错性
“the system continues to operate despite arbitrary message loss or failure of part of the system”
分布式系统在遇到某节点或网络分区故障的时候仍然能对外提供服务
这里的分区是指网络意义上的分区。由于网络是不可靠的所有节点之间很可能出现无法通讯的情况在节点不能通信时要保证系统可以继续正常服务。
分区容错性实现目标某一个节点挂掉并不影响另一个节点提供服务
实际开发中的设计选择
以实际效果而言分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性就意味着发生了分区的情况必须就当前操作在C和A之间做出选择
CAP原理说一个数据分布式系统不可能同时满足C和A和P这3个条件。所以系统架构师在设计系统时不要将精力浪费在如何设计能满足三者的完美分布式系统而是应该进行取舍。由于网络的不可靠性质大多数开源的分布式系统都会实现P也就是分区容忍性之后在C和A中做抉择。
CAP原则的精髓就是要么AP要么CP要么AC但是不存在CAP。
CAP原理简单证明
假设有节点data1和节点data2一开始有个数据number1。之后向data1提交更新将数据number设置为2。 接着data1就需要将更新推送给data2让data2也更新number数据。 接下来我们分3个场景分析 1. 在保证C和P的情况下
为了保证数据一致性data1需要将数据复制给data2即data1和data2需要进行通信。但是由于网络是不可靠的我们系统有保证了分区容忍性也就是说这个系统是可以容忍网络的不可靠的。这时候data2就不一定能及时的收到data1的数据复制消息当有请求向data2访问number数据时为了保证数据的一致性data2只能阻塞等待数据真正同步完成后再返回这时候就没办法保证高可用性了。 所以在保证C和P的情况下是无法同时保证A的。 2. 在保证A和P的情况下
为了保证高可用性data1和data2都有在有限时间内返回。同样由于网络的不可靠在有限时间内data2有可能还没收到data1发来的数据更新消息这时候返回给客户端的可能是旧的数据和访问data1的数据是不一致的也就是违法了C。 也就是说在保证A和P的情况下是无法同时保证C的。 3. 在保证A和C的情况下
如果要保证高可用和一致性只有在网络情况良好且可靠的情况下才能实现。这样data1才能立即将更新消息发送给data2。但是我们都知道网络是不可靠的是会存在丢包的情况的。所以要满足即时可靠更新只有将data1和data2放到一个区内才可以也就丧失了P这个保证。其实这时候整个系统也不能算是一个分布式系统了。 关于CAP原理还需要特别注意的一点是虽然说我们设计系统时不能同时保证拥有三点。但是也并不是说保证了其中2点后就要完全抛弃另外一点。只是相对的要做一些牺牲。比如在保证CP的情况下虽然没办法保证高可用性但这不意味着可用性为0我们可以通过合理的设计尽量的提高可用性让可用性尽可能的接近100%。同理在AP的情况下也可以尽量的保证数据的一致性或者实现弱一致性即最终一致性。