深入浅出分布式技术原理
陈现麟
伴鱼技术中台负责人,前小米工程师
21241 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
深入浅出分布式技术原理
15
15
1.0x
00:00/00:00
登录|注册

03|CAP 理论:分布式场景下我们真的只能三选二吗?

最终一致性
序列一致性
如何在实际系统中应用 CAP 理论?
是否真的只能三选二?
推迟 CAP 选择以提高系统性能
努力提升 AP/CP 模型的一致性/可用性
不是简单的三选二
推迟 CAP 选择的策略
网络分区的罕见性
AP 模型的系统设计
强一致性与其他一致性级别
etcd 实践
100% 可用性的实际意义
Cassandra
MongoDB
HBase
BigTable
BASE: NoSQL 运动
ACID: 传统数据库
节点宕机
网络分区
正常响应结果
有限时间内返回结果
100% 可用性定义
其他一致性级别
强一致性
Partition-tolerance (分区容错性)
Availability (可用性)
Consistency (一致性)
核心: 分布式系统最多同时满足两个需求
定理证明: Seth Gilbert 和 Nancy Lynch
提出者: Eric Brewer
CAP 理论的实际应用
CAP 理论的现代理解
分区容错性的重新思考
一致性的重新思考
可用性的重新思考
NoSQL 发展
ACID 与 BASE
分区容错性 (P)
可用性 (A)
一致性 (C)
三要素
定义
思考题
总结
CAP 理论的重新思考与理解
CAP 理论的影响
三要素详解
CAP 理论基础
CAP 理论及其影响和理解

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

你好,我是陈现麟。
通过学习分布式场景下面临的新挑战,你已经了解了从集中式系统演进到分布式系统时,分布式系统在部分故障、异步网络、时钟同步和共识协调这四个方面的新挑战,以及它们对分布式系统设计原则的影响。了解了这些之后,当你在面对分布式系统各种实现的时候,能更深刻地思考这些系统的取舍与权衡了。
经过不断地思考,人们在实践分布式系统架构的时候,从系统可用性和数据一致性的权衡中总结出来了 CAP 理论,它是指导人们在面对架构分布式系统时,进行取舍的设计原则。同时,CAP 理论深刻影响着分布式系统的设计与发展,是我们在学习分布式系统时不能绕过的知识。
所以在这节课中,我将和你一起来讨论什么是 CAP 理论以及它产生的影响,并且我们还会讨论在当前这个时间点,业界对于 CAP 理论的重新思考与理解。

什么是 CAP 理论

CAP 理论是加州理工大学伯克利分校的 Eric Brewer 教授在 2000 年 7 月的 ACM PODC 会议上首次提出的,它是 Eric Brewer 在 Inktomi 期间研发搜索引擎、分布式 Web 缓存时得出的关于数据一致性( C:Consistency )、服务可用性( A:Availability )、分区容错性( P:Partition-tolerance )的一个著名猜想:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

CAP 理论在分布式系统设计中扮演着重要角色,指出在满足分区容错的前提下,无法同时满足数据一致性、服务可用性和分区容错性这三个需求,最多只能同时满足其中的两个。本文深入探讨了CAP理论对分布式系统设计的影响,以及对可用性、一致性和分区容错性的重新思考与理解。文章指出CAP理论的提出解决了分布式系统中数据一致性和可用性之间的争论,推动了BASE理论的接受和NoSQL系统的发展。同时,通过具体实践案例和对Google的Spanner系统的分析,阐述了对CAP理论的重新思考,强调了在网络出现分区的情况下,推迟CAP选择以提高系统的可用性和数据一致性。总的来说,CAP理论给我们定义了系统的设计边界,但我们可以无限逼近边界,并将其作为设计系统的目标。文章内容深入浅出,为读者提供了对分布式系统设计的重要思考和启示。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出分布式技术原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • blentle
    cap从每一个定义来说并不是说牺牲了第三者吧,而是尽量保证第三者

    作者回复: 是的,只是经常说成 3 选 2,让大家的感觉是要放弃 1 个

    2022-01-27
    25
  • 努力努力再努力
    1 一致性 (C)一致性级别 是 从高到低 1.1 强一致性 1.2 单调一致性 1.3 会话一致性 1.4 序列一致性 1.5 最终一致性 2 可用性 (A) 关键字: 100%可用 有限时间内 返回结果 3 分区容错性 (P) 3.1 网络分区 3.2 网络丢包导致的网络不通 (包含节点宕机) 对可用性的重新思考与理解 基于Raft 算法实现的etcd 属于CP模型,但是也尽量保持了可用性 对一致性的重新思考与理解 就算选择了 AP,哪怕出现网络分区 也要尽量保证高的 一致性级别 
