## 一、CAP ### 1.概念 **CAP定理(CAP theorem)**又被称作`布鲁尔定理(Brewer's theorem)`,是回加州大学伯克得分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在2000年的ACM PODC上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理**。 | ITEM | CONTENT | DESC | | ---- | ---------- | ---------------------------------------------------------------- | | C | 一致性 | 对某个指定的客户端来说,读操作保证能够返回最新的写操作结果 | | A | 可用性 | 非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应) | | P | 分区容错性 | 当出现网络分区后,系统能够继续履行职责 | **在一个分布式系统(指互相连接并共享数据节点的集合)中,当涉及读写操作时,只能保证`一致性(Consistence)`、`可用性(Availability)`、`分区容错性(Partition Tolerance)`三者中的两个,另外一个必须被牺牲。 #### 1.1 CP 如图1-1所示,为了保证一致性,当发生分区现象后,N1节点上的数据已经更新到y,但由于N1和N2之间的复制通道中断,数据y无法同步到N2,N2节点上的数据还是x。 这时客户端C访问N2时,N2需要返回Error,提示客户端面C:“系统现在发生错误”,这种处理方式违背了可用性(Availability)的要求,因此CAP三者只能满足CP。 ![[Pasted image 20231022162827.png]] #### 1.2 AP 如图1-2所示,为了保证可用性,当发生分区现象后,N1节点上的数据已经更新到y,但由于N1和N2之间的复制通道中断,数据y无法同步到N2,N2节点上的数据还是x。 这时客户C访问N2时,N2将当前自己拥有的数据x返回给客户端C了,而实际上当前最新的数据已经是y了,这就不满足一致性(Consistency)的要求了,因此CAP三者只能满足AP。 `注意:`这里N2节点返回的x,虽然不是一个“正确”的结果,但是一个“合理”的结果,因为x是旧的数据,并不是一个错乱的值,只是不是最新的数据而已。 ![[Pasted image 20231022163757.png]] ### 2.在HDFS和Kafka中CAP的体现 ## 二、BASE ## 三、ACID