Consistency (一致性)
简单的说就是在分布式环境中,用于存储相同数据的多个节点中所保存的数据是否完全相同,如果完全相同就是一致,否则就是不一致。

Availability(可用性)
指系统提供的服务必须一直处于可用的状态,每次请求都能得到非错的响应,但不保证获得的数据是最新数据。

Partition tolerance(分区容错性)
分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

为了解释CAP同时只能满足其中两个条件,我们看这样一个场景,假设有五个节点: n1-n5, 出现网络分区时被分成两组:[n1-n2]和[n3-n5],当n1处理客户端请求时:

  • 如果要保证C(一致性),那么它需要把消息复制到所有节点,但是网络分区导致无法成功复制到n3-n5,所以它只能返回"处理失败"的结果给客户端,这时系统就处于不可用状态,即丧失了A。

  • 如果要保证A(可用性),那么n1就只能把消息复制到n2,而不用复制到n3-n5,这样n1-n2、n3-n5的状态就不一致了,于是就丧失了C。

  • 如果不支持P(也就是不容忍网络分区), A和C同时满足,这就意味着系统不会出现网络分区,当然在分布式环境下这是不可能的。

04-25 21:15