读书人

Zookeeper推举过程描述与状态迁移

发布时间: 2013-04-20 19:43:01 作者: rapoo

Zookeeper选举过程描述与状态迁移

F1.FastLeaderElection类初始过程

?

  1. QuromCnxManager是一个相对底层的”链接”处理类,他负责管理当前server和其他server的socket链接,以及socket上数据的输入输出,对于FastLeader选举过程中所造成的消息发送和接受,均由此manager处理,它维持当前server和其他server建立的链接,以及侦听选举端口上,其他server的链接申请或者数据IO;链接为socket链接,非NIO长连接."链接"的作用,就是为选举过程中所发生的数据交互进行IO操作(例如,接收选举数据和发送头片数据等).
  2. 为了避免大量server之间互相建立socket链接,造成性能问题(甚至是不必要的重复链接),manager对链接的控制采取了一种” challenge”(挑战)方式,让任意2个server之间只有一个socket链接,而且总是sid较小的server作为socket server端,sid较大的作为sock client端,在整个分布式网络中,将这种有序有向的链接逐个节点传递下去.不过在初次通信时,server会尝试和所有的其他server发起链接,对于链接的socket server端,来决定是否接受(accept)链接.如果当前server发现socket终端的sid比自己的sid小,那么当前server就会放弃已经建立的链接(假如已经建立)或者关闭此socket,并主动向sid较小的server发起socket链接.选举过程中,如果socket超时或者其他原因终端,链接将会重建.

?
Zookeeper推举过程描述与状态迁移
F2.QuorumCnxManager内部结构

?

  1. Notification:”通知”,其他server发送的消息,包括server所提议(推选)的leader所具有的如下属性:leader(机器id),,zxid,peerEpoch;以及”提议者”的sid,serverState,electionEpoch.
  2. ToSend:”发件”,当前server需要发给其他server的消息,包括它提议的leader所具有的如下属性:leader(机器id),zxid,peerEpoch,以及当前server的如下属性:electionEpoch,serverState,sid.它和Notification相互对应.为了区别,用了2个几乎完全一样的类.
  3. FastLeaderElection类持有2个队列,sendqueue和recvqueue.sendqueue是当前server亟待发给其他server的消息(ToSend),recvqueue是当前server已经接收但还没有处理的消息(Notification).
  4. SendWorker和RecvWorker在socket建立成功后,同时被创建,实例化时同时也持有sid,dataInput或dataoutput引用,很便捷的操作socket数据.
  5. FastLeaderElection也不能脱俗,使用2个队列分别保存亟待发送的ToSend和Nofification,数据结构为LinkedBlockingQueue.
  6. QuromCnxManager持有3个数据结构,:
读书人网 >软件架构设计

热点推荐