深入理解Apache Dubbo与实战-第3章《Dubbo注册中心》总结

1、注册中心概述

  • 主要作用:动态加入、动态发现、动态调整、统一配置;
  • 工作流程:

1)服务提供者启动时,会向注册中心写入自己的元数据信息,同时会订阅配置元数据信息;

2)消费者启动时,也会向注册中心写入自己的元数据信息,并订阅服务提供者、路由和配置元数据信息;

3)服务治理中心启动时,会同时订阅所有消费者、服务提供者、路由和配置元数据信息;

4)当有服务提供者离开或有新的服务提供者加入时,注册中心服务提供者目录会发生变化,变化信息会动态通知给消费者、服务治理中心;

5)当消费方发起服务调用时,会异步将调用、统计信息等上报给监控中心。

  • ZooKeeper原理概述:Dubbo使用ZooKeeper作为注册中心时,只会创建持久节点和临时节点两种,对创建的顺序并没有要求。在服务分类节点下是具体的Dubbo服务URL,树的根节点是注册中心分组,下面有多个服务接口,服务接口下包含4类子目录,分别是provides、consumers、routers、configuators,这个路径是持久节点。

2、订阅/发布

  • ZooKeeper的实现

1)发布的实现:调用了ZooKeeper的客户端库在注册中心上创建一个目录;

2)订阅的实现:订阅通常有pull和push两种方式,目前Dubbo采用的是第一次启动拉取方式,后续接收事件重新拉取数据。在服务暴露时,服务端会订阅configurators用于监听动态配置,在消费端启动时,消费端会订阅providers、routers和configurators这三个目录;

ZooKeeper注册中心采用的是“事件通知”+“客户端拉取”的方式,客户端在第一次连接上注册中心时,会获取对应目录下全量的数据。并在订阅的节点上注册一个watcher,客户端与注册中心之间保持TCP长连接,后续每个节点有任何数据变化的时候,注册中心会根据watcher的回调主动通知客户端,客户端接到通知后,会把对应节点下的全量数据都拉取过来。此外,服务治理中心除了订阅当前节点,还会订阅这个节点下的所有子节点。

ZooKeeper的每个节点都有一个版本号,当某个节点的数据发生变化(即事务操作)时,该节点对应的版本号就会发生变化,并触发watcher事件,推送数据给订阅方。

3、缓存机制

  • 消费者或服务治理中心获取注册信息后会做本地缓存。内存中会有一份,保存在Properties对象里,磁盘上也会持久化一份文件,通过file对象引用。
  • 缓存的加载:在服务初始化的时候,AbstractRegistry构造函数里会从本地磁盘文件中把持久化的注册数据读到Properties对象里,并加载到内存缓存中。Properties保存了所有服务提供者的URL,使用URL#serviceKey()作为key,提供者列表、路由规则列表、配置规则列表等作为value。
  • 缓存的保存与更新:缓存的保存有同步和异步两种方式。异步会使用线程池异步保存,如果线程在执行过程中出现异常,则会再次调用线程池不断重试。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值