CAP Theorem

CAP 是个著名的分布式定理,它说明了在分布式环境中,当网络存在故障导致节点间互相不能通信时, 即存在网络Partition时,系统的一致性和可用性不能两全。需要注意的是,有些人将此特性表达为三个 特性只有两个能同时满足,虽然形式上正确但是没有抓住该定理看问题的角度,因为P (Partition) 不是一个系统的特性,而是一种分布式系统中可能发生的异常状态。当无网络故障时,高可用和高一致性 都可满足。

那么当网络故障出现时,系统应该选择高可用性还是高一致性呢?这要根据系统的业务特点来权衡。 当准确度比可用性更重要时,选择保证高一致性。当可用性比准确度更重要时,选择保证高可用性。很多 互联网社交服务选择保证高可用性,比如评论的数量、评论条目等,当网络存在问题时,提供旧的数据而 不是提示系统故障。这类系统的特性可概括为BASE, Basically Availability, Soft State and Eventually Consistency.

基于CAP还发展出了另外一个权衡定律PACELC,那就是网络异步复制的延迟 (Latency) 和一致性间的 权衡。该定理认为,网络完全不可用的partition状况是极少数状况,而网络延迟则是更常见的情况。 那么在存在网络延迟的情况下权衡是否需要一致性。一般强调高可用的系统,在高一致性和允许延迟上 选择延迟,即异步复制,会有延迟;而强调高一致性的系统,在高一致性和允许延迟上会选择同步复制 机制。