打王者荣耀总是输?来了解下《拜占庭将军问题》怎么解决
什么是拜占庭将军问题?
拜占庭将军问题(Byzantine Generals Problem)
莱斯利·兰波特在其论文中描述了如下问题:
一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。
(以上出自维基百科)
举例场景:
1.吕布,刘备,赵云,韩信,典韦五位王者大将,准备一起去攻打大BOSS宫本武藏。
2.五位大将战力都只有20点,而大BOSS的战力有50点,两位将军前去只能是送死。
3.由于五路大军在BOSS的不同五个方向,至少同时三位将军进攻才能打败宫本武藏。
4.五位将军都带着自己的嫡系部队,各存私心,谁都不想自己队伍折损过多。
5.如果其中有一位将军叛变了!
安静扎寨,开始相互传递消息,约定进攻和撤退的时间。
这5位将军中,有1位叛徒,会有两种情况:
1> 其他4位将军信件,2进攻2撤退时,这个叛徒放出虚假消息:“撤退”。
得到2进攻3撤退的投票结果,最终撤退。
2> 如果4位将军投票,2进攻2撤退时,叛徒狡诈得很,两边骗。
对2位进攻的将军说“进攻”,对2位撤退的将军又说“撤退”。
2位进攻的将军以为:3进攻2撤退,最终进攻;
2位撤退的将军以为:3撤退2进攻,最终撤退。
最终内部混乱,很有可能只有两位将军参战,最终以失败告终。
我们有时候打王者是不是也是如此,说好的开团,最后却被一些队友抛弃了。
这就是著名的《拜占庭将军问题》
至少三名将军同去才能打败BOSS,
然而五位将军之中却出现了一名叛徒,
在中间假传消息,最终可能的结果就是:此役以失败告终。
不怕神一样的BOSS,就怕猪一样的队友。
这些将军离得很远,不能每遇到一个问题,就聚到一起开会商量对策,耽误时机,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商,达成共识,执行共同的作战计划,来取得战争的胜利?
拜占庭将军问题也叫拜占庭容错,是美国计算机科学家莱斯利·兰伯特在1982年发表论文提出来,既允许军中可能有叛徒,又要保证战争胜利,引申到计算机领域,成为一种容错理论。
直到2008中本聪发表了一篇名为《比特币:一种点对点式的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)的论文,这才彻底解决了这一问题。
一起温习下中本聪在比特币白皮书中的相关内容:
1、引入“工作量证明”机制(PoW),只有第一个完成规定计算工作的国家才能传播信息,从而保证一段时间内只有一个提案。
2、引入非对称加密算法,为信息传递提供签名技术支持,以保证消息传递的私密性,且不可抵赖、不可篡改。
于是5位将军组成了这样一个分布式网络:
1、每个将军都有一份实时与其他将领同步的消息账本。
2、账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪位将军。
3、尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。
在一个分布式的系统中,尽管有叛徒,叛徒可以做任意事情,比如不发声、发送虚假信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等。但是,只要大多数人是好人,就完全有可能去中心化地实现共识。
最后,在区块链技术的帮助下,
五位将军达成了共识,
一同前去打败了宫本武藏,揪出了叛徒,赢得了此次战役!