分布式系统CAP原则

论文 Consistency Tradeoffs in Modern Distributed Database System Design

CAP原则

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。

在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得。

在这里插入图片描述

  • 一致性(Consistency): all nodes see the same data at the same time, 即所有节点在同一时刻的数据完全一致。
    • 客户端:多并发访问时如何获取更新过的数据;
    • 服务端:如何将数据更新分布到整个系统,以保证数据最终一致。
  • 可用性(Availability): Reads and writes always succeed,即服务一直可用,而且响应时间正常,不会访问失败或超时。
  • 分区容忍性(Partition tolerance): the system continues to operate despite arbitrary message loss or failure of part of the system,网络故障导致节点间无法通信而分成多个分区,系统还能正常对外服务。

经典例子:

在这里插入图片描述

上图是CAP的一个基本场景,网络中有两个节点N1和N2,他们之间网络连通,N1中有一个应用程序A,和一个数据库V,N2有一个应用程序B和一个数据库V。现在,A和B是分布式系统的两个部分,V是分布式系统的数据存储的两个子数据库。

  • 一致性:N1和N2中的数据是一样的,V0=V0。
  • 可用性:用户不管是请求N1或者N2,都会得到立即响应。
  • 分区容错性:N1和N2有任何一方宕机,或者网络不通的时候,都不会影响N1和N2彼此之间的正常运作。

在这里插入图片描述

上图是分布式系统正常运转的流程

  • 用户向N1机器请求数据更新,程序A更新数据库Vo为V1
  • 分布式系统通过同步操作M,将V1的数据同步的N2中V0,使得N2中的数据V0也更新为V1
  • N2中的数据V1再响应N2的请求。

但是现实往往没有这么顺利,作为一个分布式系统,它和单机系统的最大区别就在于网络,N1和N2之间的网络中断是很常见的故障,分布式系统必须要能够应对这种网络故障,也就是说要满足分区容错性,在这种情况下再进一步考虑是否还能满足一致性和响应性。


在这里插入图片描述

假设在N1和N2之间网络断开的时候有用户向N1发送数据更新请求,那N1中的数据V0将被更新为V1。由于网络是断开的,所以无法进行同步操作M,N2中的数据依旧是V0;这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据V1,怎么办呢?这种情况下有两种选择:

  1. 牺牲数据一致性:响应旧的数据V0给用户;
  2. 牺牲可用性:阻塞等待,直到网络连接恢复,数据更新操作M完成后,再给用户响应最新的数据V1

总的来说:CAP理论在分布式系统中,只能实现其中两个特性。而分区容忍性(P)必须要实现,所以我们多数情况下需要在一致性(C)和可用性(A)之间进行权衡。要么是CP,要么是AP。

在这里插入图片描述

CP系统是牺牲可用性的系统。相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。CP类型的系统有 MongoDB, HBase, Zookeeper等。

AP系统是牺牲一致性的系统。要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。AP类型的系统有 Couch DB,Cassandra,Amazon Dynamo等。

CAP原则的局限性:

CAP理论仅仅只是在遇到某些类型故障时才会约束系统,正常运行期间并不会限制系统的任何功能。然而实际上,网络分区很少发生,所以当网络分区不发生时,CAP就不起作用了。

在此情况下,论文引出CAP理论的扩展,即PACELC理论。

简单来说就是

  • 如果有网络分区(P),系统就必须在availability(A)和consistency(C)之间取得平衡;
  • 如果没有网络分区,系统则需要在latency(L)和consistency(C)之间取得平衡。

论文将CAP和延迟(L)与一致性(C)之间的权衡合并起来得到公式PACELC。

一致性与延迟之间的权衡(tradeoff)

无论是否发生网络分区,都需要在一致性与延迟之间进行权衡。

原因: 一致性 → 系统需要备份数据→ 数据复制导致延迟→ 延迟过大会导致低可用性

一致性与延迟之间的权衡取决于数据备份的方式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值