CAP理论
是分布式系统、特别是分布式存储领域中被广泛探讨的理论。它被称作CAP原则,又有人称之为CAP定理,具体指的是:
在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一个分布式系统可以有如下的评价指标:
- 数据一致性 (Consistency):一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败,那么所有读操作都不能读到这个数据。所有节点访问同一份最新的数据。
- 服务可用性 (Availability):对数据更新具备高可用性,请求能够及时处理,不会一直等待,即使出现节点失效。
- 分区容错性 (Partition tolerance):能容忍网络分区,在网络断开的情况下,被分隔的节点仍能正常对外提供服务。
理解CAP理论
可以先参见:《分布式一致性算法的一个典型应用场景》
最简单的方式是想象两个副本处于分区两侧,即两个副本之间的网络断开,不能通信。1)如果允许其中一个副本更新,则会导致数据不一致,即丧失了C性质。2)如果为了保证一致性,将分区某一侧的副本设置为不可用,那么又丧失了A性质。3)除非两个副本可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。
注意CAP误区
首先,CAP理论不是一个“三选二”的公式。一般来说使用网络通信的分布式系统,无法舍弃P性质,那么就只能在一致性和可用性上做一个艰难的选择。
再者,CAP理论也不是“二选一”的选择题,它提示分布式系统设计者应该根据实际需求在一致性和可用性上做一个平衡。
这么说的原因,是这三种性质都是可以在程度上衡量的,并不是非黑即白的有或无。1)可用性显然是在0%到100%之间连续变化的;2)一致性分很多级别;3)分区也可以细分为不同含义,如系统内的不同部分对于是否存在分区可以有不一样的认知。
所以一致性和可用性并不是水火不容,非此即彼的。Paxos、Raft等分布式一致性算法就是在一致性和可用性之间做到了很好平衡的见证。