淺談拜占庭將軍問題

買賣虛擬貨幣

瞭解過比特幣和區塊鏈的人,多少都聽說過拜占庭將軍問題,今天要分享的就是拜占庭共識的問題。

拜占庭將軍問題是什麼

拜占庭將軍問題是一個共識問題,首先由Leslie Lamport與另外兩人在1982年提出,被稱為The Byzantine Generals Problem或者Byzantine Failure。核心描述是軍中可能有叛徒,卻要保證進攻一致,由此引申到計算領域,發展成了一種容錯理論。隨著比特幣的出現和興起,這個著名問題又重入大眾視野。

拜占庭將軍問題場景

拜占庭是東羅馬帝國的首都,這是一個國土遼闊的帝國,其用於防禦的軍隊彼此都分離的很遠,各個軍隊彼此之間靠信差傳訊息。戰爭發生時,他們無法聚在一起來商討進攻與否,只能彼此之間透過信使來傳遞彼此的決定。

困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻決定。在這種狀態下,拜占庭將軍們能否找到一種分散式的協議來讓他們能夠遠端協商,從而就進攻問題達成一致?這就是著名的拜占庭將軍問題。

背景:拜占庭派10支軍隊去圍攻一個強大的敵人,至少6支軍隊同時進攻才可以取勝,否則不進攻。

難題:其中一些將軍是叛徒,會發布假訊息或者相反的進攻意圖。

目的:所有將軍遠端協商最終達成一致。

拜占庭解決方案:

1、每個將軍給其他所有將軍傳送指令。

2、每個將軍根據自己收到的指令來決定最終的策略。

缺點:每個將軍都要向其他將軍傳送指令,如果人數很多的話,達成一致的時間比較長。

成立前提

前提1、通訊沒問題,每個將軍發出的資訊中間沒有阻斷,都順利傳達。

前提2、n≧3m+1,n代表將軍總數,m代表叛徒的數量。即如果叛徒有1人的話,總數最少3×1+1=4人,叛徒有3人的話,總數最少為3×3+1=10人。

如下圖所示,進攻命令為1,按兵不動命令為0,下面列舉其中的一種情況。

可以看出來,忠將A發出的指令的都是1,收到的指令是1、1、0,最後指令為1,即進攻

叛將B發出的都是0,收到的指令是1、1、1,正常來說應該做出1的指令,但叛將搗亂,最後指令為0,即B選擇不出兵

忠將C發出的都是1,收到的是1、1、0,最後指令為1,即進攻

忠將D發出的都是1,收到的是1、1、0,最後指令為1,即進攻

最終A、C、D達成共識進攻並取得勝利。

上面的事例中,叛將B發出的都是0指令,感興趣的老鐵可以試著自己推演一下,當叛將B發出其他的指令時,例如:1、1、0或者1、0、0亦或是1、1、1後結果是什麼樣的,也可以多加幾個將軍進行一下推演,經過推演你可以發現,共識總是可以達成的,要麼進攻保證成功,要麼統一不進攻,透過推演你也可以更深刻的理解拜占庭將軍的共識問題。

當然,為了說的明白一點上面只用了4個節點,實際情況下節點要多的多,複製程度也高很多,但是,只要滿足上面的情況,最後還是都能達成共識的。

需要注意的一點是,拜占庭問題最後取得的共識有可能是進攻,也有可能是不進攻,最終目的不是為了勝利,而是為了統一行動,不讓忠將因為錯誤資訊而犧牲。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;