Dubbo之旅--注册中心

在介绍Dubbo的内部逻辑的时候提到很多次注册中心的概念.实现注册中心的有很多,主要是以下四个注册中心分别是:

Multicast注册中心

Zookeeper注册中心

Redis注册中心

Simple注册中心

这里将对注册中心的一个实现Zookeeper跟大家分享,因为Zookeeper是应用比较多,也是我们项目中实际用到的注册中心.

ZooKeeper 是一个为分布式应用所设计的分布的、开源的协调服务。分布式的应用可以建立在同步、配置管理、分组和命名等服务的更高级别的实现的基础之上。 ZooKeeper
意欲设计一个易于编程的环境,它的文件系统使用我们所熟悉的目录树结构。 ZooKeeper
使用 Java
所编写,但是支持 Java
和 C
两种编程语言。

协调服务是非常容易出错的,
同时也很难恢复正常,例如,协调服务很容易处于竞态以至于出现死锁。 ZooKeeper
的目的是为了减轻分布式应用程序所承担的协调任务。

ZooKeeper命名空间

提供的命名空间与标准的文件系统非常相似。一个名称是由通过斜线分隔开的路径名序列所组成的。ZooKeeper中的每一个节点是都通过路径来识别。

下图是Zookeeper中节点的数据模型,这种树形结构的命名空间操作方便且易于理解。

图:ZooKeeper层次命名空间

接着上图中,我们需要了解一下ZooKeeper中的节点和临时节点

ZooKeeper的节点是通过像树一样的结构来进行维护的,并且每一个节点通过路径来标示以及访问。除此之外,每一个节点还拥有自身的一些信息,包括:数据、数据长度、创建时间、修改时间等等。

从这样一类既含有数据,又作为路径表标示的节点的特点中,可以看出,ZooKeeper的节点既可以被看做是一个文件,又可以被看做是一个目录,它同时具有二者的特点。为了简单我们可以Znode来表示所讨论的ZooKeeper节点。

具体地说,Znode维护着数据、ACL(access controllist,访问控制列表)、时间戳等交换版本号等数据结构,它通过对这些数据的管理来让缓存生效并且令协调更新。每当Znode中的数据更新后它所维护的版本号将增加,这非常类似于数据库中计数器时间戳的操作方式。

另外Znode还具有原子性操作的特点:命名空间中,每一个Znode的数据将被原子地读写。读操作将读取与Znode相关的所有数据,写操作将替换掉所有的数据。除此之外,每一个节点都有一个访问控制列表,这个访问控制列表规定了用户操作的权限。

ZooKeeper中同样存在临时节点。这些节点与session同时存在,当session生命周期结束,这些临时节点也将被删除。临时节点在某些场合也发挥着非常重要的作用。

了解了Zookeeper的命名空间和节点之后我们需要跟上一篇文章中提到的内部逻辑联系起来.在上篇介绍到的内部流程中,拿到这里看看Zookeeper是如何处理的,流程如下图:

1  当服务提供者启动时,Zookeeper向/dubbo/com.foo.BarService/providers目录下写入自己的URL地址。

2 当服务消费者启动时,这时候有两个动作:

订阅/dubbo/com.foo.BarService/providers目录下的提供者URL地址。

并向/dubbo/com.foo.BarService/consumers目录下写入自己的URL地址。

3当监控中心启动时,订阅/dubbo/com.foo.BarService目录下的所有提供者和消费者URL地址。

以上内容算是对Zookeeper进行了一个入门级的了解,如果想深入对其了解的话可以参考一下文章:

官方文档

分布式服务框架 Zookeeper -- 管理分布式环境中的数据

时间: 2024-08-26 16:31:44

Dubbo之旅--注册中心的相关文章

Dubbo之旅--注册中心(2)

