分布式系统现在变得越来越重要,CAP 定理描述了分布式系统的固有特性,能帮助我们更好地理解分布式系统
文章翻译自stackoverflow高赞回答,有能力的同学建议看看原文Consistency
一致性
Availability
可用性
Partition tolerance
分区容忍
为了能同时达到可用性和分区容忍,你必须放弃一致性。假设你的集群中有两个结点 X 和 Y,现在他们之间网络通信中断了,因此他们不再能够同步数据,这时你可以作出如下选择:
- 允许结点之间不同步 (保可用性,放弃一致性),或者
- 认为集群不可用 (保一致性,放弃可用性)
CAP不能同时成立,所以会出现以下三种组合
-
Consistency & Availability
:只要所有结点都在线,那么结点中的数据都是一致的。你可以向任意结点读写数据,并确信他们的数据都是相同的。但只要分区出现,数据将不再同步 (P不成立,即不能容忍分区出现) -
Consistency & Partition tolerance
:要求所有结点的数据都是一致的。容忍分区出现,但当有部分结点 down 掉后 (分区出现时集群会认为是部分结点down掉),为了避免数据不同步,集群会变成不可用 -
Availability & Partition tolerance
:所有结点保持在线,即使他们之间存在分区不能相互通信,当分区问题解决后再重新同步数据。所以你不能保证所有结点的数据都是一致的 (在分区出现期间或之后)
你可以认为 CA 系统实际上不存在,因为分区问题总是会出现在分布式系统中