怎么解析zookeeper 原理

技术怎么解析zookeeper 原理今天就跟大家聊聊有关怎么解析zookeeper 原理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、zookeeper的角色

今天,我将和你谈谈如何分析动物园管理员原则。可能很多人不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

00-1010 1.领导):负责发起和决定投票以及更新系统状态。

2.学习者):包括跟随者和观察者。

3.跟随者):用于接受客户端的请求并将结果返回给客户端,并在选择所有者的过程中参与投票。

4.观察者):可以接受客户端连接并将写请求转发给领导者,但是观察者不参与投票过程,只同步领导者的状态。观察者的目的是扩展系统,提高阅读速度。

5.客户端):请求启动器。

怎么解析zookeeper  原理

一、zookeeper的角色

Zookeeper的核心是原子广播,保证了Server之间的同步。实现这种机制的协议称为Zab协议。Zab协议有两种模式,分别是回复模式(主选择)和广播模式(同步)。当服务启动或领导者崩溃时,Zab进入恢复模式。当领导者当选且大多数服务器已完成与领导者的状态同步时,恢复模式结束。状态同步确保领导者和服务器具有相同的系统状态。

为了保证交易的顺序一致性,zookeeper使用递增的交易id号(zxid)来标识交易。所有建议在提出时都加上了zxid。在实现中,zxid是64位数字,其高32位是用于识别领导者关系是否已经改变的时期。每次选出一个领袖,都会有一个新的纪元,表明当前属于哪个领袖的统治时期。低32位用于向上计数。

每个服务器工作过程中有三种状态:

查找:当前服务器不知道谁是领导者,正在搜索。

领先:当前服务器是选定的领先。

以下:领导已当选,当前服务器与其同步。

怎么解析zookeeper  原理

假设有一个Zookeeper集群,由5台服务器组成,它们的id从1到5不等,都是新启动的,也就是没有历史数据,就存储的数据量来说是一样的。让我们假设这些服务器按顺序启动,看看会发生什么,如图所示。

1.服务器1启动。此时,它只有一台服务器启动,它发出的消息没有响应,所以它的选举状态总是“在看”。

2.服务器2启动,并且它与开始时启动的服务器1通信,以交换它自己的选举结果。因为它们都没有历史数据,所以id值较大的服务器2获胜,但是由于不超过一半的服务器同意投票给它(在这个例子中,超过一半的服务器是3),服务器1和2仍然保持LOOKING。

3.服务器3启动。根据前面的理论分析,服务器3成为服务器1、2和3中的领导者。与上面不同的是,三个服务器在这个时候选举了它,所以它成为了这次选举的领导者。

4.服务器4启动。根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的。但是,由于一半以上的服务器已经选了服务器3,所以只能接受弟弟的生活。

5.服务器5启动,就像4一样,做弟弟。

二、选举机制

[ZK :127 . 0 . 0 . 1:2181(CONNECTED)2]get/20181112

你好#数据

Czxid=0x4#创建节点的事务zxid

CTI me=monnov 1215:31336017 CST 2018 #创建时间

mZxid=0x4nbsp

; #最后一次更新的事务zxid
mtime = Mon Nov 12 15:31:17 CST 2018  #最后一次更新时间
pZxid = 0x4  #最后一次更新子节点zxid
cversion = 0  #子节点变化号,znode子节点修改次数
dataVersion = 0 #数据变化版本号
aclVersion = 0  #访问控制列表的变化号
ephemeralOwner = 0x0  #如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
dataLength = 5  #数据长度
numChildren = 0  #子节点数量

四、节点类型

  • Znode有两种类型,短暂的(ephemeral)和 持久的(persistent)。

  • Znode的类型在创建时确定并且之后不能修改。

  • 短暂Znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点。

  • 持久Znode不依赖于客户端会话,只有当客户端明确要删除该持有化Znode时才会删除。

  • Znode有四种形式的目录节点

    • PERSISITENT

    • EPHEMERAL

    • PERSISITENT_SEQUENTIAL

    • EPHEMERAL_SEQUENTIAL

五、写数据流程

怎么解析zookeeper 原理

  • 1. Client 向 ZooKeeper 的 Server1 上写数据,发送一个写请求。

  • 2. 如果Server1不是Leader,那么Server1 会把接受到的请求进一步转发给Leader,因为每个ZooKeeper的Server里面有一个是Leader。这个Leader 会将写请求广播给各个Server,比如Server1和Server2,各个Server写成功后就会通知Leader。

  • 3. 当Leader收到大多数 Server 数据写成功了,那么就说明数据写成功了。如果这里三个节点的话,只要有两个节点数据写成功了,那么就认为数据写成功了。写成功之后,Leader会告诉Server1数据写成功了。

  • 4. Server1会进一步通知 Client 数据写成功了,这时就认为整个写操作成功。

六、观察(watcher)

  • Watcher 在 Zookeeper 是一个核心功能,Watcher可以监控目录节点的数据变化以及子目录的变化,一单这些状态发生变化,服务器就会通知所有设置在这个目录节点上的Watcher,从而每个客户端都很快知道它所关注的状态发生变化,而做出相应的反应。

  • 可以设置观察的操作:exists、getChildren、getData

  • 可以出发观察的操作:create、delete、setData

怎么解析zookeeper 原理

监听原理详解:

  • 1. 首先要有一个main()线程

  • 2. 在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。

  • 3. 通过connect线程将注册的监听事件发送给Zookeeper。

  • 4. 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。

  • 5. Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。

  • 6. listener线程内部调用了process()方法。

看完上述内容,你们对怎么解析zookeeper 原理有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/86837.html

(0)

相关推荐

  • rt-thread创建线程后怎么运作(rt-thread线程挂起不成功)

    技术RT-Thread线程间通信学习过程是怎样的今天就跟大家聊聊有关RT-Thread线程间通信学习过程是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。下面

    攻略 2021年12月17日
  • reflect Java的反射机制是怎样的

    技术reflect Java的反射机制是怎样的reflect Java的反射机制是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、类型识别的两种方式

    攻略 2021年10月23日
  • 汇编语言怎么实现简单数学运算

    技术汇编语言怎么实现简单数学运算这篇文章主要介绍“汇编语言怎么实现简单数学运算”,在日常操作中,相信很多人在汇编语言怎么实现简单数学运算问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”汇编语

    攻略 2021年11月29日
  • C++中怎么创建CryptoCurrency类

    技术C++中怎么创建CryptoCurrency类本篇内容主要讲解“C++中怎么创建CryptoCurrency类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中怎么创

    攻略 2021年11月30日
  • 5 个IDEA 必备插件是什么

    技术5 个IDEA 必备插件是什么本篇内容介绍了“5 个IDEA 必备插件是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

    攻略 2021年11月2日
  • Python如何移植到IMX6ULL开发板上

    技术Python如何移植到IMX6ULL开发板上这篇文章主要讲解了“ Python如何移植到IMX6ULL开发板上”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ Pyth

    攻略 2021年11月23日