分布式CAP理论

什么是CAP

CAP是Eric Brewer于1998年提出的,是分布式系统的最为基础和关键的理论。
在这里插入图片描述
其中C为consistency一致性:表示每次写入为什么,读出来的就为什么。
A为availability可用性:表示系统能够一直不间断地提供服务。
P为partition tolerance分区容忍性:表示系统系统存在可提供同样服务的两个子系统(可理解为数据有多份,类似主备结构、主主结构)。
这三个指标不可能同时做到。这个结论就叫做 CAP 定理。
它表明对于分布式系统,在存在网络分区的情况下,一致性和可用性只能二选一,不可能同时满足。
一旦网络出现问题,系统要么不可用,要么得接受获取到的结果不一致。

CAP的理解

为什么cap不能同时满足,不难理解。在分区网络中,子系统之间的网络可能会出现问题,如果出现问题了,就会可能影响他们直接数据的同步,如下:
在这里插入图片描述
cli向A写入一条新数据,正常A需要向B同步这个修改,就是上图的2,但是A出现了网络问题,导致同步失败。这时客户端向B拉数据获取不同写入的那条数据。这就是不一致。相对的,如果需要满足一致性,那A网络出问题的时候,整个系统就不再对外提供服务,而应该返回失败,这就是系统的不可用。

对于不同的场景,和组件,应该如何平衡cap作取舍。

  1. CA (consistency + availability),这样的系统关注一致性和可用性,它需要非常严格的全体一致的协议,比如“两阶段提交”(2PC)。CA 系统不能容忍网络错误或节点错误,一旦出现这样的问题,整个系统就会拒绝写请求,因为它并不知道对面的那个结点是否挂掉了,还是只是网络问题。唯一安全的做法就是把自己变成只读的。
  2. CP (consistency + partition tolerance),这样的系统关注一致性和分区容忍性。它关注的是系统里大多数人的一致性协议,比如:Paxos 算法(Quorum 类的算法)。这样的系统只需要保证大多数结点数据一致,而少数的结点会在没有同步到最新版本的数据时变成不可用的状态。这样能够提供一部分的可用性。
  3. AP (availability + partition tolerance),这样的系统关心可用性和分区容忍性。因此,这样的系统不能达成一致性,需要给出数据冲突,给出数据冲突就需要维护数据版本。Dynamo 就是这样的系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值