zxidnode
znode节点的状态信息中包含czxid, 那么什么是zxid呢?ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id, 该id称为zxid. 因为zxid的递增性质, 若是zxid1小于zxid2, 那么zxid1确定先于zxid2发生.建立任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会致使Zookeeper状态发生改变, 从而致使zxid的值增长.算法
Observer 服务器
Zookeeper需保证高可用和强一致性; 为了支持更多的客户端,须要增长更多Server; Server增多,投票阶段延迟增大,影响性能; 权衡伸缩性和高吞吐率,引入Observer Observer不参与投票; Observers接受客户端的链接,并将写请求转发给leader节点;加入更多Observer节点,提升伸缩性,同时不影响吞吐率。session
为何zookeeper集群的数目,通常为奇数个?性能
Leader选举算法采用了Paxos协议;Paxos核心思想:当多数Server写成功,则任务数据写成功,若是有3个Server,则两个写成功便可;若是有4或5个Server,则三个写成功便可。Server数目通常为奇数(三、五、7)若是有3个Server,则最多容许1个Server挂掉;若是有4个Server,则一样最多容许1个Server挂掉由此,咱们看出3台服务器和4台服务器的的容灾能力是同样的,因此为了节省服务器资源,通常咱们采用奇数个数,做为服务器部署个数。线程
Leader工做流程server
Leader主要有三个功能:
1 .恢复数据;
2 .维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型;
3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不一样的消息类型,进行不一样的处理。
PING消息是指Learner的心跳信息;REQUEST消息是Follower发送的提议信息,包括写请求及同步请求;ACK消息是Follower的对提议的回复,超过半数的Follower经过,则commit该提议;REVALIDATE消息是用来延长SESSION有效时间。
Leader的工做流程简图以下所示,在实际实现中,流程要比下图复杂得多,启动了三个线程来实现功能。资源
Follower工做流程部署
Follower主要有四个功能:
1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
2 .接收Leader消息并进行处理;
3 .接收Client的请求,若是为写请求,发送给Leader进行投票;
4 .返回Client结果。
Follower的消息循环处理以下几种来自Leader的消息:
1 .PING消息: 心跳消息;
2 .PROPOSAL消息:Leader发起的提案,要求Follower投票;
3 .COMMIT消息:服务器端最新一次提案的信息;
4 .UPTODATE消息:代表同步完成;
5 .REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session仍是容许其接受消息;
6 .SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制获得最新的更新。
Follower的工做流程简图以下所示,在实际实现中,Follower是经过5个线程来实现功能的。同步