Zookeeper的ZAB协议
ZAB协议
ZAB协议是为分布式协调服务zookeeper专门设计的一种支持崩溃恢复的原子广播协议。具体的,Zookeeper使用一个单一的主进程来接收并处理客户端的所有事务请求,并采用zab的原子广播协议。
针对客户端的事务请求,leader服务器会为其产生对应事务的proposal,将其发送给集群中其余所有的机器,然后再分别收集各自的选票,最后进行事务提交.
在zab二段提交中,意味着我们可以在过半的follower服务器已经反馈过ack之后就开始提交proposal了,而不需要等待集群中所有的follower都反馈响应.
在整个消息广播过程中,Leader服务器会为每个事务请求生成对应的proposal来进行广播,并且在广播事务proposal之前,leader会首先为这个事务的proposal分配一个全局单调递增的唯一id,我们称之为事务id.
在消息广播的过程中,leader服务器会为每一个follower服务器都各自分配一个单独的队列,然后将需要广播的事务proposal依次放入这些队列中去,并且根据fifo进行消息发送.每一个follower在接收到这个事务proposal以后,都会首先将其以事务日志的形式写到本地磁盘中去.