返回
Zookeeper 源码剖析: Zab 协议
见解分享
2023-11-16 22:39:58
Zookeeper 源码剖析: Zab 协议
Zookeeper 系列的最后一篇博客了。主要分析在分布式环境下,不同节点的数据的同步问题。
在阅读本文前,先假设群首选举已经完成。
Zab 共识协议
这个协议比较简单,类似于一个两阶段提交 2PC 的事务实现。
-
Leader 节点收到 COMMIT 操作后,对 提案 执行事务的提交操作。一旦 提案 被提交,Leader 将其标记为 已提交 状态。
-
Leader 将 提案 广播给所有 Follower 节点。
-
Follower 节点收到 提案 后,将其标记为 准备提交 状态。
-
一旦大多数 Follower 节点都处于 准备提交 状态,Leader 将 提案 标记为 已提交 状态,并将此消息广播给所有 Follower 节点。
-
Follower 节点收到 已提交 消息后,将其标记为 已提交 状态,并将其应用到本地数据库。
Zab 协议的优点
- 简单易懂 :Zab 协议的实现非常简单,易于理解和实现。
- 高性能 :Zab 协议的性能非常高,可以处理大量的数据同步请求。
- 高可用 :Zab 协议具有很高的可用性,即使 Leader 节点出现故障,也可以快速选举出新的 Leader 节点,并继续提供服务。
Zab 协议的缺点
- 单点故障 :Zab 协议存在单点故障问题,如果 Leader 节点出现故障,那么整个集群将无法正常工作。
- 数据一致性 :Zab 协议无法保证数据的一致性,如果在 Leader 节点提交 提案 后,Leader 节点出现故障,那么该 提案 可能不会被所有 Follower 节点提交。
总结
Zab 协议是一种简单、高效、高可用的共识协议,被广泛用于分布式系统中。然而,Zab 协议也存在一些缺点,例如单点故障和数据一致性问题。
在实际应用中,可以根据具体的需求来选择是否使用 Zab 协议。
参考文献 :