分布式系统原理(10)CAP 理论

CAP 理论

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

定义

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

  • C: Consistency (一致性),CAP 理论中的副本一致性特指强一致性
  • A: Availiablity(可用性),指系统在出现异常时已经可以提供服务
  • P: Tolerance to the partition of network (分区容忍),指系统可以对网络分区这种异常情况进行容错处理

CAP 理论指出:无法设计一种分布式协议,使得同时完全具备 CAP 三个属性:

  • 该种协议下的副本始终是强一致性
  • 服务始终是可用的
  • 协议可以容忍任何网络分区异常;分布式系统协议只能在 CAP 这三者间所有折中

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

CAP 理论的意义

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

协议分析

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

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 协议的正常工作

Quorum 机制

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

首先,读取 R 个副本时,可以保证读取到成功提交的版本,但无法保证读取到最新的成功提交的版本(2.4.4)。也就是说,系统具有一定的一致性,却无法真正做到强一致性。再者,无论是更新 W 个副本,还是读取 R 个副本,协议可以允许部分副本异常而不影响更新或者读取服务。最后,只要能与 W 个副本通信就可以提供更新服务,能与 R 个副本通信就可以提供读服务,协议具有一定的容忍网络分化的能力。工程中,当使用 3 个副本时,可以讲三个副本部署在三个不同的机房,只有同时出现两个机房的网络都异常时才会影响服务,这种情况的概率本身已经非常低了

两阶段提交协议

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

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

Paxos 协议

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

首先,无需赘述,Paxos 协议是一种强一致性协议。再者,Paxos 协议只有两种情况下服务不可用:一是超过半数的 Proposer 异常,二是出现活锁。前者可以通过增加 Proposer 的个数来降低由于 Proposer 异常影响服务的概率,后者本身发生的概率就极低。最后,只要能与超过半数的Proposer 通信就可以完成协议流程,协议本身具有较好的容忍网络分区的能力

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值