03|CAP 理论:分布式场景下我们真的只能三选二吗?
该思维导图由 AI 生成,仅供参考
什么是 CAP 理论
- 深入了解
- 翻译
- 解释
- 总结
CAP 理论在分布式系统设计中扮演着重要角色,指出在满足分区容错的前提下,无法同时满足数据一致性、服务可用性和分区容错性这三个需求,最多只能同时满足其中的两个。本文深入探讨了CAP理论对分布式系统设计的影响,以及对可用性、一致性和分区容错性的重新思考与理解。文章指出CAP理论的提出解决了分布式系统中数据一致性和可用性之间的争论,推动了BASE理论的接受和NoSQL系统的发展。同时,通过具体实践案例和对Google的Spanner系统的分析,阐述了对CAP理论的重新思考,强调了在网络出现分区的情况下,推迟CAP选择以提高系统的可用性和数据一致性。总的来说,CAP理论给我们定义了系统的设计边界,但我们可以无限逼近边界,并将其作为设计系统的目标。文章内容深入浅出,为读者提供了对分布式系统设计的重要思考和启示。
《深入浅出分布式技术原理》,新⼈⾸单¥59
全部留言(19)
- 最新
- 精选
- blentlecap从每一个定义来说并不是说牺牲了第三者吧,而是尽量保证第三者
作者回复: 是的,只是经常说成 3 选 2,让大家的感觉是要放弃 1 个
2022-01-2725 - 努力努力再努力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-2612 - GAC·DU分布式场景下,站在用户角度思考CAP理论,用户发送一条请求,在正确的时间响应正确的结果,可以被视为同时满足三者的系统设计。站在系统设计者的角度思考CAP理论,同时满足两者而第三者则是努力的方向,先让系统能够用起来,然后迭代优化。这也满足现在常说的“小步子快跑”的说法。
作者回复: 非常棒!
2022-01-2711 - leitiannetRedis有主从架构,哨兵架构和集群架构,分别属于什么模型(AP还是CP)?
作者回复: 主从架构,哨兵架构和集群架构是高可用和水平扩展的方案,它们都可以做成 AP 或 CP 的模型。 不过一般对于 redis 缓存的场景来说,可用性是高于一致性,所以,redis的主从架构,哨兵架构和集群架构都是 AP 模型。
2022-03-078 - 独一无二文中有一句很有概括性的句子:"在满足分区容错的前提下,没有算法能同时满足数据一致性和服务可用性,只能在数据一致性和服务可用性之间二选一"。也就是未发生p,则ca都可以满足,发生p后,才会选择一个。并不是软件设计之初就必需要舍弃一个。
作者回复: 是的👍
2022-03-185 - 不吃辣👾老师,我发现人工可以弥补CAP中的任何一项,达到接近100%水平。😅
作者回复: 哈哈,问题发生后,人工可以修复,但是不能保证不发生。
2022-04-0622 - Hello,TomrrowCAP理论只是给我们提供了分布式系统设计的边界,这是好事,避免追求一些极致的尝试。系统设计不像是盖房子,主体结构确定后就不能改变了。系统设计要有灵活性,在不同的业务场景下,微调系统,以便更好的服务业务。
作者回复: 赞👍
2022-04-012 - Summer 空城作者您好,关于p,我听到最多的是数据在不同集群中复制。如果一个集群的话,是不是不存在p的问题,即使一个集群中有很多的服务而且这些服务可能会宕机
作者回复: 不是的,只要是分布式系统,就存在 P 的问题,只不过对运行在多个数据中心的分布式系统,由于数据中心的网络出现问题的概率更大。
2022-03-032 - 葡萄糖sugar作者你好,cp 我能理解为系统在达到强一致性以及网络分区容忍性,与此同时我们还能够尽力达到可用性,并且依旧保持强一致性吗?
作者回复: 以 CAP 的定义来说,A 是指 100% 的可用性,所以分布式系统中,CA 不可以兼得,不过可用性的范围在0%-100%之间,99.9% 或者更高的可用性都有可能实现的,比如专栏中提到的 spanner。
2022-01-2732 - 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-1341