在前一篇分布式系统–拜占庭将军问题(The Byzantine Generals Problem) 我们理解了共识问题的背景,这一节主要讨论如何解决或者理解自己系统中的共识问题,通过什么来分辨自己的系统需要哪一种共识。

这个理论就是 CAP 理论,先想下面几个问题:

  • 什么是 CAP,全称是什么,之间的关系是什么?
  • CAP 之间是什么关系,场景对应是怎样的?
  • P 跟 A 都保证了可用性,但怎么区分?
  • 如何运用 CAP?

注意,如果是单体系统,不存在什么 CAP 理论 ,就不存在分区。


定义

属性 全称 中文 描述
C Consistency 一致性 集群节点要么读到集群最新数据,要么全部都返回读取失败
A Availability 可用性 任何来自客户端的请求,不管访问哪个**非故障节点**,都能得到响应数据,但不保证是同一份最新数据
P Partition Tolerance 分区容错性 当节点间出现任意数量的消息丢失或高延迟的时候,系统仍然在继续工作

从定义可以看到,CAP 就是 3 个属性,分别是一致性,可用性,分区容错性。

一致性

强调的是数据绝对的正确

下图,第一步设置了 x 为 2。但是从节点 2 获取的 x 还是 1。

第三步,节点之间通过通信,同步 x 数据。第四步,从节点 2 拉取到的 x 就是 2。

这样子,不管客服端访问哪个节点,读取到的都是同一份最新写入的数据。

可用性

强调的是服务绝对的正确

不管节点的数据是否一致,只要非故障节点服务器收到请求,就返回 x 的值,那么这个系统的服务就是满足可用性的。

分区容错性

强调的是系统在有错的前提下,依然能够正常运作

可用性和分区容错性看起来很相似,都保证了可用性,但是不要迷惑了。可以这么理解,有分区就有可能出现问题,但是出现问题之后给什么样的反馈,是取决于这个系统设计的人。怎么反馈,反馈成什么样,这就是 C 和 A。

因为分布式系统与单机系统不同,它涉及到多节点间的通讯和交互,节点间的分区故障是必然发生的,所以要提醒的是,在分布式系统中分区容错性是必须要考虑的。

CAP 不可兼得

因为分区容错性是前提,P一定有。可以这么理解,一个蓄水池,恒水位,有一个出水口和入水口。入水口坏了,你是想要这个蓄水池先供水,还是先保证水位正确,不要触发水位报警。这个蓄水池,肯定不能在没有入水的前提下,还能让水位保持恒定。因此,CAP 是不能兼容的。要想兼容,除非这个系统不需要分区。

CAP 不可兼得最初是埃里克·布鲁尔(Eric Brewer)基于自己的工程实践,提出的一个猜想,后被赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)证明,证明过程可以参考论文《Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services》,记住结论就好了。

补充一点:基于证明严谨性的考虑,赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)对指标的含义做了预设和限制,比如,将一致性限制为原子一致性

如何使用 CAP 理论

有网络交互就一定会有延迟和数据丢失,而这种状况我们必须接受,还必须保证系统不能挂掉。所以就像前面提到的,节点间的分区故障是必然发生的。也就是说,分区容错性 P 是前提,是必须要保证的。

现在就只剩下一致性 C 和可用性 A 可以选择了:要么选择一致性,保证数据正确;要么选择可用性,保证服务可用。

那么 CP 和 AP 的含义是什么呢?

  • 选择了一致性 C :一定会读到最新的数据,不会读到旧数据,但如果因为消息丢失、延迟过高发生了网络分区,那么这个时候,当集群节点接收到来自客户端的读请求时,为了不破坏一致性,可能会因为无法响应最新数据,而返回出错信息。
  • 选择了可用性 A :系统将始终处理客户端的查询,返回特定信息,如果发生了网络分区,一些节点将无法返回最新的特定信息,它们将返回自己当前的相对新的信息。

CAP 适用场景

  • CA:典型的应用是 Etcd,Consul 和 Hbase,zookeeper
  • AP:Cassandra 和 DynamoDB,服务注册中心

