什么是 CAP
CAP 定理最初是由加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想,也因此被叫做布鲁尔定理。后来在 2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了 CAP 定理的证明,让它成为分布式系统领域公认的一个定理。
CAP 定理指出了,在一个跨区域网络连接,共享数据的分布式系统中,一致性(Consistency),可用性(Availability)和分区容错性(Partition Tolerance) 这三个约束属性最终只能同时满足二个。
下面是关于这三个属性的简单描述:
- 一致性:客户端进行读操作得到的数据永远是最近一次写入的数据,要求了对数据读写的强一致性。
- 可用性:客户端的请求在限定时间内总能从非故障的系统节点得到正常的响应,其中不能有超时,不能出错如 502之类。
- 分区容错性:就是出现网络分区现象,即节点间无法正常通信,数据同步出现延时等情况时,系统仍能继续提供服务。
需要注意的是,CAP 描述了一个常规的分布式系统场景:有网络连接,且数据跨节点进行共享。如果在整个系统中,数据只有一份,并且其他节点没有对应的副本,也不需要进行跨节点的数据共享,这样分布式系统就不是 CAP 关心的对象了,也谈不上结合 CAP 定理去设计和实施。
深入认识 CAP
了解 CAP 基本概念之后,我们再来分别对 C,A,P 三个属性进一步学习下,加深对 CAP 的理解。
C:一致性
这里的一致性从不同角度有着各自的描述方式,在分布式系统中表现是每个节点的数据是相同;而对于客户端,表现是读操作所得到的结果永远是最新写入的。其中需要明确的是,对于分布式系统节点来说