CAP 模型
CAP 模型是说,在一个分布式系统里面,不可能同时满足三个点
- 一致性(Consistency),访问分布式系统中的每一个节点都能获得最新的数据。
- 可用性(Availability),每次请求都能获得一个有效的访问,但不保证数据是最新的。
- 分区容错性(Partition tolerance),分区相当于对通信耗时的要求,系统如果不能在时限范围内达成数据一致,就意味着发生了分区的情况。
在 CAP 模型中只能满足 CP 或者 AP,之所以不能满足 CA,因为网络通信的不确定性可能会导致分区容错,也就是分区容错性必然是存在的,因此我们只能在一致性和可用性之间做选择。
注册中心
再回到注册中心(如图),服务注册中心的本质是为了提供服务地址的统一管理,以及提供一个服务动态感知的能力。所以,注册中心应该要保证高可用性,也就是无论什么情况下,应用都能正常从注册中心获取到目标服务的通信地址。当注册中心不可用的时候,不能影响服务之间的正常通信。因此,从这个角度来说,注册中心应该是 AP 模型。
另外,对于服务动态感知这个场景来说,从服务地址失效到最终客户端感知到变化,必然会存在延迟。也就是意味着客户端无法实时感知到出现故障的服务端节点。既然一定会出现数据不一致的问题,就更加没必要去搭建一个 CP 模型的注册中心集群了。否则反而会降低请求的性能。
总结
注册中心应该是 AP 模型,原因有两个
- 注册中心只是一个地址维护的平台,它如果出现故障,也不能影响服务之间的正常通信。
- 注册中心的地址感知,本身就存在延迟,所以设计一个 CP 模型的架构意义并不大。