Featured image of post ZooKeeper 并没有直接采用 Paxos 算法

ZooKeeper 并没有直接采用 Paxos 算法

ZooKeeper 并没有直接采用 Paxos 算法,而是采用一种被称为 ZAB(ZooKeeper Ato

ZooKeeper 并没有直接采用 Paxos 算法,而是采用一种被称为 ZAB(ZooKeeper Atomic Broadcast)的一致性协议

Paxos 算法是基于消息传递的分布式一致性算法,很多大型的网络技术公司和开源框架都采用 Paxos 算法作为其各自的底层解决方案,比如 Chubby 、 Megastore 以及 MySQL Group Replication 。Paxos 算法运行在服务器发生宕机故障的时候,能够保证数据的完整性,不要求可靠的消息传递,可容忍消息丢失、延迟、乱序以及重复,保证服务的高可用性。

ZAB 协议并不像 Paxos 算法那样,一种通用的分布式一致性算法,而是一种特别为 ZooKeeper 设计的崩溃可恢复的原子消息广播算法

当 Leader 服务器不可用或者已经不存在过半服务器与该 Leader 服务器保持正常通信时,在重新开始新一轮的原子广播事务操作之前,ZAB 会进入恢复模式选举新的 Leader 服务器,使集群彼此达到一个一致的状态,从消息广播模式进入到崩溃恢复模式。当集群过半机器都与新的 Leader 服务器完成了状态同步操作后 ZAB 协议会退出恢复模式

两者相同之处是,在执行事务会话的处理中,两种算法最开始都需要一台服务器或者线程针对该会话,在集群中发起提案或是投票。只有当集群中的过半数服务器对该提案投票通过后,才能执行接下来的处理。

而 Paxos 算法与 ZAB 协议不同的是,Paxos 算法的发起者可以是一个或多个。当集群中的 Acceptor 服务器中的大多数可以执行会话请求后,提议者服务器只负责发送提交指令,事务的执行实际发生在 Acceptor 服务器。这与 ZooKeeper 服务器上事务的执行发生在 Leader 服务器上不同。Paxos 算法在数据同步阶段,是多台 Acceptor 服务器作为数据源同步给集群中的多台 Learner 服务器,而 ZooKeeper 则是单台 Leader 服务器作为数据源同步给集群中的其他角色服务器。

参考

位旅人路过 次翻阅 初次见面