结论: 开发一个分布式系统的时候 系统正常情况 CAP 都要,等到 出现网络分区的时候 再选择放弃 部分A 或者C 尽可能互相满足 自己的思考: 1 上面的每一点 如果是我 有什么方案解决呢?
 思考题: 大部分时间都是 无问题的,可以保证CAP 共存 只是需要 添加几个方法 1. 探知 分区发生问题 2. 进入显式的分区模式以限制某些操作 3 启动恢复过程以 恢复数据一致性并补偿分区期间发生的错误 猜测: 可以 先存到本地 ,等分区恢复 ,带着 offset 进行比较 恢复数据

    作者回复: 非常棒👍🏻

    2022-01-26
    12
  • GAC·DU
    分布式场景下,站在用户角度思考CAP理论,用户发送一条请求,在正确的时间响应正确的结果,可以被视为同时满足三者的系统设计。站在系统设计者的角度思考CAP理论,同时满足两者而第三者则是努力的方向,先让系统能够用起来,然后迭代优化。这也满足现在常说的“小步子快跑”的说法。

    作者回复: 非常棒!

    2022-01-27
    11
  • leitiannet
    Redis有主从架构,哨兵架构和集群架构,分别属于什么模型(AP还是CP)?

    作者回复: 主从架构,哨兵架构和集群架构是高可用和水平扩展的方案,它们都可以做成 AP 或 CP 的模型。 不过一般对于 redis 缓存的场景来说,可用性是高于一致性,所以,redis的主从架构,哨兵架构和集群架构都是 AP 模型。

    2022-03-07
    8
  • 独一无二
    文中有一句很有概括性的句子:"在满足分区容错的前提下,没有算法能同时满足数据一致性和服务可用性,只能在数据一致性和服务可用性之间二选一"。也就是未发生p,则ca都可以满足,发生p后,才会选择一个。并不是软件设计之初就必需要舍弃一个。

    作者回复: 是的👍

    2022-03-18
    5
  • 不吃辣👾
    老师,我发现人工可以弥补CAP中的任何一项,达到接近100%水平。😅

    作者回复: 哈哈,问题发生后,人工可以修复,但是不能保证不发生。

    2022-04-06
    2
    2
  • Hello,Tomrrow
    CAP理论只是给我们提供了分布式系统设计的边界,这是好事,避免追求一些极致的尝试。系统设计不像是盖房子,主体结构确定后就不能改变了。系统设计要有灵活性,在不同的业务场景下,微调系统,以便更好的服务业务。

    作者回复: 赞👍

    2022-04-01
    2
  • Summer 空城
    作者您好,关于p,我听到最多的是数据在不同集群中复制。如果一个集群的话,是不是不存在p的问题,即使一个集群中有很多的服务而且这些服务可能会宕机

    作者回复: 不是的,只要是分布式系统,就存在 P 的问题,只不过对运行在多个数据中心的分布式系统,由于数据中心的网络出现问题的概率更大。

    2022-03-03
    2
  • 葡萄糖sugar
    作者你好,cp 我能理解为系统在达到强一致性以及网络分区容忍性,与此同时我们还能够尽力达到可用性,并且依旧保持强一致性吗?

    作者回复: 以 CAP 的定义来说,A 是指 100% 的可用性,所以分布式系统中,CA 不可以兼得,不过可用性的范围在0%-100%之间,99.9% 或者更高的可用性都有可能实现的,比如专栏中提到的 spanner。

    2022-01-27
    3
    2
  • HappyHasson
    既然说CAP中的A是100%可用,100%是一个理想值,那说明A是一个不可能达到的方向,AP这个组合不应该存在,理论上只存在CP?

    作者回复: 不关心 C 的时候,AP 是存在的。 P 是网络分区容忍,比如一个系统的数据会在 a、b 两个节点复制,假设 a 和 b 之前的网络出现故障,不同通信了,那么 a 和 b 之前的数据是不能保证一致的,就是 C 不能满足了,如果我们是 AP 的系统,不关心 a、b 之间数据的一致性的话,a、b 是可以同时对外提供服务的,这个时候 A 就是 100% 的

    2022-02-13
    4
    1
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部