【Java面试】顶级理解!Dubbo注册中心挂了, 服务还可以继续通信吗?

2022-09-22 11:32:57 浏览数 (8)

什么情况?一位工作了 5 年的 Java 程序员,竟然回答不出这个问题?说“Dubbo注册中心挂了, 服务之间还可以继续通信吗”?今天,我话2分钟时间给大家来聊一聊。

另外,我花了很长时间,准备了一份500页的PDF面试资料文档和一份10W字的Java总结面试题和答案,

1、服务感知原理

那Dubbo 是如何动态感知服务下线的?

首先,Dubbo 默认采用 Zookeeper 实现服务的注册与服务发现,简单来说,是多个 Dubbo 服务之间的通信地址,是使用 Zookeeper 来维护的。

而在 Zookeeper 上,会采用树形结构的方式来维护 Dubbo 服务提供端的协议地址,Dubbo 服务消费端会从 Zookeeper Server 上去查找目标服务的地址列表,从而完成服务的注册和消费功能。

ENTER TITLE

那Zookeeper呢,就会通过心跳检测机制,来判断 Dubbo 服务提供端的运行状态,来决定是否应该把这个服务从地址列表剔除。

ENTER TITLE

当 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 底层的工作原理非常有必要,它能帮助开发者提高开发问题的解决效率。

最后,我把之前分享的资料全部整理成了文字,希望能够以此来提高各位粉丝的通过率。

我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

0 人点赞