关于拜占庭问题几点理解

  • 简介
  • 两将军问题
  • 问题解决
    • 前提条件
    • 角色行为描述
    • 理解分析
      • 为什么要符合N >= 3F + 1
      • 符合N >= 3F + 1条件的分析理解
  • 问题延伸

简介

拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利(来自于百度)
总结来说解决拜占庭问题就是为了解决一致性(共识)的问题

两将军问题

拜占庭问题出现之前就存在两将军问题,大体描述就是两位将军要通过信使来沟通最后达成进攻或撤退的约定,但是存在信使迷路或者被敌军捕获(消息丢失,消息伪造),如何达成一致?根据FLP不可能理论,该问题无通用解。

问题解决

前提条件

根据两将军问题的描述可知,当将军数量为2时无法达成一致性,所以要判断将军中哪一个为叛将对于将军的数量以及叛将的数量有严格要求吗,设将军总量为N,叛将总量为F,那么仅当只有N >= 3F + 1时问题可得解,共识才能达成。

角色行为描述

1.提案人
提案人理解为leader,向其他将军发送指令。提案人发送的指令作为最终验证结果。
2.将军(包括忠将叛将)
理解为replica即副本,接收提案人发送的指令,并反馈leader该指令
3.叛将
理解为恶意节点,主要是为了扰乱决策,在leader发送指令后,紧接着叛将会向除leader外的所有节点发送扰乱指令
4.忠将
理解为善意节点。忠将会有以下行为,此处应分类讨论:
leader为忠将:首先每个replica会向leader反馈leader发送指令,然后每个follower会向叛将follower反馈叛将发送的指令,最后向其他replica发送leader指令。此处应注意消息发送的顺序:提案人->叛将->忠将。
leader为叛将:每个replica会向leader反馈leader发送的指令,并向其他replica发送leader指令。此处的发送顺序为:提案人->忠将
另外每个角色不会向自己发送消息。

理解分析

为什么要符合N >= 3F + 1

此处简化模型,取N = 3F,设F =1,则N=3。三个角色分别为A,B,C。A为提案者。
分类讨论:
1.设提案者(A)为忠将(前置条件,并非结论)分别向B和C发送进攻指令,B为叛将,C为忠将,0为进攻指令,1位撤退指令。则信息发送的顺序为:A->B->C。根绝上述角色的行为下面以画图示意(发送消息横向看,接收消息纵向看):
由此图可得:B接收到的指令为(0,1),C接收到的指令为(0,1)。根据假设条件和B、C接收到的指令分析:
0 1
&
0 1
————
0 1
(0,1) != (0,0)。此结论只能证明B和C其中有一个叛将,但是具体哪一位是叛将无法得到。
无法得到结论B或者C为叛将。
2.设提案者(A)为叛将(前置条件,并非结论)分别向B发送了进攻指令向C发送了撤退指令,0为进攻指令,1为撤退指令。如图示意:
由此图可得:B接收到的指令为(0,1),C接收到的指令为(1,0)。同理
0 1
&
1 0
————
0 0
得到的结果(0,0) != (0,1) 得到A为叛将。得解。
结合1,2的结论可得无论A提案人是否为叛将,最后的结论总是指向A为叛将。可得:当N < 3F + 1时无法得到叛将节点。

符合N >= 3F + 1条件的分析理解

同样的,简化模型。设F = 1,则N = 4。意思就是叛将数目为1,将军总数为4。假设有四个将军分别是A、B、C、D,A为提案者。
同样的分类讨论为:
1.A(提案者)为忠将(前置条件,并非结论),B,C,D其中有一个是叛将,假设C为叛将,根据角色行为可得下图:
由上图可知:B的接收到的指令为(0,1,0),C的接收到的指令为(0,1,1),D接收到的指令为(0,0,1)
计算分析:
B & C
0 1 0
&
0 1 1
————
0 1 0
(0,1,0) != (0,0,0)可得B和C其中一个为叛将
C & D
0 1 1
&
0 0 1
————
0 0 1
(0,0,1) != (0,0,0)可得C和D其中有一个叛将
此时已经得到C为叛将。
那么试着B & D
0 1 0
&
0 0 1
————
0 0 0
(0,0,0) == (0,0,0) 可得B和D为忠将,进一步判断出C为叛将
综上所述:当A(提案者为忠将时),C为叛将
2.设A(提案者)为叛将(前置条件,并非结论),B,C,D为忠将,A分别向B发送了撤退指令(1),向C发送了进攻指令(0),向D发送了撤退指令(1)。根据角色的行为可得下图:
由上图可得B接收到的指令为(1,0,1),C接收到的指令为(0,1,1),D接收到的指令为(1,1,0)
计算可知:
B & C
1 0 1
&
0 1 1
————
0 0 1
(0,0,1) != (1,0,1) 可得B和C其中有一个叛将
C & D
0 1 1
&
1 1 0
————
0 1 0
(0,1,0) != (1,0,1)可得C和D其中有一个叛将
B & D
1 0 1
&
1 1 0
————
1 0 0
(1,0,0) != (1,0,1)可得B和D其中有一个叛将
综上所述B、C、D都是叛将,明显不符合叛将数目为1这个条件,可知B、C、D为忠将,A为叛将。
由1,2可知当符合N >= 3F + 1时才能得到叛将。
综上所述:当叛徒不超过1/3时,总会有有效的算法让忠诚的将军之间达成共识,当叛徒超过1/3时,则无法保证忠将一定能达成一致性。

