拜占庭将军问题(The Byzantine Generals Problem),其实是借拜占庭将军的故事展现了分布式共识问题,还探讨和论证了解决的办法。实际上,它是分布式领域最复杂的一个容错模型,一旦搞懂它,你就能掌握分布式共识问题的解决思路,还能更深刻地理解常用的共识算法,在设计分布式系统的时候,也能根据场景特点选择适合的算法,或者设计适合的算法了。

以六国抗秦重讲拜占庭算法

六国抗秦的困境

在现实情况中可能存在诸侯国暗通秦国,发送误导性作战信息、信使被截杀、信使被间谍替换的情况。在网络世界中存在节点崩溃、网络故障、丢包(以上是非拜占庭错误)和不遵循协议规则的,如验证器可以延迟或拒绝中继网络中的消息、领导者可以提出无效块、被中间人攻击、攻击者在恶意伪造信息或者节点可以向不同的对等体发送不同的消息甚至恶意节点之间相互协作制造错误(以上是拜占庭错误)在以上情况中如果达成共识?

二忠一叛难题

先假设齐、楚、燕3个国家攻打秦国,假设只有半数以上的将军参与进攻才能击败敌人,在这个期间,将军们彼此之间需要通过信使传递消息,然后协商一致之后,才能在同一时间点发动进攻。
正常情况下:

  • 齐国根据侦察信息,决定撤退
  • 楚和燕根据侦察信息,决定进攻

根据规则,应该三支军队一块进攻。但假设燕国叛变,向齐国发送撤退消息,向楚国发送进攻消息,自己撤退。最终按照规则也能达成一致性作战方案,但最终楚国落入虎口。

拜占庭算法

口信消息型拜占庭问题之解

首先,通过数学证明不借助其他技术手段三个将军无法解决上述问题,需要多引进一个诚实将军,变成4位将军进行作战讨论。同时,4位将军约定默认命令为撤退,需要经过两轮协商

第一轮:

  • 先发送作战信息的将军作为指挥官,其他的将军作为副官;
  • 指挥官将他的作战信息发送给每位副官;
  • 每位副官,将从指挥官处收到的作战信息,作为他的作战指令。如果没有收到作战信息,将把默认的“撤退”作为作战指令;

第二轮

  • 除了第一轮的指挥官外,剩余的 3 位将军将分别作为指挥官,向另外 2 位将军发送作战信息;
  • 然后,这 3 位将军按照“少数服从多数”,执行收到的作战指令。

总结

如果叛将人数为 m,将军人数不能少于 3m + 1 ,那么拜占庭将军问题就能解决了。

这个算法有个前提,也就是叛将人数 m,或者说能容忍的叛将数 m,是已知的。在这个算法中,叛将数 m 决定递归循环的次数(也就是说,叛将数 m 决定将军们要进行多少轮作战信息协商),即 m+1 轮(所以,你看,只有楚是叛变的,那么就进行了两轮)。你也可以从另外一个角度理解:n 位将军,最多能容忍 (n - 1) / 3 位叛将。

签名消息型拜占庭问题之解

还可以通过签名的方式,在不增加将军人数的情况下,解决二忠一叛的难题。首先,作战指挥官要通过印章、虎符等信物,实现这样几个特性:

  • 忠诚将军的签名无法伪造,而且对他签名消息的内容进行任何更改都会被发现;
  • 任何人都能验证将军签名的真伪。

在互联网中数字证书具有以上特性。这时,任何人修改信息都可以看到,通过签名机制约束叛将的叛变行为,任何叛变行为都会被发现,也就会实现无论有多少忠诚的将军和多少叛将,忠诚的将军们总能达成一致的作战计划。

