ZooKeeper系统模型之集群间消息通信。

2023-11-17

        ZooKeeper的消息类型大体上可以分为四类,分别是:数据同步型、服务器初始化型、请求处理型和会话管理型。

数据同步型

        数据同步型消息是指在Learner和Leader服务器进行数据同步的时候,网络通信所用到的消息,通常有DIFF、TRUNC、SNAP和UPTODATE四种。下表中分别对这四种消息类型进行了详细介绍。

 

消息类型 发送方→接收方 说明
DIFF, 13 Leader→Learner 用于通知Learner服务器、Leader即将与其进行“DIFF”方式的数据同步
TRUNC,14 Leader→Learner 用于触发Learner服务器进行内存数据库的回滚操作
SNAP,15 Leader→Learner 用于通知Learner服务器,Learner即将与其进行“全量”方式的数据同步
UPTODATE,12 Leader→Learner 用来告诉Learner服务器,已经完成了数据同步,可以开始对外提供服务了

服务器初始化型

        服务器初始化型消息是指在整个集群或是某些新机器初始化的时候,Leader和Learner之间相互通信所使用的消息类型,常见的有OBSERVERINFO、FOLLOWERINFO、LEADERINFO、ACKEPOCH和NEWLEADER五种。下表中对这五种消息类型进行了详细介绍。

 

消息类型 发送方→接收方 说明
OBSERVERINFO, 16 Observer→Leader 该信息通常是由Observer服务器在启动的时候发送给Leader的,用于向Leader服务器注册自己,同时向Leader服务器表明当前Learner服务器的角色是Observer。消息中包含了当前Observer服务器的SID和已经处理的最新ZXID。
FOLLOWERINFO, 11 Follower→Leader 该信息通常是由Follower服务器在启动的时候发送给Leader的,用于向Leader服务器注册自己,同时向Leader服务器表明当前Learner服务器的角色是Follower。消息中包含了当前Follower服务器的SID和已经处理的最新ZXID
LEADERINFO,17 Leader→Learner 在上卖弄我们已经提到,在Learner连接上Leader后,会向Leader发送LearnerInfo消息(包含了OBSERVERINFO和FOLLOWERINFO两类消息),Leader服务器在接收到该消息后,也会将Leader服务器的基本信息发送给这些Learner,这个消息就是LEADERINFO,通常包含了当前Leader服务器的最新EPOCH值
ACKEPOCH,18 Learner→Leader Learner在接收到Leader发来的LEADERINFO消息后,会将自己最新的ZXID和EPOCH以ACKEPOCH消息的形式发送给Leader
NEWLEADER,10 Leader→Learner 该消息通常用于Leader服务器向Learner发送一个阶段性的标识消息——Leader会在和Learner完成一个交互流程后,向Learner发送NEWLEADER消息,同时带上当前Leader服务器处理的最新ZXID。这一系统交互流程包括:足够多的Follower服务器连接上Leader或是完成数据同步

请求处理型

        请求处理型消息是指在进行请求处理的过程中,Leader和Learner服务器之间互相通信所使用的消息,常见的有REQUEST、PROPOSAL、ACK、COMMIT、INFORM和SYNC六种。下表中对这六种消息类型进行了详细介绍。

 

