Skip to content

描述一下 ZAB 协议

ZAB协议(Zookeeper Atomic Broadcast)是Zookeeper中用于实现分布式一致性的协议。该协议旨在确保分布式系统中的数据一致性和可靠性,并具有以下特点:

  1. 支持崩溃恢复:当Leader节点崩溃或因其他原因导致Leader缺失时,ZAB协议能够自动进入崩溃恢复模式。在崩溃恢复模式中,系统会重新选举一个新的Leader节点,并确保所有Follower节点的状态与新Leader保持一致,之后继续进行消息广播。
  2. 原子性保证:ZAB协议确保每个事务请求的原子性,即每个事务要么被所有节点成功执行,要么在所有节点上失败回滚,不会出现部分成功的情况。这是通过两阶段提交过程来实现的。
  3. 一致性保证:ZAB协议通过多副本同步和消息广播机制,确保集群中所有节点的数据副本在最终状态下是一致的。即使在Leader崩溃或网络分区等异常情况下,也能通过崩溃恢复机制来恢复一致性。

ZAB协议的执行过程包括三个阶段:

  1. 准备阶段(Prepare):Leader节点准备数据(即一个事务提案),并为其分配一个唯一的事务ID(zxid),然后通知所有Follower节点。
  2. 提议阶段(Proposal,有时也称为确认阶段,但这里用提议阶段更准确):Follower节点接收Leader发送的提案和zxid,将其写入本地日志,并准备自己所在的服务(如更新内存状态等)。然后,Follower节点回复一个确认消息(或称为Ack消息)给Leader节点,表示已经接收到并处理了该提案。注意,这里的“确认”是指Follower节点已经准备好处理该提案,而不是指提案已经被提交。
  3. 提交阶段(Commit,有时也称为广播阶段,但这里用提交阶段更准确,因为广播通常发生在准备和确认之后):在收到足够数量的Follower节点的确认消息后(通常是超过半数的Follower节点),Leader节点会广播一个提交消息(Commit消息)给所有的Follower节点。这表示该提案已经被大多数节点接受,并被正式提交到各自的内存树中执行。

如果在确认阶段(或提议阶段),Follower节点没有收到Leader节点的任何消息(包括提案和可能的超时通知),并且无法与Leader节点建立通信,那么这些Follower节点可能会认为Leader已经失效,并可能触发崩溃恢复模式。

然而,崩溃恢复模式通常不是由单个Follower节点单独触发的。实际上,ZooKeeper集群中的节点会通过一种称为“选举算法”的机制来共同决定何时进入崩溃恢复模式,并选举出一个新的Leader节点。

更新: 2024-10-18 16:45:54
原文: https://www.yuque.com/tulingzhouyu/db22bv/ce3q0d9387ohkimh