分布式系统原理

CAP 理论

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

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. CAP 理论的意义

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

3. 协议分析

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

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

3.2 Quorum 机制

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

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

3.3 两阶段提交协议

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

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

3.4 Paxos 协议

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

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

参考:《分布式系统原理介绍》 - 刘杰

分布式系统原理 之9 CAP 理论相关推荐

  1. 分布式系统架构常识:CAP理论

    转载自 分布式系统架构常识:CAP理论 什么是CAP理论? 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后麻省理工学院的Seth Gilb ...

  2. 分布式系统CAP理论解析

    在分布式系统架构下,CAP理论已经成为公认的定理,随着二十年技术的发展,CAP理论的解读也发生了些变化.本文简要介绍CAP理论的原理及证明思路,以及在分布式架构下的适用性,以加深理解. 1.CAP简介 ...

  3. 大数据开发者应该知道的分布式系统 CAP 理论

    无论你是一个系统架构师,还是一个普通开发,当你开发或者设计一个分布式系统的时候,CAP理论是无论如何也绕不过去的.本文就来介绍一下到底什么是CAP理论,如何证明CAP理论,以及CAP的权衡问题. CA ...

  4. 什么是分布式系统的CAP理论?

    什么是分布式系统的CAP理论? 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后,麻省理工学院的Seth Gilbert和Nancy Lyn ...

  5. 学习分布式不得不会的CAP理论

    2018年07月16日 11:52:59 Hollis在CSDN 阅读数:161更多 个人分类: 架构 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP ...

  6. nosql简答什么是最终一致性_NoSql的三大基石:CAP理论BASE最终一致性

    关系型数据库的局限 NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战: 1.高并发 一个最典型的就是电商网站,例如双11, ...

  7. Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)

    一.Eureka简介 Eureka Server(注册中心,相当于zookeeper) Eureka Client: Provider Consumer 多个Eureka就叫集群.集群之间会定时通过r ...

  8. 分布式系统中的FLP不可能原理、CAP理论与BASE理论

    前言 分布式系统是由多个不同的服务节点组成,节点与节点之间通过消息传递进行通信和协调.根据消息传递的不同,分布式系统的运行模型可以分为异步模型系统 和同步模型系统. 1.同步与异步 同步和异步关注的是 ...

  9. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

最新文章

  1. python concat去除重复值语句_Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)...
  2. [机器学习] 常用并行计算算子原理
  3. JavaScript——正则表达式
  4. 1.Linux性能诊断 --- 入门命令100条
  5. Linux 2.6 中的页面回收与反向映射
  6. Ubuntu/Linux 下切换 python 版本
  7. 谷歌搜索、谷歌学术、Github的镜像网站
  8. 手机H5-调用百度地图导航
  9. 动态内存分配算法:首次适应算法,循环首次适应算法,最坏适应算法,最佳适应算法实现
  10. Portable Batch System
  11. [网鼎杯 2020 青龙组]虚幻2 详解 (python脚本)
  12. Jetson Nano开发实录
  13. 关于工作总结中的感悟
  14. Northleaf扩大业务开发团队,任命Chris O’Connor 为澳大利亚和新西兰地区董事总经理
  15. Android音视频——MediaPlayerService
  16. ▲ Android 签到打卡效果
  17. android裁剪图片功能,实战:七步教你Android图片拍摄及剪裁
  18. Keil uvision 5 安装和使用
  19. 【Unity 3D】常用插件DOTween、Haste、Exploder、KGFMapSystem介绍(图文解释)
  20. H5开发在QQ钱包的应用实践

热门文章

  1. Linux进程详细信息查看
  2. DeepSORT多目标跟踪算法
  3. 单位根反演[loj6485]LJJ 学二项式定理
  4. 9.OD-断点、命令
  5. win7下反汇编程序程序基址改变问题
  6. STL vector的erase操作问题
  7. 手写实现RPC框架基础功能
  8. 世界上没有技术驱动型公司
  9. keepalived实现Tomcat服务双机热备
  10. C++中各种智能指针的实现及弊端(二)