CAP定理告诉我们:一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本要求,最多只能同时满足其中的两项。
一致性
在分布式的环境中,一致性是指数据在多个副本之间是否能够保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
对于一个将数据副本分布在不同分布式节点上的系统来说,如果对第一个结点的数据进行了更新操作并且更新成功后,却没有是的第二个节点上的数据得到相应的更新,于是在堆第二个节点的数据进行读取操作时,获取的仍然是老数据。这就是典型的分布式数据不一致情况。在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都可以读到其中最新的值,那这样的系统就被认为具有强一致性(或者严格的一致性)。
可用性
可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求,总是能够在有限的时间内返回结果。
有限的时间内是指对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的。另外,有限的时间内是一个在系统设计之初就设定好的系统运行指标,通常不同的系统会有很大的不同。
返回结果是可用性的另一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果,正常的响应结果通常能够明确地反映出对请求的处理结果,即成功或者失败,而不是一个让用户赶到困惑的返回结果。
分区容错性
分区容错性约束了一个分布式系统需要具有如下特征:分布式系统在遇到任何网络分区故障时候,仍然需要能够保证对外提供满足一致性和可用性的全部服务,除非是整个网络环境都发生了故障。
网络分区是指在分布式系统中,不同的结点分布在不同的子网络,由于一些特殊的原因这些子网络导致这些子网络之间出现网络不连通的状况,蛋哥哥子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域。需要注意的是,组成一个分布式系统的每个节点的接入与退出都可以看作是一个特殊的网络分区。
key words:分区容错性通常是分布式系统的一个基本要求,人们往往在可用性和一致性之间寻找平衡。