从 0 开始学架构
李运华
网名“华仔”,前阿里资深技术专家(P9)
152573 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 66 讲
结束语 (1讲)
结课测试 (1讲)
从 0 开始学架构
15
15
1.0x
00:00/00:00
登录|注册

22 | 想成为架构师,你必须知道CAP理论

可用性和分区容忍性
一致性和分区容忍性
系统能够在网络分区发生时继续履行职责
系统能够在消息丢失或分区错误时继续工作
非故障节点在合理时间内返回合理响应
每个请求都能得到成功或失败的响应
读操作返回最新的写操作结果
所有节点在同一时刻看到相同的数据
分布式系统只能满足一致性、可用性和分区容忍性中的两个
分布式系统不可能同时满足一致性、可用性和分区容忍性
AP架构
CP架构
第二版解释
第一版解释
第二版解释
第一版解释
第二版解释
第一版解释
第二版解释
第一版解释
CAP应用
分区容忍性
可用性
一致性
定义
CAP理论

该思维导图由 AI 生成,仅供参考

CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP 是必须掌握的理论。
布鲁尔在提出 CAP 猜想的时候,并没有详细定义 Consistency、Availability、Partition Tolerance 三个单词的明确定义,因此如果初学者去查询 CAP 定义的时候会感到比较困惑,因为不同的资料对 CAP 的详细定义有一些细微的差别,例如:
Consistency: where all nodes see the same data at the same time.
Availability: which guarantees that every request receives a response about whether it succeeded or failed.
Partition tolerance: where the system continues to operate even if any one part of the system is lost or fails.
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

CAP理论是分布式系统设计中的重要概念,指出在一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者中只能选择其中两个。本文详细解释了CAP理论的演变和关键概念,强调了对于架构师设计分布式系统的重要性。作者通过两次阐述CAP理论,从不同角度深入阐述了一致性、可用性和分区容忍性的含义及其在实际应用中的影响。文章还对CP和AP两种架构进行了详细比较,强调了在分布式系统中必须选择P(分区容忍)要素,因为网络本身无法做到100%可靠,有可能出故障,所以分区是一个必然的现象。最后,文章提出了一个思考题,引发读者对Paxos算法构建的分布式系统属于CAP架构中的哪一种的思考和讨论。通过本文的阐述,读者可以深入了解CAP理论对分布式系统设计的重要性,以及在实际应用中的选择和影响。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学架构》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(96)

  • 最新
  • 精选
  • 鹅米豆发
    前面对于一致性的描述有些问题。修正一下。 1、Paxos算法本身是满足线性一致性的。线性一致性,也是实际系统能够达到的最强一致性。 2、Paxos及其各种变体,在实际工程领域的实现,大多是做了一定程度的取舍,并不完全是线性一致性的。 3、比如,Zookeeper和Etcd,都是对于写操作(比如选举),满足线性一致性,对于读操作未必满足线性一致性。即可以选择线性一致性读取,也可以选择非线性一致性读取。这里的非线性一致性,就是顺序一致性。 4、cap中的一致性,是指线性一致性,而不是顺序一致性。

    作者回复: 感谢,根据Raft的论文描述,工程上目前还没有完全实现paxos算法的系统

    2018-06-20
    3
    70
  • luop
    第二版解释从 non-failing node 的角度去看待「可用性」,个人存疑。 如果一个集群有 2 个 node,某个时刻 2 个 node 都 fail 了,那么此时该集群的「可用性」该如何定义? 个人觉得:「一致性」和「可用性」都应该站在 client 侧去审视;而「分区容忍性」则是集群 node 侧在遇到网络分区的问题时,选择如何去影响 client 侧感知到的「一致性」和「可用性」。

    作者回复: 两个都挂整个集群肯定挂了,CAP关注的是分区时的可用性和一致性,不是说保证整个集群不挂,其实你最后的理解就是非常正确的👍👍

    2018-08-22
    2
    39
  • 轩辕十四
    网络分区类似于脑裂。 个人对CAP的类比,不知是否合适: P要求数据有冗余, C要求数据同步,会花时间, A要求返回及时,不需要等。 不可能三角形说的是: 要备份要同步,就得等; 要备份不想等,就会不同步; 要同步还不想等,就别备份

    作者回复: P要求分布式和数据同步,C要求数据完全一致,A要求返回及时

    2018-07-06
    26
  • Yole
    应该再补充哪些系统上ca,哪些是cp,哪些是ap,他们为什么这么设计,都有什么好处。

    作者回复: 你可以自己尝试去分析一下,有疑问评论即可

    2018-06-16
    22
  • tim
    请问一下作者,在CP的选型中。 假如是查询一条并不存在的数据,文中还说得通。 但如果出现更新数据不及时,由于n1和n2 出现分区错误,那么n2如何知道自己不是最新的数据并返回error呢?? 假如就是简单的mysql主从, 从库并没有断连主库,只是数据在请求来是还没有更新到最新。 那么从库又从哪里得知这件事儿的呢??

    作者回复: CAP理论是忽略延时的,这就是说理论做了一个假设,只要网络通数据就会一致,这也是实际应用CAP时容易踩的坑,后面一章会讲

    2018-07-22
    2
    20
  • Geek_88604f
    paxos的核心思想是少数服从多数,在节点数为2n+1的集群中,只要n+1节点上完成了写入就能保证接下来的读操作能够读到最新的值。从这一点来说它满足C(对某个指定的客户端来说,读操作保证能够返回最新的写操作结果);一个实现了paxos协议的集群最多可以容忍n个节点故障(n个节点同时故障的概率是比较小的),非故障节点组成的集群仍能正常提供服务,从这个角度来讲它满足A(非故障的节点在合理的时间内返回合理的响应,不是错误和超时的响应);paxos集群发生分区肯能存在两种情况,第一种情况是发生分区后没有发生重新选举,这种情况下集群仍能正常工作,因此满足P(当出现网络分区后,系统能够继续“履行职责”)。另一种情况是发生分区后原来的集群达不到多数派,集群不在对外提供服务,因此不满足P,当发生这种情况的时候,一般会快速修复。总的来说在某种意义上来看paxos满足CAP。

    作者回复: 分析的很好

    2019-09-08
    2
    15
  • aduan
    老师,你好,有个疑问,在cp架构中n1,n2通讯是中断的,n2根据设什么作为依据返回error?

    作者回复: 一般都是心跳检测

    2018-12-16
    2
    14
  • 发条橙子 。
    你好老师 ,这里讲的分区容错是指什么 ,是指发生分区现象时系统正常运行 。 但是分区现象具体指的是什么 可以详细讲一下么

    作者回复: 分区就是集群中一部分节点和另外一部分无法通信

    2019-01-29
    10
  • Gaozy
    有个疑问,很多工程实现都是选择AP并保证最终一致性,但是选择了A不就意味着返回数据不是最新的吗,最终一致性是如何实现的

    作者回复: 人工数据订正和补偿,定时脚本批量检查和修复等都可以

    2019-02-13
    2
    9
  • zj
    ZK出现分区,不能再履行职责了吧,因此ZK不满足P。老师这样理解对吗

    作者回复: zk多数节点正常就可以正常运行,分区中的少数节点会进入leader选举状态,这个状态不能处理读写操作,因此不符合A,如果不考虑实时一致性,zk基本满足CP的要求

    2018-06-19
    9
收起评论
显示
设置
留言
96
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部