zookeeper 的 ZAB 协议
zookeeper 的 ZAB 协议
程序员朱永胜ZAB(ZooKeeper Atomic Broadcast)协议是 ZooKeeper 中用来保证分布式系统中数据一致性的核心协议。它是一种支持崩溃恢复的原子广播协议,主要用于保证 ZooKeeper 集群中各个副本之间的数据一致性。ZAB 协议有两个主要阶段:领导选举和消息广播。
领导选举(Leader Election):
- 当 ZooKeeper 集群启动或现任领导者崩溃时,需要进行领导选举。
- 所有参与者(服务器节点)会相互通信,选出一个新的领导者(Leader)。
- 领导者负责接收客户端的写请求,并将这些请求广播给其他跟随者(Followers)。
- 选举过程中使用逻辑时钟,选出具有最新事务日志的服务器作为领导者,以确保数据的最新状态。
消息广播(Atomic Broadcast):
- 领导者将客户端请求转换为事务提案(Proposal),并将这些提案广播给所有跟随者。
- 每个跟随者在接收到提案后,会将其写入到事务日志中,并发送确认(ACK)给领导者。
- 当领导者收到过半跟随者的确认后,会将提案提交(Commit),并通知所有跟随者提交该提案。
- 提交后,事务的变更会被应用到内存数据中,确保所有节点的数据一致性。
崩溃恢复 :
- 如果领导者崩溃,ZAB 协议能够通过重新选举新的领导者来恢复。
- 新的领导者会从事务日志中恢复状态,并继续处理未完成的事务。
ZAB 协议的设计目标是提供高可用性和强一致性,即使在部分节点出现故障的情况下,仍然能够保证整个系统的数据一致性和可用性。它与 Paxos 协议类似,但更适合于 ZooKeeper 的需求,尤其是在需要处理大量读操作的场景中。