分布式中CAP是什么意思?

115 阅读3分钟

简介

    在分布式系统中,我们会了解到关于CAP原理这个词汇,那它是什么意思呢?其实CAP分别是三个单词的首字母。

  • C - Consistent,一致性。操作成功之后,在同一时间下所有节点的数据是完全一致的,意思是说数据一致性。
  • A - Availability,可用性。指服务可用,在规定时间内完成响应,即保证每个请求不管成功或者失败都有响应。
  • P - Partition Tolerance,分区容错性。指分布式系统在遇到某个节点或网络分区故障的时候,仍然能够对外提供服务。

为什么不能同时满足3个要求呢?

    我们之所以使用分布式系统,就是为了在某个节点不可用的情况下,整个服务对外还是可用的,这正是满足P(分区容错性)。如果我们的服务不满足P(分区容错性),那么我们的系统也就不是分布式系统了,所以,在分布式系统中,P(分布容错性)总是成立的。看下面的图例。

    A和B是两个数据节点,A向B同步数据,并且作为一个整体对外提供服务。由于我们的系统保证了P(分区容错性),那么A和B的同步,我们允许出现故障。接下来我们再保证A(可用性),也就是说A和B同步出现问题时,客户端还能够访问我们的系统,那么客户端既可能访问A也可能访问B,这时,A和B的数据是不一致的,所以C(一致性)不能满足。
    如果我们满足C(一致性),也就是说客户端无论访问A还是访问B,得到的结果都是一样的,那么现在A和B的数据不一致,需要等到A和B的数据一致以后,也就是同步恢复以后,才可对外提供服务。这样我们虽然满足了C(一致性),却不能满足A(可用性)。
    所以,我们的系统在满足P(分区容错性)的同时,只能在A(可用性)和C(一致性)当中选择一个不能CAP同时满足。我们的分布式系统只能是AP或者CP。

CAP中3选2的组合

  • CA - 单点集群,满足一致性,可用性的系统,但通常在可拓展性上不太强大。
  • CP - 满足一致性,分区容错性的系统,但通常性能不是特别高。
  • AP - 满足可用性,分区容错性的系统,但通常可能对一致性要求低一些。     要满足系统定义为分布式系统,只能从CP和AP之中选择一个。
  • 满足CP原则有:Zookeeper、Consul、Nacos(持久实例)。
  • 满足AP原则有:Eureka、Redis、Nacos(临时实例)。