15 | ZAB协议:如何实现操作的顺序性?

该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结

ZAB协议是如何保证操作的顺序性的?本文从ZooKeeper中的数据存储节点、Multi-Paxos无法实现操作顺序性的问题入手,详细介绍了ZAB协议的基础原理。相比于Multi-Paxos的共识算法,ZAB采用主备模式的原子广播协议,通过主节点向备份节点同步数据,实现了操作的顺序性。文章还对状态机的概念进行了解释,并指出共识算法需要状态机来处理一系列请求。通过对比Multi-Paxos和Raft算法,读者可以更好地理解ZAB协议。文章内容深入浅出,为读者提供了对ZAB协议的全面了解。 ZAB协议通过主备模式和FIFO队列保证操作的顺序性,确保后续操作不会比当前操作先执行。此外,ZAB还实现了当主节点崩溃后,只有日志最完备的节点才能当选主节点,从而保证提交的日志不会再改变。与Raft算法相似,ZAB采用强领导者模型和严格按顺序提交日志来实现操作的顺序性。文章还提到了ZAB协议对后续共识算法的影响,以及与Raft算法的相似之处。 总的来说,本文深入探讨了状态机、Multi-Paxos无法实现操作顺序性的问题,以及ZAB协议如何保证操作的顺序性。读者可以从中明确了状态机的特点和ZAB协议的实现原理。文章还提出了课堂思考问题,引发读者思考备份节点读操作是否能保证每次都读到最新数据的问题。整体而言,本文内容丰富,对ZAB协议进行了全面解析,对读者具有较高的参考价值。
《分布式协议与算法实战》,新⼈⾸单¥59
全部留言(17)
- 最新
- 精选
- 猿人谷如果读操作访问的是备份节点,是不能保证每次都能实时的读到最新数据的。但Zookeeper 保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。
作者回复: 加一颗星:)
2020-03-165 - QQ怪我想问一下老师,为什么zab和raft有很多共同点,但为什么一个叫协议一个叫算法,这种叫法有什么区别吗?
作者回复: 加一颗星:),我是这么理解的,与他们论文(《Zab: High-performance broadcast for primary-backup systems》和《In Search of an Understandable Consensus Algorithm》)的表达有关,协议是指系统如何运行的规则,比如RFC;而算法是指一组产生输出结果的指令,也就是说描述的如何解决一个问题的步骤,直观感受,描述更细节,可编程性更强,这点,我们在读这两篇论文时,也能感受到的。
2020-04-221 - 文武老师你好,问下zab实现的一个细节;leader节点commit后,没有一个follower节点收到commit就挂了;那这个proposal会丢吗(我感觉会丢但是我看从paxos到zookeeper分布式一致性原理与实践还有网上说的都是只要有被commit的proposal都不会丢;如果不会丢的话想问下是如何实现的);还有就是说选举的时候找最大的ZXID时候,选的都是提交的吧
作者回复: 加一颗星:),不会丢,“大多数”的提交原则和“大多数”的领导者选举原则,能确保新当选的领导者,一定包含committed的proposal,这也是为什么说,将proposal复制到大多数节点上了,proposal就处于committed状态,不会再丢失。
2020-04-221 - 奕学到这里已经乱了,之前学过的东西当时理解了,现在已经忘了。 只有理论没有实践还是不行啊
作者回复: 加一颗星:)。需要反复学的,理论和实战结合着学,比如,可以先玩玩19、20讲的程序,然后再看看理论,应该会有更多的新收获。
2020-03-231 - snakorse感觉对multi-paxos顺序部分的分析是错的:B节点已经承诺过了不接受小于102的提案,他再提不应该是从103开始吗
作者回复: 加一颗星:),为思考点赞。102是指令对应序号,后面的中括号中的1、2、3是提案编号。
2020-03-221 - qinsi状态机是一种抽象表述,只要满足状态机特性的实体都可以叫状态机:处于相同状态的多个状态机,在执行了相同的输入序列后,到达的最终状态也是相同的。这个特性使得状态机之间可以很方便地同步状态。
作者回复: 加一颗星:)
2020-03-161 - 钟友兵Zookeeper不能使用Multi-paxos的解释太过于牵强,能否详细讲下?
作者回复: 加一颗星:),感谢反馈,觉得哪里牵强呢?哪些点需要详细说说呢?
2020-04-20 - Allen按照现在的策略,读备份节点不能保证每次都是最新数据。但是,是否可以在这个基础上,再增加一个 Quorum NWR,因为写的时候,已经保证了大多数的一致性,只要读的时候,稍微做点改变,读多个副本,然后返回最新的数据,这样是否就可以保证读的一致性?
作者回复: 加一颗星:),可以的,读“大多数节点”,能读取到最新数据。或者执行sync命令,然后再读,此时能读到同步后最新数据。
2020-04-05 - 88591访问备节点不能获取最新的数据。
作者回复: 加一颗星:)
2020-04-02 - snakorse而且,multi-paxos会发生顺序不一致的前提是 客户端在第一次提案还没有最终确定结果前又连续发了第二条提案 如果客户端等待第一次提案结果确认之后,再发第二条提案,就没有顺序问题了吧
作者回复: 加一颗星:),是可以解决这个问题,但性能非常低,在实际场景中难落地。
2020-03-22