Dubbo用zookeeper做为注册中心的注册机制

前言

上次小编为大家介绍了 Dubbo 服务化最佳实践以及用redis作为注册中心的原理讲解。不过没有说完,今天接着为大家带来Dubbo以Zookeeper为注册中心的注册机制和原理。小编后续会写一篇Dubbo注册中心相关的源码阅读文章,希望给大家带来帮助。好了进入今天的主题。

Zookeeper注册中心

Zookeper是⼀个树型的⽬录服务,本身⽀持服务的变更推送。

存储结构

zookeeper 存储结构是采⽤树级⽬录形式,其层级分别是 dubbo\接⼝名\提供者、消费者\URL. 都是以节点名称的形式存储。其中的URL作为临时节点 存在,当应⽤与Zookepper会话断开后, 其会被⾃动删除。
在这里插入图片描述
上面图其实是没画全的,因为其还有config,这个暂且不表。
接下来我们通过zookeeper可视化界面验证器存储结构,这边小编启动了两个服务端和一个消费端。
在这里插入图片描述
上面的像文件夹一样的就是永久节点,而像文件的就是临时节点,前面的描述不是很准确(因为当服务关闭的时候,永久节点也会变成文件一样的图标)。其实可以点击Node Metadata查看他的信息,里面有Ephemeral Id可判断这个是否连接当前会话判断,如下图
在这里插入图片描述
在这里插入图片描述
注意:如果是程序突然宕机,zookeeper其会话不会马上关闭,默认会保留40秒超时等待。期间临时节点不会删除 。

节点监听

当服务向注册中心发布更新自己的服务时,客户端是怎么及时获取到他的信息的。这就是接下来要讲到节点监听。这边可以监听父节点下面子节点的数量,子节点的状态,数据等等。

#打开一个客户端
./bin/zkCli.sh
#创建一个非临时节点
create /names 1
#监听子节点的变化
ls /names watch
#打开一个新客户端
#在新客户端中创建节点,监听事件将会被触发
create -e /names/bob 1

上面每次watch后又得重新watch才可以哦。所以dubbo每次都得重新订阅才可以,接下来咱们看一下dubbo订阅和发布流程。

订阅与发布流程

上面讲到dubbo 利用zookeeper的监听机制,去监听 /dubbo/{接口名}/providers 的子节点信息,从而达到订阅发布的目的。
其流程如下:

  1. 消费端
    a. 启动:注册消费者信息(创建临时节点)
    b. 启动:订阅提供者信息(添加providers⼦节点监听事件)
    c. 触发订阅:更新提供者列表,重新订阅
    d. 停止:注销消费者信息(删除临时节点),取消订阅
  2. 提供端
    a. 启动:注册提供者信息(创建临时节点)
    b. 停止:注销提供者信息(删除临时节点)

相关源码
org.apache.dubbo.registry.zookeeper.ZookeeperRegistry#doRegister// 注册 org.apache.dubbo.registry.zookeeper.ZookeeperRegistry#doUnregister// 注销 org.apache.dubbo.registry.zookeeper.ZookeeperRegistry#doSubscribe// 订阅 org.apache.dubbo.registry.zookeeper.ZookeeperRegistry#doUnregister // 取消订阅
注:doRegister注册包括消费者和提供者的信息。

有兴趣的小伙伴可以看一下源码这个源码比以redis作为注册中心的源码简单太多了。小编后续为大家奉上关键源码详解。

与redis对比优点

大家可能只知道dubbo的注册中心用zookeeper比较好,但不知道好在哪些地方,这边小编总结了以下几点,希望给大家做个参考。

  • redis作为注册中心时需要自己做发布和定义,而zookeeper自带了发布订阅功能,只需监听即可,且更稳定。
  • redis每隔30秒需要心跳保活机制,而zookeeper却不需要。
  • 当机子宕机时,redis会产生脏数据,虽然最终会通过redis的过期淘汰机制,但有脏数据可能会存在较长时间,而zookeeper则会自动清除。
  • redis需要启动一个线程来监听服务并且更新接口列表,并且是个阻塞线程,当生产环境有大量服务和客户端时,监听线程非常多,且更新耗时耗力,不适合做注册中心。而zookeeper是非阻塞的且监听迅速。

所以zookeeper更适合做dubbo的注册中心。

总结

好了今天就聊到这儿了,小编下期为大家带来dubbo集群机制详解(负载均衡与容错机制)。最后希望大家喜欢小编,记得三连。小编会继续进步努力的!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木兮君

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

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

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

打赏作者

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

抵扣说明:

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

余额充值