Zookeeper与Zab协议深入总结

零、Zookeeper

Zookeeper之有名,已不需再说,大量中间件基于zk来做分布式一致性、master选举、注册订阅服务。它的核心功能是主从绝对一致,且拥有发布/订阅能力,并拥有顺序性、原子性和单一视图等特性,着实好用(实际上吃瓜群众邱永臣在造RPC轮子时,也是将zk作为注册中心)。

一、Zab协议

Zookeeper的核心是Zab协议,即zookeeper的原子广播协议。Zab主要靠2个模式来保证一致性,分别是恢复模式(选leader)和广播模式 。

恢复模式:在集群启动之初,或是leader挂掉之后,各个服务器开始选出新leader,并更新年号纪元(要点是选zxid最大的服务器)。恢复过程中,为了保证一致性需要解决两个问题,一个是旧leader已经commit的提议必须应用到所有follower,另一个是仅有旧leader提出的提议必须回滚,解决上述俩问题的要点也是选zxid最大的服务器作为新leader。

广播模式:leader在应用事务请求之前,必须取得超半数follower的同意,过程及其类似两阶段提交。和两阶段不同的是,leader发出提议后,follower需记录在事务日志中,写磁盘成功后返回ack,leader得到超半数ack后,统一commit(因为follower有队列实现事务串行且有事务日志,所以commit大概率成功);另外,Zab没有rollback选项,若follower不同意leader的提议,该follower被踢出投票席(所以只能ack),需重新同步leader数据。

二、脑图笔记

可以下载PDF脑图细看(其中包括单机事务和分布式事务的研究):Zookeeper与Zab协议深入总结脑图