CAP 理论指出,任何分布式数据存储只能提供以下三个保证中的两个:
- Consistency 一致性:所有客户端同时看到相同的数据,无论它们连接到哪个节点。为此,每当数据写入一个节点时,必须立即将其转发或复制到系统中的所有其他节点,然后写入才会被视为成功。
- Availability 可用性:任何发出数据请求的客户端都会得到响应,即使一个或多个节点发生故障也是如此。另一种说法是,分布式系统中的所有工作节点都会对任何请求返回有效响应,无一例外。
- Partition tolerance 分区容错性:分区是分布式系统中的通信中断——两个节点之间的连接丢失或暂时延迟。分区容错意味着尽管系统中的节点之间出现任意数量的通信故障,集群也必须继续工作。
通常,我们无法保证分布式系统中网络一直是好的,因此「分区」必然会出现,这时,考虑一致性和可用性:
- 如果要保证一致性,因为分区的存在所有节点间新数据无法同步,因此新的请求需要失败,无法保证可用性
- 如果要保证可用性,此时不同分区处理请求后,数据无法在分区间同步,一致性无法保证
因此,通常会在保证 P 的情况下在 CP 和 AP 之间取舍。
参考: