分布式协议与算法实战
韩健
腾讯资深工程师
立即订阅
5863 人已学习
课程目录
已完结 29 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧
免费
理论篇 (4讲)
01 | 拜占庭将军问题:有叛徒的情况下,如何才能达成共识?
02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度
03 | ACID理论:CAP的酸,追求一致性
04 | BASE理论:CAP的碱,追求可用性
协议和算法篇 (17讲)
05 | Paxos算法(一):如何在多个节点间确定某变量的值?
06 | Paxos算法(二):Multi-Paxos不是一个算法,而是统称
07 | Raft算法(一):如何选举领导者?
08 | Raft算法(二):如何复制日志?
09 | Raft算法(三):如何解决成员变更的问题?
10 | 一致哈希算法:如何分群,突破集群的“领导者”限制?
11 | Gossip协议:流言蜚语,原来也可以实现一致性
12 | Quorum NWR算法:想要灵活地自定义一致性,没问题!
13 | PBFT算法:有人作恶,如何达成共识?
加餐 | PBFT算法:如何替换作恶的领导者?
14 | PoW算法:有办法黑比特币吗?
15 | ZAB协议:如何实现操作的顺序性?
加餐 | ZAB协议(一):主节点崩溃了,怎么办?
加餐 | ZAB协议(二):如何从故障中恢复?
加餐 | ZAB协议(三):如何处理读写请求?
加餐 | MySQL XA是如何实现分布式事务的?
加餐 | TCC如何实现指令执行的原子性?
实战篇 (6讲)
16 | InfluxDB企业版一致性实现剖析:他山之石,可以攻玉
17 | Hashicorp Raft(一):如何跨过理论和代码之间的鸿沟?
18 | Hashicorp Raft(二):如何以“集群节点”为中心使用API?
加餐 | 拜占庭将军问题:如何基于签名消息实现作战计划的一致性?
19 | 基于Raft的分布式KV系统开发实战(一):如何设计架构?
20 | 基于Raft的分布式KV系统开发实战(二):如何实现代码?
结束语 (1讲)
结束语 | 静下心来,享受技术的乐趣
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 拜占庭将军问题:如何基于签名消息实现作战计划的一致性?

韩健 2020-03-25
你好,我是韩健。
现在,课程更新了一大半,我也一直关注着留言区的问题,我发现很多同学还是对一些知识有一些误区,再三考虑之后,决定利用今天这节课,先解决留言区提到的一个比较多的问题:如何基于签名消息实现作战计划的一致性?
除此之外,在论文学习中,很多同学遇到的共性问题比较多(比如 ZAB 协议的细节,后面我会补充几讲),在这里,我十分感谢你提出了这样宝贵的意见,不同的声音会帮助我不断优化课程。
所以,在课程结束之后,我会再从头梳理一遍,按照关注点通过更多的加餐不断优化内容,把相关的理论和算法的内容展开,帮你彻底吃透相关的内容。
说回咱们的拜占庭将军问题。在01 讲中,为了不啰嗦,让你举一反三地学习,我对签名消息型拜占庭问题之解,没有详细展开,而是聚焦在最核心的点“签名约束了叛徒的作恶行为”,但从留言来看,很多同学在理解签名和如何实现作战一致性上,还是遇到了问题。比如不理解如何实现作战计划的一致性。
另外,考虑到签名消息是一些常用的拜占庭容错算法(比如 PBFT)的实现基础,很重要,所以这节课我会对签名消息型拜占庭问题之解进行补充。在今天的内容中,除了具体讲解如何基于签名消息实现作战计划的一致性之外,我还会说一说什么是签名消息。希望在帮你掌握签名消息型拜占庭问题之解的同时,还帮你吃透相关的基础知识。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式协议与算法实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(7)

  • 安排
    除了第一、二轮的指挥官外,剩余的 2 位将军将分别作为指挥官,在上一轮收到的作战指令上,加上自己的签名,并转发给其他将军。

    第一二轮不是所有人都当过指挥官了吗?为什么还会有剩余的两位将军呢?

    作者回复: 加一颗星:),执行多少轮,不是由“是否当过指挥官”决定的,而是叛将数m决定的,也就是m个叛将,需要执行m +1轮。另外,论文中的“指挥官”和“副官”,是辅助大家理解的。

    2020-03-25
    2
    3
  • 羽翼1982
    每位副官,将从指挥官处收到的新的作战指令(也就与之前收的作战指令不同),按照顺序(比如按照首字母字典排序)放到一个盒子里。
    ----------------------------------
    这个排序的方法感觉不是说的很清楚,是按照命令本省的字面量(进攻 / 撤退这两个文字)的字典序进行排序吗?
    在上面的2忠2叛问题中,1名武将会收到 1+2+2=5条消息,这些消息如何排序,麻烦用例子说明的清晰些

    作者回复: 加一颗星:),问题1,是的;问题2,需要排序的是指令,而不是消息。可以这么理解,最终所有忠诚的将军都会收到完全相同的作战指令集合,如果把这些指令按照一定的顺序进行排序,再约定执行某个位置的指令,就能保证忠将们执行一致的作战指令了。

    2020-03-25
    2
  • 宁悦
    第三轮的消息是不是这样,
                for 指挥官 in(齐,楚,燕)
                       指挥官,发送消息
                    for x in(楚燕,齐燕,楚燕)
                        x 发送消息 //这里的x是两个
    不知道这样理解对不对
    2020-06-01
  • 念念碎的碎碎念
    如果第三轮,叛徒燕将接收到的作战信息,附加上自己的签名,并转发给另外两位,是发送第一轮的苏燕,还是第二轮的苏齐燕,苏齐楚呢
    这地方还是有点不明白,请老师和各位指点迷津

    作者回复: 加一颗星:),加上自己的签名,转发上一轮收到的作战指令,也就是第二轮的,也就是说,发送<进攻:苏秦、齐、燕>给楚,发送<进攻:苏秦、楚、燕>给齐。

    2020-05-07
  • 东尘西土
    除去第一轮,剩下的m轮中如果收到的指令不是相同的指令,那该如何去通知剩下的n-2人呢?

    作者回复: 这个问题没看明白,能否举个具体的示例?咱们聊聊呢:)

    2020-03-28
    1
  • 一只苦逼
    打卡

    作者回复: 加油!多交流:)。

    2020-03-26
  • Geek_8af153
    在楚发起的两忠两叛案例中,苏秦的盒子的第一个指令不是进攻吗?为什么变成撤退了?

    作者回复: 盒子的指令要排序的,比如字典排序,因为C在J前面,所以,“撤退”排在了“进攻”前面。

    2020-03-26
    1
收起评论
7
返回
顶部