可以看一下运用 CAP 理论分析 redis cluster Redis cluster是AP架构还是CP架构,这一篇文章。每个系统不能绝对地看说是 AP 还是 CP,每个系统里面的子系统或者模块会根据场景去区分,可能一个系统里面会同时出现 APCP 架构。


资料来源

本文档主要基于极客时间分布式协议与算法实战

分布式系统-CAP 理论相关推荐

  1. 分布式系统CAP理论深入探索和分析

    分布式系统CAP理论分析 1.理想的计算机到分布式系统 寻找解决办法 分布式系统作为突破口 分布式系统产生新的问题 理想环境的困境 权衡后的转机 分布式系统总结 2.分布式算法 1.Paxos 2.R ...

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

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

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

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

  4. 分布式系统CAP理论

    引言 CAP是分布式系统.特别是分布式存储领域中被讨论最多的理论,"什么是CAP定理?"在Quora 分布式系统分类下排名 FAQ 的 No.1.CAP在程序员中也有较广的普及,它 ...

  5. 分布式系统CAP理论与CA选择

    总结: CAP指的是数据一致性.服务可用性.分区容错性:(这里的一致性指的是强一致性,又叫原子性或线性一致性:可用性指的是所有读写操作都要能终止,没有时延上的要求) 分布式系统中P是必选项:在P必选的 ...

  6. 结合CAP理论分析ElasticSearch的分布式实现方式

    简介 首先引出本人对ElasticSearch分布式的特点:再者针对分布式系统CAP理论,来论证分析ElasticSearch如何实现分布式?另外分析ElasticSearch在CAP理论的实现中是如 ...

  7. 肝了3版才满意:分布式系统之CAP理论,我们对它的理解和误解

    引言 CAP 理论,相信很多人都听过,它是指: 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance) ...

  8. 浅论服务端应用程序开发中的CAP思想(非分布式系统中的CAP理论)

    本文从属于笔者的<服务端应用程序结构风格变迁之路> CAP理论是分布式系统构建中的基础理论之一,其中的C(Consistency),一致性即指所有的节点都能访问同一份最新的数据副本.A(A ...

  9. 分布式系统之CAP理论

    一.CAP起源 CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他认为在设计一个大规模可扩放的网络服务时候会遇到三个特性:一致性(consistency).可用性(Avail ...

最新文章

  1. linux账号管理命令,linux账号管理及相关命令和操作
  2. 区块链拓展-信任颠覆
  3. Design Pattern - Abstract Factory(C#)
  4. Spring Cloud 常见面试题及答案
  5. python自学视频-python自学视频看这个就对了
  6. 【sublime Text】关闭sublime的更新提醒和激活提醒
  7. Fiori应用里如何给客户主数据维护图片
  8. Spring Bean范围
  9. 【PPT分享】阿里巴巴定向广告之新一代Rank技术.pdf(附下载链接)
  10. error: ac_nonexistent.h: No such file or directory
  11. DVWA搭建中遇到的无法连接数据库问题及处理
  12. 目标检测:Object Detection in 20 Years: A Survey
  13. 如何用计算机计算log除法,对数计算器_如何使用计算器计算对数
  14. 2022第十七届巴拿马春晚-113万海内外观众欢聚迎新春
  15. 直播搭建软件开发直播搭建技术流程解决方案
  16. 2021 Android APK反编译 apktool使用教程
  17. 路由器和交换机常见故障信息收集命令总结
  18. 【JY】浅谈结构设计
  19. html页面结构代码,pjblog模板结构HTML代码网页展示
  20. mysqldump备份

热门文章

  1. git知识点以及git常见错误
  2. 游戏测试相关 测试一个英雄的技能(春招被问比较多的一道题)
  3. EB tresos 操作视频资料
  4. 优雅源自国力--中国可以更优雅
  5. 钢铁侠当PM, 美队做程序员…超级英雄加入IT业会做什么岗位?
  6. 小米手机解决此区域不可截屏
  7. 我用这 18 个神奇的库,美化了我的项目,真是亮瞎我的眼!
  8. java连接SQL2008R2
  9. java aoi 服务器地图_aoi--地图视野处理
  10. Visual Assist X的用法