Zookeeper集群间消息通信

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

数据同步型

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

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

服务器初始化型

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

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

请求处理型

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

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

会话管理型

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

消息类型发送方→接收方说明
PING,5Leader→Learner该消息用于Leader同步Learner服务器上的客户端心跳检测,用以激活存活的客户端。ZooKeeper的客户端往往会随机地和任意一个ZooKeeper服务器保持连接,因此Leader服务器无法直接收到所有客户端的心跳检测,需要委托给Learner来保存这些客户端的心跳检测的客户端列表,同样以PING消息的形式反馈给Leader服务器,由Leader服务器来负责逐个对这些客户端进行会话激活。
REVALIDATE,6Learner→leader该消息用于Learner校验会话是否有效,同时也会激活会话。这通常发生在客户端重连的过程中,新的服务器需要向Leader发送REVALIDATE消息以确定该会话是否已经超时。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值