CAP理论告诉我们,一个分布式系统不可能同时满足以下三种
一致性(C:Consistency)
可用性(A:Available)
分区容错性(P:Partition Tolerance)
这三个基本需求,最多只能同时满足其中的两项,因为P是必须的,因此往往选择就在CP或者AP中。
一致性(C:Consistency)
在分布式环境中,一致性是指数据在多个副本之间是否能够保持数据一致的特性。在一致性的需求下,
当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
例如一个将数据副本分布在不同分布式节点上的系统来说,
如果对第一个节点的数据进行了更新操作并且更新成功后,其他节点上的数据也应该得到更新,
并且所有用户都可以读取到其最新的值,那么这样的系统就被认为具有强一致性(或严格的一致性,
最终一致性)。
可用性(A:Available)
可用性是指系统提供的服务必须一直处于可用的状态,
对于用户的每一个操作请求总是能够在有限的时间内返回结果。“有效的时间内”是指,
对于用户的一个操作请求,系统必须能够在指定的时间(即响应时间)内返回对应的处理结果,
如果超过了这个时间范围,那么系统就被认为是不可用的。
“返回结果”是可用性的另一个非常重要的指标,它要求系统在完成对用户请求的处理后,
返回一个正常的响应结果。正常的响应结果通常能够明确的反映出对请求的处理结果,即成功或失败,
而不是一个让用户感到困惑的返回结果。
分区容错性(P:Partiti
on Tolerance)
分区容错性约束了一个分布式系统需要具有如下特性:分布式系统在遇到任何网络分区故障的时候,
仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。
网络分区是指在分布式系统中,不同的节点分布在不同的子网络(机房或异地网络等)中,
由于一些特殊的原因导致这些子网络之间出现网络不连通的状况,但各个子网络的内部网络是正常的,
从而导致整个系统的网络环境被切分成了若干个孤立的区域。需要注意的是,
组成一个分布式系统的每个节点的加入与退出都可以看作是一个特殊的网络分区。
由于一个分布式系统无法同时满足上面的三个需求,而只能满足其中的两项,
因此在进行对CAP定理的应用的时候,需要根据业务的要求抛弃其中的一项,
下表所示是抛弃CAP定理中任意一项特性的场景说明。
因此,将精力浪费在思考如何设计能满足三者的完美系统上是愚钝的,应该根据应用场景进行适当取舍



