2000年,Eric Brewer在ACM PODC分布式计算原理专题讨论会上首次提出CAP原则。后来,麻省理工学院的两位科学家(赛斯·吉尔伯特和南希·林奇)证明了CAP原则的正确性。目前,CAP原则被大型公司广泛采纳,例如Amazon公司。
CAP原则又称CAP定理,它包括一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三大要素,三大要素的介绍具体如下;
·一致性:系统在执行过某项操作后,仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有一致性。
·可用性:每一个操作总是能够在一定的时间内返回结果,这里需要注意的是“一定时间内”和“返回结果”,也就是说系统的结果必须在给定的时间内返回,若超时,则被认为是不可用的。
·分区容错性:系统存在网络分区的情况下,仍然可以接受请求(即满足一致性和可用性)。网络分区指的是由于某种原因网络被分成若干个孤立的区域,而区域之间互不相通。分区容错性可理解为系统对结点动态加人和离开的处理能力,因为结点的加入和离开可认为是集群内部的网络分区。
CAP原则中,一个分布式系统中最多可同时实现上述的两个要素,不可同时实现三个要素,具体如图所示。
从图中可以看出,CAP原则最多可以同时实现两个要素,即AP、CP或AC,不存在同时实现三个要素的情形,即CAP。若是分布式系统中的数据无副本的话,系统必然会满足一致性(因为只有单独的数据,不会出现数据不一致的情况);若是分布式系统中出现了网络分区状况或者宕机,则必然会导致某些数据不可以访问,此时就不能满足可用性要素,即在此情况下获得了CP系统,但是CAP是不可同时满足的。
接下来,我们通过一张表来描述CAP原则的取舍策略与应用场景,具体如表所示。
选择CA策略,意味着放弃P,也就是说,保证了系统的一致性和可用性,却违背了分布式系统的分区容错性;选择CP策略,意味着放弃A,也就是说,保证了系统的一致性和分区容错性,但用户的体验较差,即当系统宕机时,需要等待所有结点的数据一致时,用户才可访问系统;选择AP策略,意味着放弃C.也就是说,保证了系统的可用性和分区容错性,但是结点之间的数据会出现不一致的现象。因此,我们可以根据自已的需求,选择对应的策略。