zookeeper 中的 ZAB 协议
zookeeper 中的 ZAB 协议
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
ZooKeeper 中的 ZAB 协议
ZooKeeper 是一个分布式服务框架,主要用于解决分布式应用中的数据一致性问题。在 ZooKeeper 中,为了确保集群中的数据副本之间可以可靠地进行状态同步,采用了一种称作 ZAB(ZooKeeper Atomic Broadcast) 协议。
ZAB 协议介绍
ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种原子广播协议。它能够保证集群中所有副本之间数据的一致性,保证了客户端对 ZooKeeper 服务的每个修改操作都是原子的,有序的,且最终一致的。
ZAB 协议的工作原理
ZAB 协议主要包括两大部分:崩溃恢复和消息广播。
崩溃恢复
- 当 ZooKeeper 集群启动或 Leader 节点出现故障后重新选举出新的 Leader 时,ZAB 协议会进入崩溃恢复模式。
- 在此模式下,新的 Leader 会和 Follower 进行数据同步。Leader 只有在绝大多数 Follower 都与其数据状态一致之后,集群才会重新开始对外服务。
- 这个过程确保了即使在发生故障的情况下,集群数据也不会丢失,并且保持一致。
消息广播
- 在崩溃恢复过程完成后,ZAB 协议进入消息广播模式。
- 当客户端发送一个修改请求到 Leader,Leader 生成一个对应的提案并分配一个全局唯一的 ID,然后将这个提案发送给所有 Follower。
- Follower 收到提案后,将提案记录到磁盘并回复给 Leader 一个 ACK。
- 当 Leader 收到多数 Follower 的 ACK 后,它将发送一个提交消息给所有 Follower,然后这个操作才会被提交并对所有客户端可见。
ZAB 协议的特点
- 强一致性 :所有 ZooKeeper 的修改操作都是按照先后顺序执行,确保数据的一致性。
- 高可用性 :通过 Leader 选举和数据同步机制,即使在部分节点崩溃的情况下依然能够提供服务。
- 顺序保证 :每个更新都有一个全局唯一的 ID(zxid),确保所有操作都是有序的。
- 容错性 :只要超过半数的节点正常工作,整个 ZooKeeper 系统就能正常服务。
总的来说,ZAB 协议是 ZooKeeper 实现高效、可靠数据同步的核心机制,保证了 ZooKeeper 作为一个分布式协调服务的鲁棒性与效率。