分布式协议与算法实战
韩健
腾讯资深工程师
23193 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 31 讲
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

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

读操作访问备份节点的数据一致性
日志一致性
主备模式
类似ZAB协议
原子广播协议
主备模式
保证操作顺序性
无法实现操作顺序性
确定性
有限状态机
课堂思考
Raft算法
ZAB协议
Multi-Paxos
状态机
主题总结

该思维导图由 AI 生成,仅供参考

你好,我是韩健。
很多同学应该使用过 ZooKeeper,它是一个开源的分布式协调服务,比如你可以使用它进行配置管理、名字服务等等。在 ZooKeeper 中,数据是以节点的形式存储的。如果你要用 ZooKeeper 做配置管理,那么就需要在里面创建指定配置,假设创建节点"/geekbang"和"/geekbang/time",步骤如下:
[zk: localhost:2181(CONNECTED) 7] create /geekbang 123
Created /geekbang
[zk: localhost:2181(CONNECTED) 8] create /geekbang/time 456
Created /geekbang/time
我们分别创建了配置"/geekbang" 和"/geekbang/time",对应的值分别为 123 和 456。那么在这里我提个问题:你觉得在 ZooKeeper 中,能用兰伯特的 Multi-Paxos 实现各节点数据的共识和一致吗?
当然不行。因为兰伯特的 Multi-Paxos,虽然能保证达成共识后的值不再改变,但它不管关心达成共识的值是什么,也无法保证各值(也就是操作)的顺序性。这是为什么呢?这个问题是 ZAB 协议着力解决的,也是理解 ZAB 协议的关键。
不过,虽然大家都在提 ZAB 协议,但是在我看来,ZAB 协议和 ZooKeeper 代码耦合在一起,也就是说,你是无法单独使用 ZAB 协议的,所以一般而言,只需要理解 ZAB 协议的架构和基础原理就可以了,不需要对代码和细节做太多的深究。所以,我会从 ZAB 协议的最核心设计目标(如何实现操作的顺序性)出发,带你了解它的基础原理。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
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-16
    5
  • QQ怪
    我想问一下老师,为什么zab和raft有很多共同点,但为什么一个叫协议一个叫算法,这种叫法有什么区别吗?

    作者回复: 加一颗星:),我是这么理解的,与他们论文(《Zab: High-performance broadcast for primary-backup systems》和《In Search of an Understandable Consensus Algorithm》)的表达有关,协议是指系统如何运行的规则,比如RFC;而算法是指一组产生输出结果的指令,也就是说描述的如何解决一个问题的步骤,直观感受,描述更细节,可编程性更强,这点,我们在读这两篇论文时,也能感受到的。

    2020-04-22
    1
  • 文武
    老师你好,问下zab实现的一个细节;leader节点commit后,没有一个follower节点收到commit就挂了;那这个proposal会丢吗(我感觉会丢但是我看从paxos到zookeeper分布式一致性原理与实践还有网上说的都是只要有被commit的proposal都不会丢;如果不会丢的话想问下是如何实现的);还有就是说选举的时候找最大的ZXID时候,选的都是提交的吧

    作者回复: 加一颗星:),不会丢,“大多数”的提交原则和“大多数”的领导者选举原则,能确保新当选的领导者,一定包含committed的proposal,这也是为什么说,将proposal复制到大多数节点上了,proposal就处于committed状态,不会再丢失。

    2020-04-22
    1
  • 学到这里已经乱了,之前学过的东西当时理解了,现在已经忘了。 只有理论没有实践还是不行啊

    作者回复: 加一颗星:)。需要反复学的,理论和实战结合着学,比如,可以先玩玩19、20讲的程序,然后再看看理论,应该会有更多的新收获。

    2020-03-23
    1
  • snakorse
    感觉对multi-paxos顺序部分的分析是错的:B节点已经承诺过了不接受小于102的提案,他再提不应该是从103开始吗

    作者回复: 加一颗星:),为思考点赞。102是指令对应序号,后面的中括号中的1、2、3是提案编号。

    2020-03-22
    1
  • qinsi
    状态机是一种抽象表述,只要满足状态机特性的实体都可以叫状态机:处于相同状态的多个状态机,在执行了相同的输入序列后,到达的最终状态也是相同的。这个特性使得状态机之间可以很方便地同步状态。

    作者回复: 加一颗星:)

    2020-03-16
    1
  • 钟友兵
    Zookeeper不能使用Multi-paxos的解释太过于牵强,能否详细讲下?

    作者回复: 加一颗星:),感谢反馈,觉得哪里牵强呢?哪些点需要详细说说呢?

    2020-04-20
  • Allen
    按照现在的策略,读备份节点不能保证每次都是最新数据。但是,是否可以在这个基础上,再增加一个 Quorum NWR,因为写的时候,已经保证了大多数的一致性,只要读的时候,稍微做点改变,读多个副本,然后返回最新的数据,这样是否就可以保证读的一致性?

    作者回复: 加一颗星:),可以的,读“大多数节点”,能读取到最新数据。或者执行sync命令,然后再读,此时能读到同步后最新数据。

    2020-04-05
  • 88591
    访问备节点不能获取最新的数据。

    作者回复: 加一颗星:)

    2020-04-02
  • snakorse
    而且,multi-paxos会发生顺序不一致的前提是 客户端在第一次提案还没有最终确定结果前又连续发了第二条提案 如果客户端等待第一次提案结果确认之后,再发第二条提案,就没有顺序问题了吧

    作者回复: 加一颗星:),是可以解决这个问题,但性能非常低,在实际场景中难落地。

    2020-03-22
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部