消息类型 发送方→接收方 说明
REQUEST,1 Learner→Leader 该消息是ZooKeeper的请求转发消息。在ZooKeeper中,所有的事务请i去必须由Leader服务器来处理。当Learner服务器接收到客户端的事务请求后,就会将请求以REQUEST消息的形式转发给Leader服务器来处理
PROPOSAL,2 Leader→Follower 该消息是ZooKeeper实现ZAB算法的核心所在,即ZAB协议中的提议。在处理事务请求的时候,Leader服务器会将事务请求以PROPOSAL消息的形式创建投票发送给集群中所有的Follower服务器来进行事务日志的记录
ACK,3 Follower→Leader Follower服务器在接收到来自Leader的PROPOSAL消息后,会进行事务日志的记录。如果完成了事务日志的记录,那么就会以ACK消息的反馈给Leader。
COMMIT,4 Leader→Follower 该消息用于通知集群中所有的Follower服务器,可以进行事务请求的提交了。Leader服务器在接收到过半的Follower服务器发来的ACK消息后,就进入事务请求的最终提交流程——生成COMMIT消息,告知所有的Follower服务器进行事务请求的提交。
INFORM,8 Leader→Observer 在事务请求提交阶段,针对Follower服务器,Leader仅仅只需要发送一个COMMIT消息,Follower服务器就可以完成事务请求的提交了,因为在这之前的事务请求投票阶段,Follower已经接受过PROPOSAL消息,该消息中包含了事务请求的内存,因此Follower剋有从之前的Proposal缓存中再次获取到事务请求。而对于Observerl哎说,由于之前没有参与事务请求的投票,因此没有该事务请i去的上下文,显然,如果Leader同样对其发送一个简单地COMMIT消息,Observer服务器是无法完成事务请求的提交的。为了解决这个问题,ZooKeeper特别设计了INFORM消息,该消息不仅能够通知Observer已经可以提交事务请求,同时还会在消息中携带事务请求的内容。
SYNC,7 Leader→Learner 该消息用于通知Learner服务器已经完成了Sync操作

会话管理型

        会话管理型消息是指ZooKeeper在进行会话管理的过程中,和Learner服务器之间互相通信所使用的消息,常见的有PING和REVALIDATE两种。下表中对这两种雄安喜类型进行了详细的介绍。

 

消息类型 发送方→接收方 说明
PING,5 Leader→Learner 该消息用于Leader同步Learner服务器上的客户端心跳检测,用以激活存活的客户端。ZooKeeper的客户端往往会随机地和任意一个ZooKeeper服务器保持连接,因此Leader服务器无法直接收到所有客户端的心跳检测,需要委托给Learner来保存这些客户端的心跳检测的客户端列表,同样以PING消息的形式反馈给Leader服务器,由Leader服务器来负责逐个对这些客户端进行会话激活。
REVALIDATE,6 Learner→leader 该消息用于Learner校验会话是否有效,同时也会激活会话。这通常发生在客户端重连的过程中,新的服务器需要向Leader发送REVALIDATE消息以确定该会话是否已经超时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZooKeeper系统模型之集群间消息通信。 的相关文章

