ZAB与Paxos算法的联系与区别 ZAB协议


为了保证分布式的一致性,共有2pc,3pc,paxos几种算法实现。2pc实际是一种强一致性实现,有同步阻塞、单点问题、数据不一致、太过保守等集中缺点。

二者的区别具体见 :http://li5jun.com/article/39.html (分布式一致性) http://li5jun.com/article/185.html  (分布式存储系统 知识体系

而3pc则是分为canCommit、PreCommit、doCommit三个阶段,引入了网络分区后,协调者和参与者失去网络通信后,事物不一致的缺点。

而paxos协议是目前分布式最有效的算法之一。为了保证不出现死循环,还提出了主Proposer,才能提出提案的方法。


ZAB协议并不是 Paxos 算法的一个典型实现,在讲解 ZAB和 Paxos之间的区别之前, 我们首先看下两者的联系, 

• 两者都有一个类似于Leader进程的角色,由其负责协调多个Follower运行 

• Leader进程都会等待超过半数的Follower做出正确的反馈后,才会将一个提案进行提交。 

• 在ZAB协议中,每个Proposal都包含了一个epoch值,用来代表当前的Leader 周期,在Paxos算法中,同样存在这样的一个标识,只是名字变成了Ballot。


在Paxos算法中,一个新选举产生的主进程会进行两个阶段的工作,第一阶段被称为读阶段,在这个阶段中,这个新的主进程会通过和所有其他进程进行通信的方式来收集上一个—个主进程提出的提案,并将它们提交.第二阶段被称为写阶段,在这个阶段,与前主进程开始提出自己的提案。


在Paxos算法设计的基础上, ZAB协议额外添加了一 个同步阶段。在同步阶段之前,ZAB协议也存在一个和Paxos算法中的读阶段I类似的过程,被称为发现( Discovery)阶段,在同步阶段中,新的 Leader会确存在过半数的Follower已经提交了之前Leader周期中的所有事物的Proposal,在这一同步阶段的引人,能够有效地保证Leader在新的周期中提出事务Proposal之前,所有的进程都已经完成了对之前所有事物的Proposal的提交。 


一旦完成同步阶段后,那么 ZAB就会执行和 Paxos算法类似 的写阶段。 


总的来汫, ZAB协议和 Paxos本质区别在于,两者的设计目标不太一样。 ZAB 协议主要用于构建一个高可用的分布式数椐主备系统,例如ZooKeeper, 而Paxos算法 则是用于构建一个分布式的一致性状态机系统,