C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。
A 代表 Availability,可用性,是指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。
P 代表 Partition Tolerance,分区容错性,是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。
网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络中,各个子网络内网络正常。
CAP 理论指的就是,在分布式系统中 C、A、P 这三个特征不能同时满足,只能满足其中两个。
实际场景中,网络环境不可能百分之百不出故障,比如网络拥塞、网卡故障等,会导致网络故障或不通,从而导致节点之间无法通信,或者集群中节点被划分为多个分区,分区中的节点之间可通信,分区间不可通信。这种由网络故障导致的集群分区情况,通常被称为“网络分区”。
在分布式系统中,网络分区不可避免,因此分区容错性 P 必须满足。
对于涉及钱的交易时,数据的一致性至关重要,因此保 CP 弃 A 应该是最佳选择。
而对于其他场景,大多数情况下的做法是选择 AP 而牺牲 C,因为很多情况下不需要太强的一致性(数据始终保持一致),只要满足最终一致性即可。最终一致性指的是,不要求集群中节点数据每时每刻保持一致,在可接受的时间内最终能达到一致就可以了。
保证 CP 的系统:有 Redis、HBase、ZooKeeper 等。
适合保证 AP 放弃 C 的场景。比如,很多查询网站、电商系统中的商品查询等,用户体验非常重要,所以大多会保证系统的可用性,而牺牲一定的数据一致性。
采用保 AP 弃 C 的系统:比如 CoachDB、Eureka、Cassandra等。