JAVA面试题分享一百四十七:Dubbo 是如何动志感知服务下线的?

一、Zookeeper感知

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

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

二、订阅基本原理

服务订阅通常有 pull 和 push 两种方式。pull 模式需要客户端定时向注册中心拉取配置,而 push 模式采用注册中心主动推送数据给客户端。

dubbo zk 注册中心采用是事件通知与客户端拉取方式。服务第一次订阅的时候将会拉取对应目录下全量数据,然后在订阅的节点注册一个 watcher。一旦目录节点下发生任何数据变化,zk 将会通过 watcher 通知客户端。客户端接到通知,将会重新拉取该目录下全量数据,并重新注册 watcher。利用这个模式,dubbo 服务就可以就做到服务的动态发现。

三、心跳检测-Watch机制

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

当Dubbo服务提供方出现故障导致Zookeeper剔除了这个服务的地址,

那么Dubbo服务消费端需要感知到地址的变化,从而避免后续的请求发送到故障节点,导致请求失败。

也就是说Dubbo要提供服务下线的动态感知能力。

这个能力是通过Zookeeper里面提供的Watch机制来实现的

 

简单来说呢,Dubbo服务消费端会使用Zookeeper里面的Watch来针对Zookeeper Server端的/providers节点注册监听,

一旦这个节点下的子节点发生变化,Zookeeper Server就会发送一个事件通知Dubbo Client端.

Dubbo Client端收到事件以后,就会把本地缓存的这个服务地址删除,这样后续就不会把请求发送到失败的节点上,完成服务下线感知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值