分布式协议与算法实战——拜占庭将军问题:有叛徒的情况下,如何才能达成共识?(笔记)相关推荐

  1. 《分布式协议与算法实战》——专栏笔记

    拜占庭将军问题--初探 问题描述 下面以"苏秦困境"来了解拜占庭将军问题,便于牢记. 战国时期,齐.楚.燕.韩.赵.魏.秦七雄并立,后来秦国的势力不断强大起来,成了东方六国的共同威 ...

  2. RTSP协议视频智能分析平台EasyNVR在编码格式不同的情况下会导致视频无法播放吗?

    RTSP协议的视频智能分析平台EasyNVR内接入的视频通道可以通过平台进行网页直播,并且支持市面上大部分的RTSP/Onvif协议设备:IP Camera/NVR/DVR/编码器等,直播便捷稳定,是 ...

  3. 拜占庭将军问题OM算法详解(m=1,m=2)

    拜占庭将军问题OM算法介绍 网上关于拜占庭将军问题的讨论有很多了,但是关于OM算法的讨论,并没有太深入,网上能看到比较多m=1的情况,对于m>1的情况,并没有过多的介绍. 本人在一开始,对m=2 ...

  4. 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos

    五篇分布式共识系列文章合集: 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT.PoW.PoS.DPos 分布式共识算法(故障容错算法)系列整理(二):Bully.Gossip.NWR 分布式共 ...

  5. 分布式系统–拜占庭将军问题(The Byzantine Generals Problem)

    本文档作为分布式系统的学习基础,通过拜占庭问题取尝试先了解分布式系统里面可能存在的基础问题.拜占庭将军问题,主要为了解决在已知有成员不可靠的情况下,其余忠诚的将军需要在不受叛徒或间谍的影响下达成一致的 ...

  6. 拜占庭将军问题(一)—— 引言与结论

    拜占庭将军问题(The Byzantine Generals Problem)是Leslie Lamport在其同名的论文1提出的一种针对分布式对等网络中的容错问题. 一个可靠的计算机系统需要能够处理 ...

  7. 图解分布式一致性协议 Paxos 算法【BAT 面试题宝库附详尽答案解析】

    0. 问题场景 1.Paxos 简介 Paxos is a family of protocols for solving consensus in a network of unreliable p ...

  8. 分布式 | 拜占庭将军问题

    简介 纵所周知分布式系统存在各种的问题, 比如机器宕机.网络异常.消息丢失.消息乱序.数据错误.不可靠的TCP.存储数据丢失等故障行为 . 而著名的拜占庭将军问题则描述的了一个最困难的,也是最复杂的一 ...

  9. 【笔记】拜占庭将军问题与共识算法

    一.拜占庭将军问题 1.概念.实质与条件   拜占庭将军问题的核心:军中可能有叛徒,军队保证进攻一致性的同时,又要避免军中叛徒的破坏. 在拜占庭将军问题中,将军们必须有一个预定的方法,使所有忠诚的将军 ...

最新文章

  1. 机器学习数据不平衡不均衡处理之SMOTE算法实现
  2. Silverlight WCF RIA服务(三十四)身份验证、角色、个性化 5
  3. 【转】JDBC为什么要使用PreparedStatement而不是Statement
  4. 一台服务器上起2个mysql服务
  5. ITK:使用Deformation Field扭曲图像
  6. CSS的display:none与visible:hidden区别
  7. 非线性常微分方程组 matlab,matlab常微分方程和常微分方程组求解.doc
  8. Linux Ubuntu16.04界面美化
  9. Linux编程(10)_进程通信
  10. python基础--字符串单引号双引号和三引号
  11. 2021-2025年中国电动门锁行业市场供需与战略研究报告
  12. vue filters使用
  13. (转)高效的MySQL分页
  14. php 如何滑动,php 滑动门切换代码示例
  15. 分布式系统的基本特征
  16. 高效记忆/形象记忆(07)110数字编码表 11-20
  17. vulhub nginx insecure-configuration
  18. 眼光独到便能发现刷脸支付带来的商机
  19. python greedy 加油次数
  20. 无法解析服务器的dns地址

热门文章

  1. linux下paste、diff、meld的使用
  2. 京东吞下一号店之后,网易成中国电商最大变量?
  3. 计算机vb知识点,2020年全国计算机二级VB复习知识点:常用内部函数
  4. html裁剪字体代码,CSS控制文字换行、裁剪
  5. 王小波文集 工作与人生
  6. 教你用软件制作自己的系统主题包
  7. 机器人辅助符文天赋符文天赋_2020机器人符文出装 s10机器人辅助出装天赋推荐...
  8. 负数转换为无符号数据类型的理解及应用
  9. 泡脚最补肾,时间有讲究。手脚凉的人必看
  10. PPA 完全指南,如何在 Ubuntu 系统中使用 PPA