本篇文章的主要目的是的介绍Zookeeper在window环境下的安装.在Window的环境下安装还是比较简单的. 首先下载一个zookeeper,我下载的版本是zookeeper-3.3.5,解压安装包,解压后的zookeeper安装包放置的路径如下图 2.:进入D:\Environment\zookeeper-3.3.5\conf,将zoo_sample.cfg文件复制一份,并将复制好的文件改名为zoo.cfg.打开新建的zoo.cfg文件,将里面的内容进行修改,修改后的文件内容如下: #i

12. Dubbo原理解析-注册中心之基于dubbo协议的简单注册中心实现

基于dubbo协议开源只是给出了默认一个注册中心实现SimpleRegistryService, 它只是一个简单实现,不支持集群,就是利用Map<String/*ip:port*/, Map<String/*service*/, URL>来存储服务地址, 具体不在啰嗦了,请读者翻看源代码,可作为自定义注册中的参考. 注册中心启动 SimpleRegistryService本身也是作为一个dubbo服务暴露. <dubbo:protocolport="9090"

dubbo连接zookeeper注册中心因为断网导致线程无限等待问题

最近维护的系统切换了网络环境,由联通换成了电信网络,因为某些过滤规则导致系统连不上zookeeper服务器(应用系统机器在深圳,网络为电信线路,zookeeper服务器在北京,网络为联通线路),因为我不是运维人员也不懂运维相关的技术,所以排查了很久也不知道原因,最后无奈之下把深圳这边的网络切回了联通,系统恢复正常. 但是因为本次事故体现了一个很严重的问题,即当zookeeper注册中心连不上时dubbo的线程会无限等待,因为系统有一些定时任务会比较频繁地开启新线程连接dubbo,所以导致的结果是

11. Dubbo原理解析-注册中心之基于dubbo协议的接口介绍

服务注册与发现的中心,服务的提供者将服务发布到注册中心,服务的使用着到注册中引用服务. Dubbo的注册中心提供了多种实现,其实现是基于dubbo的spi的扩展机制的,使用着可以直接实现自己的注册中心. @SPI("dubbo") public interface RegistryFactory { /** * 连接注册中心. * 连接注册中心需处理契约 * 1. 当设置check=false时表示不检查连接,否则在连接不上时抛出异常. * 2. 支持URL上的username:pas

13. Dubbo原理解析-注册中心之Zookeeper协议注册中心

下面我们来看下开源dubbo推荐的业界成熟的zookeeper做为注册中心, zookeeper是hadoop的一个子项目是分布式系统的可靠协调者,他提供了配置维护,名字服务,分布式同步等服务.对于zookeeper的原理本文档不分析,后面有时间在做专题. zookeeper注册中心 Zookeeper对数据存储类似linux的目录结构,下面给出官方文档对dubbo注册数据的存储示例 假设读者对zookeeper有所了解,能够搭建zookeeper服务,其实不了解也没关系,谷歌百度下分分钟搞起.

dubbo之多注册中心

Dubbo 支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务.另外,注册中心是支持自定义扩展的. 多注册中心注册 比如:中文站有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp

Dubbo之多注册中心以及zookepeer服务的查看

配置多注册中心 打开 provider 模块的 spring-provider.xml 配置文件,修改成如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 添加 DUBBO SCHEMA --> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://

记一次dubbo连接zookeeper注册中心发生异常的排查经历

????spring boot集成dubbo项目启动过程中报错,错误信息如下: 2020-01-19 17:42:30.466 ERROR - [main] org.springframework.boot.SpringApplication.reportFailure(822) | Application run failed java.lang.IllegalStateException: zookeeper not connected at org.apache.dubbo.remotin

IDEA中SSM框架转变为SOA dubbo框架 zookeeper注册中心

SOA框架的优点: 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率.用于提高机器利用率的 资源调度和治理中心(SOA) 是关键. SSM框架链接(http://www.cnblogs.com/zandz/p/8631164.html)在此基础上进行转变 那么如何将SSM框架转变成SOA框架呢?下面我做了一番整理 首先是目录结构的改变(左SSM 右SOA) 在SSM框架分为pojo dao interface serv