• 沒有找到結果。

CAP 理论

在文檔中 分布式系统原理介绍 (頁 69-72)

2 分布式系统原理

2.9 CAP 理论

CAP 理论是由 Eric Brewer 提出的分布式系统中最为重要的理论之一[8]。本文将 CAP 理论安排 在原理部分的最后介绍是为了利用前面已经介绍过的几种分布式协议来帮助理解CAP 理论。

2.9.1 定义

CAP 理论的定义很简单,CAP 三个字母分别代表了分布式系统中三个相互矛盾的属性:

Consistency (一致性):CAP 理论中的副本一致性特指强一致性(1.3.4 );

Availiablity(可用性):指系统在出现异常时已经可以提供服务;

Tolerance to the partition of network (分区容忍):指系统可以对网络分区(1.1.4.2 )这种异常情 况进行容错处理;

CAP 理论指出:无法设计一种分布式协议,使得同时完全具备 CAP 三个属性,即 1)该种协议 下的副本始终是强一致性,2)服务始终是可用的,3)协议可以容忍任何网络分区异常;分布式系统 协议只能在CAP 这三者间所有折中。

CAP 理论的详细证明可以参考相关论文。这里可以简单用一个反例证明不存在 CAP 兼具的系 统。假设系统只有两个副本 A 和 B,Client 更新这两个副本,假设在网络分化时,Client 与副本 A 可以正常通信,但副本B 与 Client、副本 B 与副本 A 无法通信,此时,Client 对副本 A 更新的信息 永远无法同步到副本B 上。如果希望系统依旧具有强一致的属性,则此时需要停止更新服务,即不 再修改数据,从而让副本A 与副本 B 保持一致;如果希望系统依旧可以提供更新服务,则只能更新 副本A 而无法更新副本 B,此时无法保证副本 A 与副本 B 一致。

2.9.2 CAP 理论的意义

热力学第二定律说明了永动机是不可能存在的,不要去妄图设计永动机。与之类似,CAP 理论 的意义就在于明确提出了不要去妄图设计一种对CAP 三大属性都完全拥有的完美系统,因为这种系 统在理论上就已经被证明不存在。

2.9.3 协议分析

本节分析在第二章中介绍的几种分布式协议是如何在CAP 三大属性中做折中与取舍的。在三章 介绍典型分布式系统时,也会用CAP 理论对这些系统的分布式协议进行分析。

2.9.3.1 Lease 机制

Lease 机制牺牲了部分异常情况下的 A,从而获得了完全的 C 与很好的 P。

上面这句话有点抽象,下面一一解释。首先,Lease 机制不是在任何情况下都具有可用性的,

使用Lease 机制的协议,在发生异常时,需要等待 Lease 超时才能收回 Lease 权限。然而,Lease 的 持有者可能在Lease 超时前就已经出现异常而不能提供服务了,直到 Lease 超时这段时间内,系统 服务的可用性都有问题。例如,如果用lease 决定 Primary 副本的,Primary 副本节点宕机后,只有 待Lease 超时才能选出新的 primary 副本,这段时间由于缺乏 primary 副本是没有更新服务的。再者,

Lease 协议本身保证了对于 Lease 约定的承诺在 Lease 颁发者和持有者之间是始终一致的。即使 Lease 持有者由于网络分化没有真正收到Lease,Lease 颁发者也会在 Lease 时间内执行自己的承诺;而一 旦Lease 持有者收到 Lease,则即使再出现网络分化,也无法影响双方对 Lease 承诺理解的一致性。

最后,Lease 协议引入了“时间”这一概念,使得在对抗网络分化上有其特别的优势,另外,Lease 只需由颁发者向持有者通信,即使网络是单向的也不影响Lease 协议的正常工作。

2.9.3.2 Quorum 机制

这里仅讨论一般的Quorum 机制,即总共有 N 个副本,成功更新 W 个副本则算成功提交,读取 时读R 个副本。这种一般的 Quorum 机制,在 CAP 三大因素中都各做了折中,有一定的 C,有较好 的A,也有较好的 P,是一种较为平衡的分布式协议。

首先,读取R 个副本时,可以保证读取到成功提交的版本,但无法保证读取到最新的成功提交 的版本(2.4.4 )。也就是说,系统具有一定的一致性,却无法真正做到强一致性。再者,无论是更 新W 个副本,还是读取 R 个副本,协议可以允许部分副本异常而不影响更新或者读取服务。最后,

只要能与 W 个副本通信就可以提供更新服务,能与 R 个副本通信就可以提供读服务,协议具有一 定的容忍网络分化的能力。工程中,当使用3 个副本时,可以讲三个副本部署在三个不同的机房,

只有同时出现两个机房的网络都异常时才会影响服务,这种情况的概率本身已经非常低了。

2.9.3.3 两阶段提交协议

两阶段提交系统具有完全的C,很糟糕的 A,很糟糕的 P。

首先,两阶段提交协议保证了副本间是完全一致的,这也是协议的设计目的。再者,协议在一 个节点出现异常时,就无法更新数据,其服务可用性较低。最后,一旦协调者与参与者之间网络分 化,无法提供服务。

2.9.3.4 Paxos 协议

同样是强一致性协议,Paxos 在 CAP 三方面较之两阶段提交协议要优秀得多。Paxos 协议具有 完全的C,较好的 A,较好的 P。Paxos 的 A 与 P 的属性与 Quorum 机制类似,因为 Paxos 的协议本 身就具有Quorum 机制的因素。

首先,无需赘述,Paxos 协议是一种强一致性协议。再者,Paxos 协议只有两种情况下服务不可

用:一是超过半数的Proposer 异常,二是出现活锁(2.8.4 )。前者可以通过增加 Proposer 的个数来 降低由于Proposer 异常影响服务的概率,后者本身发生的概率就极低。最后,只要能与超过半数的 Proposer 通信就可以完成协议流程,协议本身具有较好的容忍网络分区的能力。

在文檔中 分布式系统原理介绍 (頁 69-72)