第313章 拜占庭容错算法(1/2)

第313章 拜占庭容错算法

蔡志远继续解释道:

“比如,现在一共有五名將军,其中两名將军认为应该进攻,而另外两名將军认为应该撤退。

“这时候,第五名將军是个叛徒,他告诉进攻的將军『我也会进攻』,又告诉撤退的將军『我也会撤退』。

“於是,想要进攻的將军认为,现在有三支军队同意进攻,超过了半数,所以明天应该进攻。

“而想要撤退的將军认为明天应该撤退。

“最后的结果,就是两个將军进攻,两个將军撤退,导致战爭失败。

“这就是『去中心化』所带来的问题,因为这五个將军都是平级的,没有一个拥有绝对权限的指挥者,所以在互相商量策略的过程中,就会產生这样的问题。”

郑杰恍然点头:“原来如此!那这个办法怎么解决呢?也没办法验证具体是哪个將军在说谎吧?”

蔡志远解释道:“其实要解决这个问题很简单:多问几遍就行了。

“假设我是其中一名將军a,而將军b告诉我他要和我一起进攻。

“如果我信了,那就有可能会被骗,因为將军b有可能是叛徒,他可能只跟我说了进攻,跟別人说了撤退。

“所以,这时候我应该再去问將军c,我问他:『將军b跟你说的是进攻还是撤退?』

“然后我再去挨个问其他所有的將军,匯总將军b给他们说的所有信息。

“其他將军告诉我的『將军b给他们的信息』也不一定真实,因为其他將军里面可能也有叛徒,可能存在『將军b跟他们说进攻,他们却告诉我將军b说了撤退』这种情况。

“所以,我挨个问一遍『將军b对你们说了什么』,如果『进攻』比较多,那我就把將军b的意见记为『进攻』;

“然后再挨个问一遍『將军c对你们说了什么』,如果『撤退』比较多,那我就把將军c的意见记为『撤退』。

“就这样,我通过反覆套娃的方式,不断地排除少数派答案,最后得出的结论,就是更准確的『多数派答案』。

“在满足『拜占庭容错』的情况下,我们强制要求所有將军都遵守这一套策略,並且必须坚决执行最终的结论。

“那我们就可以確保大家一起进攻或者一起撤退。”

郑杰有些困惑:“在满足『拜占庭容错』的情况下?也就是蔡哥你之前说过的,叛徒人数必须少於三分之一?”

蔡志远点了点头:“是的。

“我们用3名將军的情况来举个例子:

“假设3名將军里面,將军c是叛徒,故意传递错误的信息。

“將军a会首先向將军b和c说『进攻』。

“但是將军b接到命令之后无法確认將军a是不是叛徒,所以他要先问將军c,『將军a给你的命令是什么』,而將军c是叛徒,所以会故意说『將军a给我的命令是撤退』。

“因为只有三个將军,所以將军b就无法判断將军a和將军c到底哪个是叛徒,因为『进攻』和『撤退』的命令各一票,无法形成多数。

“同理,將军b在执行这个策略的时候,也没法判断將军a和將军c哪个是叛徒。

“这是最简单的一种情况,如果將军的数量变多,比如同时有7个將军,其中有2个是叛徒的话,情况会变得复杂很多,要套娃很多次才能最终得到结论。

“所以我才说,这种问题不需要自己真的推算,只要记住结论就行了。

“结论就是,当叛徒人数达到三分之一或者更多时,这个问题就不可解。

“反过来说,想要让这个问题可解,就要把叛徒人数控制在少於三分之一的情况。

“套一下三个房间的人数,就一目了然了。

本章未完,点击下一页继续阅读。