在互联网去面试的时候,一定会考察求职者分布式架构领域相关的知识。
而注册中心是微服务架构里面最重要的核心组件,所以面试频率会比较高。
其中“服务注册中心应该是AP还是CP这个问题,就是最近一个工作了5年的粉丝遇到的一个问题。
大家好,我是Mic,咕泡科技联合创始人。
下面我们来分析一下面试官对于这个问题的考察意图。
考察目的
这个问题考察的难度中等偏上,主要考察工作5年以上的同学。
考察目的有两个:
-
应聘的公司肯定是需要用到微服务架构,所以要了解求职者是否用过注册中心
-
了解求职者是否深入理解注册中心,能够回答这个问题,至少说明对于注册中心的工作原理和价值是有清晰认知的
所以,对于这个问题,有两个回答的建议
-
要有自己的总结和理解
-
表达逻辑要足够清晰,不能想到哪说到哪。
问题分析
首先,要先了解CAP模型。
CAP模型是说,在一个分布式系统里面,不可能同时满足三个点
-
一致性(Consistency),访问分布式系统中的每一个节点都能获得最新的数据。
-
可用性(Availability),每次请求都能获得一个有效的访问,但不保证数据是最新的。
-
分区容错性(Partition tolerance),分区相当于对通信耗时的要求,系统如果不能在时限范围内达成数据一致,
就意味着发生了分区的情况。
在CAP模型中只能满足CP或者AP,之所以不能满足CA,因为网络通信的不确定性可能会导致分区容错,也就是分区容错性必然是存在的,因此我们只能在一致性和可用性之间做选择。
再回到注册中心,服务注册中心的本质是为了提供服务地址的统一管理,以及提供一个服务动态感知的能力。
所以,注册中心应该要保证高可用性,也就是无论什么情况下,应用都能正常从注册中心获取到目标服务的通信地址。
当注册中心不可用的时候,不能影响服务之间的正常通信。
因此,从这个角度来说,注册中心应该是AP模型。
另外,对于服务动态感知这个场景来说,从服务地址失效到最终客户端感知到变化,必然会存在延迟。
也就是意味着客户端无法实时感知到出现故障的服务端节点。
既然一定会出现数据不一致的问题,就更加没必要去搭建一个CP模型的注册中心集群了。
否则反而会降低请求的性能。
高手:
我认为注册中心应该是AP模型,原因有两个
-
注册中心只是一个地址维护的平台,它如果出现故障,也不能影响服务之间的正常通信。
-
注册中心的地址感知,本身就存在延迟,所以设计一个CP模型的架构意义并不大。
总结
大家知道怎么回答了吗?
如果你喜欢我的作品,记得点赞收藏加关注哦!!!
另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新200期,总计超过20W字!