怎么解析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)

相关推荐

  • 怎么进行IE6、IE7、IE8三大浏览器兼容性对比

    技术怎么进行IE6、IE7、IE8三大浏览器兼容性对比本篇文章给大家分享的是有关怎么进行IE6、IE7、IE8三大浏览器兼容性对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟

    攻略 2021年11月25日
  • redis有哪些内存淘汰策略如何配置(redis中线程安全的方法)

    技术Redis中线程IO模型是什么这篇文章将为大家详细讲解有关Redis中线程IO模型是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis是一个单线程的应用程序,NodeJs

    攻略 2021年12月21日
  • CentOS7

    技术CentOS7 CentOS7 - 快速查看系统日志
    1、CentOS7 - 快速查看系统日志
    https://baijiahao.baidu.com/sid=1615125260552254706

    礼包 2021年10月27日
  • 数据库中迁移服务器方案有哪些

    技术数据库中迁移服务器方案有哪些这篇文章将为大家详细讲解有关数据库中迁移服务器方案有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本次迁移数据库使用了两种方案方案一:数据泵导出方式

    攻略 2021年12月13日
  • C++中怎么使用工厂函数

    技术C++中怎么使用工厂函数本篇内容介绍了“C++中怎么使用工厂函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果在

    攻略 2021年11月29日
  • Redis集群主从模式的示例分析

    技术Redis集群主从模式的示例分析这篇文章主要介绍了Redis集群主从模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。redis集群主从模式

    攻略 2021年11月15日