什么情况?一位工作了 5 年的 Java 程序员,竟然回答不出这个问题?说“Dubbo注册中心挂了, 服务之间还可以继续通信吗”?今天,我话2分钟时间给大家来聊一聊。
另外,我把往期分享的视频全部整理成一份500页的PDF面试题解析配套文档,希望能够以此来提高各位粉丝的通过率,
如何获取? :
扫描文章底部名片领取!
要回答这个问题,我们得先了解Dubbo的服务感知原理。
1、服务感知原理
那Dubbo 是如何动态感知服务下线的?
首先,Dubbo 默认采用 Zookeeper 实现服务的注册与服务发现,简单来说,是多个 Dubbo 服务之间的通信地址,是使用 Zookeeper 来维护的。
而在 Zookeeper 上,会采用树形结构的方式来维护 Dubbo 服务提供端的协议地址,Dubbo 服务消费端会从 Zookeeper Server 上去查找目标服务的地址列表,从而完成服务的注册和消费功能。
那Zookeeper呢,就会通过心跳检测机制,来判断 Dubbo 服务提供端的运行状态,来决定是否应该把这个服务从地址列表剔除。
当 Dubbo 服务提供方出现故障导致 Zookeeper 剔除了这个服务的地址,那么 Dubbo 服务消费端需要感知到地址的变化,从而避免后续的请求发送到故障节点,导致请求失败。
也就是说 Dubbo 要提供服务下线的动态感知能力。这个能力是通过 Zookeeper 里面提供的 Watch 机制来实现的。
简单理解呢,就是Dubbo 服务消费端会使用 Zookeeper 里面的 Watch 来针对Zookeeper Server 端的/providers 节点注册监听,一旦这个节点下的子节点发生变化,Zookeeper Server 就会发送一个事件通知Dubbo Client 端,Dubbo Client 端收到事件以后,就会把本地缓存的这个服务地址删除,这样后续,就不会把请求发送到失败的节点上,完成服务下线感知。
2、答案分析
了解Dubbo服务感知原理以后,我就应该知道,Dubbo的注册中心挂了以后,服务之间还是可以继续通信的。主要是因为Dubbo初始化的时候,消费者会将服务提供者的地址等信息缓存到本地。
以上就是我对这个问题的理解!
以上就是我对这个问题的理解。
Dubbo 是目前非常主流的开源 RPC 框架,在很多的企业都有使用。理解 RPC 底层的工作原理非常有必要,它能帮助开发者提高开发问题的解决效率。
最后,我把往期分享的面试题全部整理成了1份10W字的文档,希望能够以此来提高各位粉丝的通过率