22 | 想成为架构师,你必须知道CAP理论
该思维导图由 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-20370 - luop第二版解释从 non-failing node 的角度去看待「可用性」,个人存疑。 如果一个集群有 2 个 node,某个时刻 2 个 node 都 fail 了,那么此时该集群的「可用性」该如何定义? 个人觉得:「一致性」和「可用性」都应该站在 client 侧去审视;而「分区容忍性」则是集群 node 侧在遇到网络分区的问题时,选择如何去影响 client 侧感知到的「一致性」和「可用性」。
作者回复: 两个都挂整个集群肯定挂了,CAP关注的是分区时的可用性和一致性,不是说保证整个集群不挂,其实你最后的理解就是非常正确的👍👍
2018-08-22239 - 轩辕十四网络分区类似于脑裂。 个人对CAP的类比,不知是否合适: P要求数据有冗余, C要求数据同步,会花时间, A要求返回及时,不需要等。 不可能三角形说的是: 要备份要同步,就得等; 要备份不想等,就会不同步; 要同步还不想等,就别备份
作者回复: P要求分布式和数据同步,C要求数据完全一致,A要求返回及时
2018-07-0626 - Yole应该再补充哪些系统上ca,哪些是cp,哪些是ap,他们为什么这么设计,都有什么好处。
作者回复: 你可以自己尝试去分析一下,有疑问评论即可
2018-06-1622 - tim请问一下作者,在CP的选型中。 假如是查询一条并不存在的数据,文中还说得通。 但如果出现更新数据不及时,由于n1和n2 出现分区错误,那么n2如何知道自己不是最新的数据并返回error呢?? 假如就是简单的mysql主从, 从库并没有断连主库,只是数据在请求来是还没有更新到最新。 那么从库又从哪里得知这件事儿的呢??
作者回复: CAP理论是忽略延时的,这就是说理论做了一个假设,只要网络通数据就会一致,这也是实际应用CAP时容易踩的坑,后面一章会讲
2018-07-22220 - Geek_88604fpaxos的核心思想是少数服从多数,在节点数为2n+1的集群中,只要n+1节点上完成了写入就能保证接下来的读操作能够读到最新的值。从这一点来说它满足C(对某个指定的客户端来说,读操作保证能够返回最新的写操作结果);一个实现了paxos协议的集群最多可以容忍n个节点故障(n个节点同时故障的概率是比较小的),非故障节点组成的集群仍能正常提供服务,从这个角度来讲它满足A(非故障的节点在合理的时间内返回合理的响应,不是错误和超时的响应);paxos集群发生分区肯能存在两种情况,第一种情况是发生分区后没有发生重新选举,这种情况下集群仍能正常工作,因此满足P(当出现网络分区后,系统能够继续“履行职责”)。另一种情况是发生分区后原来的集群达不到多数派,集群不在对外提供服务,因此不满足P,当发生这种情况的时候,一般会快速修复。总的来说在某种意义上来看paxos满足CAP。
作者回复: 分析的很好
2019-09-08215 - aduan老师,你好,有个疑问,在cp架构中n1,n2通讯是中断的,n2根据设什么作为依据返回error?
作者回复: 一般都是心跳检测
2018-12-16214 - 发条橙子 。你好老师 ,这里讲的分区容错是指什么 ,是指发生分区现象时系统正常运行 。 但是分区现象具体指的是什么 可以详细讲一下么
作者回复: 分区就是集群中一部分节点和另外一部分无法通信
2019-01-2910 - Gaozy有个疑问,很多工程实现都是选择AP并保证最终一致性,但是选择了A不就意味着返回数据不是最新的吗,最终一致性是如何实现的
作者回复: 人工数据订正和补偿,定时脚本批量检查和修复等都可以
2019-02-1329 - zjZK出现分区,不能再履行职责了吧,因此ZK不满足P。老师这样理解对吗
作者回复: zk多数节点正常就可以正常运行,分区中的少数节点会进入leader选举状态,这个状态不能处理读写操作,因此不符合A,如果不考虑实时一致性,zk基本满足CP的要求
2018-06-199