随机推荐

  • LLaMA, ChatGLM, BLOOM的参数高效微调实践

    作者 回旋托马斯x 腾讯NLP算法工程师 项目地址 https zhuanlan zhihu com p 635710004 1 开源基座模型对比 大语言模型的训练分为两个阶段 1 在海量文本语料上的无监督预训练 学习通用的语义表示和世界知
  • JDBC讲解

    SUN公司于1996年提供了一套访问数据库的标准Java类库 即JDBC 一 什么是JDBC JDBC的全称是Java数据库连接 Java Database Connectivity 它是一套用于执行SQL语句的Java API 应用程序可
  • Rider Solution

    新建空的solution Add gt Existing Project gt 选择项目xx csproj导入 选某个项目 dotnet build 然后 Unload 再load加载完成 如果出现引包冲突 直接注释那句就好了 如果建了一个
  • 一文看懂怎么用Python做数据分析

    常遇到两类朋友 一类是会爬虫但不知道如何进一步做数据分析的 一类是平常用 Excel 做分析但不太会用 Python 分析的 如果和你很像 那下面这篇系统长文会很适合你 建议先收藏 Excel 是数据分析中最常用的工具 本文通过 Pytho
  • Selenium成长之路-25 日历控件的处理

    今天来分享一下日历控件的处理方式 以下用12306来举例子 使用firbug查看 12306 网站 查看js属性是 readonly 没错 就是这个属性 来控制日历控件 我们就要对它进行一些处理 1 去掉 readonly 属性 直接去掉
  • MOS管使用的条件

  • delphi JSONObject 助手 uSZHN_JSON,SuperObject语法

    Helper实现的类似SuperObject的写法 使用这个方法 需要引入单元uSZHN JSON pas 访问密码 168168 procedure TForm1 Button1Click Sender TObject var jo TJ
  • Hypervisor介绍及在智能驾驶的应用

    转自Hypervisor 智能座舱和智能驾驶融合的关键技术 腾讯新闻
  • 2023年计算机专业毕业设计选题有哪些?(附源码)

    计算机毕业设计这个选题的话其实有很多的 就看你自己能接受怎么样的 比如可以做网站类 系统类 小程序类 安卓app 大数据类等等 这个也要看你个人能力和技术问题 如果技术小白或者有一点点基础的话建议选择网站类和系统类的 如果有扎实的基础技能可
  • 【编程笔试】美团2021校招笔试-通用编程题第10场(附思路及C++代码)

    导览 练习地址 淘汰分数 正则序列 公司食堂 最优二叉树II 练习地址 点此前往练习 淘汰分数 某比赛已经进入了淘汰赛阶段 已知共有n名选手参与了此阶段比赛 他们的得分分别是a 1 a 2 a n 小美作为比赛的裁判希望设定一个分数线m 使
  • 过压保护芯片,高输入电压(OVP)

    PW2606是一种前端过电压和过电流保护装置 它实现了广泛的输入电压范围从2 5V到40V 过电压阈值可在外部编程或设置为内部默认设置 集成功率路径nFET开关的超低电阻确保了更好的性能电池充电系统应用的性能 它可以提供高达2A的电流 以满
  • python random.randint(0、2)_如何使用python random模块中的randint()函数?

    python中的random模块用于生成随机数 而要生成随机整数则需要用到 random模块里的randint 函数 randint 函数随机产生括号里两个参数之间的整数 且包括这两个参数 划定随机生成整数的范围 最小最大值 1 rando
  • ESP8266使用AT指令连接MQTT服务器

    注 不同的AT固件在使用时存在差异 此处使用的是安信可官方提供的MQTT透传AT固件 固件号 1471 本文为学习记录 仅作参考 如有不对之处 请留言 附 固件地址 AT固件汇总 安信可科技 ai thinker com https doc
  • JSON.parse()方法

    一 JSON的解析方法有两种 eval 和JSON parse var jsonstr str1 Hello str2 world var evalJson eval jsonstr var jsonParseJson JSON parse
  • python获取矩阵某一列元素

    今天写线性回归问题的时候遇到了一个问题 对于一个二维矩阵 python如何遍历其某一列元素 遍历一行是很简单的 直接使用索引即可 但是遍历一列呢 方法一 直接遍历法 使用一个循环 对每一行单独找出这列上的对应元素 方法二 列表解析法 这个方
  • webpack 常用配置

    环境搭建 既然是前端项目 那么就npm就必不可少 运行 npm install webpack cli g 来全局安装脚手架 随后使用 npm install webpack cli D 安装到工程下 在工程目录下创建 webpack co
  • stm32专题二十六:输入捕获 脉宽测量

    硬件设计 脉宽测量原理 当按键没有按下时 由硬件电路自动拉低 如果按键按下 则PA0产生上升沿 我们进行脉宽测量时 首先设置为上升沿捕获 然后在第一次捕获到上升沿时 将计数器清零 并设置捕获极性为下降沿捕获 当第二次捕获到信号时 就是一个完
  • Vigenere密码

    Vigenere密码技术 在单字符单表替换密码中 明文中的字符与密文中字符是一一对应的 在明文表中的字符也存在于在密文表中 明文中字符的统计特性在密文中没有得到改变 单字符多表替换密码技术是用一系列 两个以上 替换表依次对明文的字符进行替换
  • 跟据后台数据生成饼图及柱形图实例

    在做社团管理系统时 为了进一步完善功能 用jfreechar做了一个饼图与柱形图 做的比较粗糙 效果如下 现在跟大家分享一下实现方法 生成饼图 param list 传入参数为一个list list中包含多个map 这个list是从数据库中
  • ZooKeeper系统模型之集群间消息通信。

    ZooKeeper的消息类型大体上可以分为四类 分别是 数据同步型 服务器初始化型 请求处理型和会话管理型 数据同步型 数据同步型消息是指在Learner和Leader服务器进行数据同步的时候 网络通信所用到的消息 通常有DIFF TRUN