字面解释
zab(ZooKeeper Atomic Broadcast):zookeeper原子消息广播协议。是为zookeeper专门设计的用于支持崩溃恢复的原子广播协议。
zab实质定义
对于会改变zk服务器数据状态的事务请求,将由全局唯一的服务器来协调处理,这样的服务器称之为leader,而余下的其它服务器称之为follower。leader服务器负责将一个客户端事务请求转换成proposal,并将proposal转发给follower,如果follower中有超过半数的accept,那么leader则会向所有的follower发送commit消息,要求其将前一个proposal提交。
zab的用途
- 崩溃恢复:当leader挂掉之后,需要选举新的leader服务器,依据为zxid(全局递增的事务id)。当某个follower服务器中存在上一个事务未提交,则zxid不是最高的,所以不能选择此follower作为leader(每次事务提交,都会让服务器中zxid变量中的低32位加1)。
- 消息广播:当leader选举结束以及数据同步之后,就可以进行正常的原子广播阶段。在这一阶段中,leader会以队列的形式为每一个与自己保持同步的follower创建一个操作队列,同一时刻,leader只能和一个follower保持同步。leader与所有的follower通过心跳检测机制来感知彼此的情况,在规定时间内leader可以从过半的follower获得反馈,则保证正常连接,如果没有过半的反馈,则重新选择leader。
zab中,每个进程可能存在的状态
- looking:leader选举
- following:follower与leader服务器保持正常通信状态
- leading:leader作为主服务器领导状态
网友评论