5.2 一致性与可用性的权衡

CAP 是分不是系统中关于一致性与可用性的权衡理论,也是理解分布式系统的起点。

1999 年,美国工程院院士 Eric A.Brewer 发表的论文《Harvest, Yield, and Scalable Tolerant Systems》[1] 中,首次提出了 CAP 原理(CAP principle)。一年之后,Eric A.Brewer 又在 PODC 大会上演讲了名为《HTowards robust distributed systems》的主题[2],并在会上详细介绍了 CAP 原理,之后 CAP 的概念开始流传。

虽然 Eric A.Brewer 提出了 CAP,但此时的 CAP 仅是一种猜想,并没有被从理论上证明。2002 年,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 联合发表了一篇论文[3],用严谨的数学推理证明了 CAP 的正确性,此后 CAP 从原理转变成定理,并开始深远地影响着分布式系统领域。

图 5-1 CAP 定理

CAP 定理描述的是一个分布式系统中,涉及共享数据问题时,以下三个特性最多只能同时满足其中两个

  • 一致性Consistency):代表数据在任何时刻、任何分布式节点中所看到的都是符合预期的。基于证明严谨性的考虑,在学术的研究中一致性指的是强一致性(Strong Consistency)或者也叫做线性一致性(Linearizability)。
  • 可用性Availability):代表系统不间断地提供服务的能力,理解可用性要先理解与其密切相关两个指标:可靠性(Reliability)和可维护性(Serviceability)。可靠性使用平均无故障时间(Mean Time Between Failure,MTBF)来度量;可维护性使用平均可修复时间(Mean Time To Repair,MTTR)来度量。可用性衡量系统可以正常使用的时间与总时间之比,其表征为:A = MTBF/(MTBF+MTTR),即可用性是由可靠性和可维护性计算得出的比例值,譬如 99.9999% 可用,即代表平均年故障修复时间为 32 秒。
  • 分区容错性Partition tolerance):代表分布式环境中部分节点因网络原因而彼此失联后,即与其他节点形成「网络分区」时,系统仍能正确地提供服务的能力。

额外知识

对一个分布式系统而言,因为必须要实现分区容错性,不能舍弃 P,CAP 其实是二选一(AP 和 CP 之间)而不是三选二的权衡。

由于 CAP 定理已有严格的证明,本节不去探讨为何 CAP 不可兼得,而是直接分析如果舍弃 C、A、P 时所带来的不同影响。

  • 放弃分区容忍性(CA without P):意味着我们将假设节点之间通信永远是可靠,永远可靠的通信在分布式系统中必定不成立,只要用到网络来共享数据,分区现象就会始终存在。没有 P,也谈不上是什么分布式系统。
  • 放弃可用性(CP without A):意味着我们将假设一旦网络发生分区,节点之间的信息同步时间可以无限制地延长。在现实中,选择放弃可用性的 CP 系统情况一般用于对数据质量要求很高的场合中。
  • 放弃一致性(AP without C):意味着我们将假设一旦发生分区,节点之间所提供的数据可能不一致。选择放弃一致性的 AP 系统目前是设计分布式系统的主流选择,因为 P 是分布式网络的天然属性,你再不想要也无法丢弃;而 A 通常是建设分布式的目的,如果可用性随着节点数量增加反而降低的话,分布式系统也就失去了存在的价值,除非银行、证券这些涉及金钱交易的服务,宁可中断也不能出错,否则多数系统是不能容忍节点越多可用性反而越低。

通过上面分析舍弃不同属性的影响,我们看到这么一个无奈的事实:「事务」原本的目的就是获得「一致性」,而在分布式环境中「一致性」却不得不成为通常被牺牲、被放弃的那一项属性,结果 AP 类型的系统反而成了分布式系统的主流。

但无论如何,我们设计系统终究还是要确保操作结果至少在最终交付的时刻是正确的,这个意思是允许数据中间不一致,但应该在输出时被修正过来。为此,工程师们又重新给一致性下了定义,将 CAP、ACID 中讨论的一致性称为强一致性,而把牺牲了 C 的 AP 系统但又要尽可能获得正确结果的行为称为追求「弱一致性」。不过,如果只单纯说「弱一致性」,那其实就是不保证一致性的意思。在弱一致性里,工程师又总结出稍微强一点的特例,被称为最终一致性(由 eBay 的系统架构师 Dan Pritchett 在 BASE 理论提出)。

额外知识

ACID 在英文中有的「酸」的含义,对应系统设计的强一致性,而 BASE 在英文中有「碱」的含义,对应系统放弃强一致性实现可用性的设计。酸 vs 碱衍生出 CAP 中的 AP 型可用性架构和 CP 型强一致性架构,所以 CAP 理论又戏称度量分布式系统的「Ph试纸」。


  1. 参见 https://ieeexplore.ieee.org/document/798396 ↩︎

  2. 参见 https://dl.acm.org/doi/10.1145/343477.343502 ↩︎

  3. 参见 https://groups.csail.mit.edu/tds/papers/Gilbert/Brewer2.pdf ↩︎

总字数:1416
Last Updated:
Contributors: isno