概述

拜占庭将军问题(The Byzantine Generals Problem),它其实是莱斯利·兰伯特(Leslie Lamport)借拜占庭将军的故事展现了分布式共识问题,还探讨和论证了解决的办法。
它是分布式领域最复杂的一个容错模型,搞懂它,才能掌握分布式共识问题的解决思路,还能更深刻地理解常用的共识算法。

合纵伐秦举例

困境

各国军队分别驻扎在秦国边境的不同地方,所以军队之间只能通过信使互相联系,这时合纵长苏秦就面临了一个很严峻的问题:如何统一大家的作战计划?
具体的困境有如下

  • 一些诸侯国在暗通秦国,发送误导性的作战信息,怎么办?
  • 信使被敌人截杀,怎么办?
  • 信使被敌人间谍替换,该怎么办?

所以问题最关键就在于:**如何在有可能发生意外事件事情的情况下,采用合适的通讯机制,来达成共识,制定统一的作战计划?**

二忠一叛的难题

假设只有 3 个国家要攻打秦国,比如就齐、楚、燕。同时,又因为秦国很强大,所以只有半数以上的将军参与进攻,才能击败敌秦,在这个期间,将军们彼此之间需要通过信使传递消息,然后协商一致之后,才能在同一时间点发动进攻。
理想情况下,每个国家根据自己的实际选择【进攻】和【撤退】,并向其他两国发出自己的选择,然后按照少数服从多数的原则,这样就能做出一致性的决定。
可是,问题来了: **有国家暗通秦国
比如:齐向楚、 燕分别发送了“撤退”的消息,燕向齐和楚发送了“进攻”的消息。此时的情况是撤退:进攻 =1:1,无论楚投进攻还是撤退,都会成为 2:1,这个时候还是会形成一个一致性的作战方案。
但是:
楚这个叛徒在暗中配合秦国,让信使向齐发送了“撤退”,向燕发送了“进攻”,
那么:燕看到的是,撤退:进攻 =1:2; 齐看到的是,撤退:进攻 =2:1。
按照“少数服从多数”的原则,就会出现燕单独进攻秦军,被秦军给灭了,其他两国撤退了。**

解决办法一:口信消息型拜占庭问题之解