CAP介绍

CAP定理指出,在分布式系统中,一致性、可用性和分区容错性难以兼得。当网络出现分区时,系统必须在一致性与可用性之间做出选择。保证CP会牺牲可用性,因为数据未同步完成时,部分节点可能无法响应。而保证AP则可能造成数据不一致,节点可以快速响应但返回的数据可能不是最新的。在AC情况下,只有在网络完全可靠时才能实现,但这并不实际。因此,设计分布式系统时需要根据业务需求合理权衡这三者。
摘要由CSDN通过智能技术生成

CAP

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):保证每个请求不管成功或者失败都有响应。
分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。

细说CAP

C:Consisteny(一致性),比如数据库是主从模式,一个写库请求进来了,master库完成了写入操作,但是再slave同步数据之前,另一个用户查了这条数据,结果没查到,但是也没报错,这就不是强一致性。虽然最终会同步成功,但这是最终一致性的体现。强一致性的体现在于我不管你因为什么没同步成功(可能网络延迟或其他等),只要没同步成功,我这个slave就不能对外提供服务。必须主从数据一致才可以提供服务。(很少有做到这点的)
A:Availability(可用性),还是上面的例子,就是保证了可用性。因为虽然主从没同步完成,但是我从库照样能提供服务而且及时响应结果。也就是说可用性保证服务可用,而不在乎数据是否一致。明显和C是冲突的,那CA怎么还能组合到一起?后面说。
P:Partition Tolerance(分区容错性),集群部署了三台服务。挂了一台,其他两台还能继续对外提供服务,这时候我就认为他是没问题的,也就是我能容忍你挂了一台,只要还有服务能对外提供请求即可。所以一般分区容忍性是必须的,一般都需要从C和A之间做选择。

CAP原理举例分析

​ 假设有两个节点 data1 和 data2,以及一个变量数据 number = 1;这时有写请求向 data1 提交了更新,将数据number改变为2。 接着 data1 就需要将更新后的数据同步给 data2 ,让 data2 更新number的最新值。

1、在保证CP情况下

​ 为了保证数据数据一致性,data1 需要将数据复制给 data2,那么两个节点之间需要建立通信,可由于网络原因,通讯出现了问题,导致失败了,比较网络是不可靠的。不过系统又保证了分区容错性,这时候 data2 就不一定能够及时的收到 data1 推送来的数据同步信息。当客户端有请求来访问 data2 的number数据时,为了保证数据一致性,data2 只能阻塞,或者返回错误,提示系统发生了错误,然后等待数据真正同步完成后再返回。

​ 所以,在保证C and P的情况下,是无法同时保证A的。

2、在保证AP情况下

​ 为了保证系统的高可用性,data1 和 data2 都需要在有限时间内返回。同样的由于网络的不可靠,在有限时间内,data2 有可能还没有收到 data1 发来的数据同步信息,这时候返回给客户端的可能就是旧数据,和访问 data1 的数据是不一致的,并不满足C。

​ 所以,在保证A and P的情况下,是无法同时保证C的。

3、在保证AC的情况下

​ 如果要保证高可用和一致性,只有在网络情况良好且可靠的情况下才能实现。这样 data1 才能立即将更新的消息发送给 data2。但是我们都知道网络是不可靠的,是会存在丢包的情况。所以要满足及时可靠更新,只有将两个节点data1 data2放到一个区内才可以,也就丧失了P这个保证。其实这时候整个系统也不能算是一个分布式系统了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值