在分布式系统中实现一致性是件困难的事。 Paxos 算法可以较好的解决分布式系统的一致性,但由于复杂,在实际工程上不是很合适。 ZAB(ZooKeeper Atomic Broadcast ) 协议借鉴了 Paxos 的思想,ZAB在Paxos算法上做了重要改造,和Paxos有着明显的不同,以满足工程上的实际需求。
有序性是 Zab 协议与 Paxos 协议的一个核心区别。
Zab 的有序性主要表现在两个方面:
广播的过程实际上是一个简化的二阶段提交过程:
由于之前讲的 Zab 协议的广播部分不能处理 leader 挂掉的情况,Zab 协议引入了恢复模式来处理这一问题。为了使 leader 挂了后系统能正常工作,需要解决以下两个问题:
让Leader选举算法能够保证新选举出来的Leader服务器拥有集群中所有机器最高编号(ZXID最大)的事务Proposal,就可以保证这个新选举出来的Leader一定具有所有已经提交的提案。更为重要的是,如果让具有最高编号事务Proposal的机器来成为Leader,就可以省去Leader服务器检查Proposa的提交和丢弃工作这一步