问题延伸

针对拜占庭问题,有拜占庭问题的容错算法(PBFT)来解决这一问题,大致要通过下面三个阶段来达成共识:Pre-Prepare,Prepare,Commit。该算法主要是为了解决网络通信可靠,如果有一个节点宕机了,其它节点能够达成一致。
在分布式系统中有普通容错和拜占庭容错,普通容错容忍不超过一半的故障节点,拜占庭容错容忍不超过1/3的故障节点。

拜占庭将军问题的几点理解相关推荐

  1. 如何理解拜占庭将军问题

    拜占庭问题 拜占庭问题最早由 Leslie Lamport 等学者于 1982 年在论文<The Byzantine Generals Problem>中正式提出,是用来解释异步系统中共识 ...

  2. 易理解的拜占庭将军问题——深入剖析

    1.背景 1.1 场景描述 拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人.这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击.基于一些原因,这10支军队不能集合 ...

  3. 如何理解拜占庭将军问题?

    11位拜占庭将军去打仗, 他们各自有权力观测敌情并作出判断, 进攻或撤退, 那么怎么让他们只用传令兵达成一致呢? 一种很符合直觉的方法就是投票, 每位将军作出决定后都将结果"广播" ...

  4. 什么是拜占庭将军问题

    接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢? 什么是拜占庭将军问题 也被称为"拜占庭容错" ...

  5. 拜占庭将军问题与中本聪

    拜占庭将军问题很多人可能听过,但不知道是什么意思,本文从非专业的角度来讲讲,拜占庭将军问题到底是说什么的. 拜占庭将军问题(Byzantine Generals Problem),首先由Leslie ...

  6. 分布式系统概念 | 一致性协议:拜占庭将军问题、Paxos、Raft

    文章目录 拜占庭将军问题 Paxos 问题描述 执行过程 Prepare阶段 Accept阶段 Learner获取提案 活锁问题 Raft 状态机 执行流程 主节点选举 数据同步 拜占庭将军问题 拜占 ...

  7. 这怕是我看过的最好的关于 “ 拜占庭将军问题 ” 的文章

    虽然在之前的博客中,我也有写过类似的,拜占庭将军问题.但是,个人认为这是我看过介绍的最好的.推荐给你们! 拜占庭将军问题(The Byzantine Generals Problem)提供了对分布式共 ...

  8. 漫画:什么是拜占庭将军问题

    转载自 漫画:什么是拜占庭将军问题 什么是拜占庭将军问题? 在很久很久以前,拜占庭是东罗马帝国的首都.那个时候罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信使传递消息. ...

  9. 拜占庭将军问题深入探讨

    了解过比特币和区块链的人,多少都听说过拜占庭将军问题,或听说过比特币(或区块链)的一个重要成就正是解决了拜占庭将军问题.但真正明白这个问题的人并不多,甚至知道这个问题实质的人都很罕见.本文是一篇技术科 ...

最新文章

  1. ubuntu下Tomcat7的安装和配置
  2. 系统架构师-基础到企业应用架构-企业应用架构
  3. tableau显示正在将数据发送到服务器,升级 Tableau Server 之后无法打开以发布的数据源形式发布的数据提取...
  4. 中国江苏省动漫产业发展导向及运营前景规划咨询报告2021-2027年
  5. python自动生成坐标脚本_用一个简单的python脚本从经纬度坐标获得高程
  6. 运行js提示库没有注册错误8002801d的解决办法
  7. [译] 五个小技巧让你写出更好的 JavaScript 条件语句
  8. 几款好用的滤波器设计软件
  9. 淘宝主营类目占比对店铺有哪些影响
  10. 十年存储路,宏杉科技再创新“高”
  11. 如何将视频生成M3U8文件格式?
  12. stm32 usb 虚拟串口驱动 - win7 64位安装
  13. 魂斗罗进化革命+塞班JAVA版_魂斗罗进化革命电脑版
  14. js 对象中,可枚举性(enumerable)是什么?
  15. 7-11 输出大写英文字母 (15 分)
  16. IDEA映射文件去掉黄色和绿色背景
  17. 微型计算机的i3或i5一般指的是,英特尔i3、i5、i7分别相当于骁龙哪个层次的处理器?...
  18. lenovo thinkpad t460s trackpiont小红点移动速度调整
  19. 华为机试—拼音翻译成阿拉伯数字(有Wan,Qian,Bai,Shi单位)
  20. 高通平台 lcd driver 调试小结

热门文章

  1. 比特小鹿:机构加入,加速矿业专业化和全球化 | FBEC2020 特别策划
  2. 效率源希捷7200.10硬盘F级修复教程
  3. 白社会VS开心-对比评测
  4. FPGA之道(81)静态时序分析(七)根据时序报告修改设计(基于ISE的UCF文件语法)
  5. 和ESP8266 Arduino谈场恋爱 01 一条具有中国特色的开发环境安装道路
  6. 基于FME实现的地理数据库批量建库的解决方案,支持gdb、mdb、shapefile等数据格式,gdb批量建库,mdb批量建库,shp批量建库,shapefile批量建库,地理数据批量建库
  7. 我的漫漫程序人生路(中)
  8. R语言paste()函数的使用
  9. 风变人生设计:精准定位职业方向,轻松做出职业规划
  10. Frontiers出版社3月在检SCIESSCI期刊目录出炉