EXGO學院|第14課:什麼是拜占庭將軍問題?

我們在之前講過,分佈式帳本可以說是區塊鏈的框架,每一個人都可以自由地參與進來,共同處理區塊鏈中的數據,基於這一點,區塊鏈實際上就是一個大的分佈式計算網路。


它並沒有一個類似中央指揮室的東西來發號施令,整個網路是完全分散的,要依靠不同的節點間,彼此交換資訊、達成共識,才能統一行動,整個過程就像無領導小組討論一樣。


對此,有人就提出了疑問,萬一有節點發送了錯誤的資訊,干擾網路正常運行或者大家產生了分歧怎麼辦?於是,學者們便建立了一個模型,統一將這類用來描述分佈式系統一致性的問題,稱為拜占庭將軍問題。


所謂拜占庭將軍問題是這樣的:


拜占庭帝國想要攻打一個國家,它派出了多支軍隊進行圍攻,但敵國軍事實力也很強,將軍們必須在同一個時間,一起發動進攻才能獲取勝利。


現在的問題在於,每個將軍都分散在敵國四周,只能依靠通信兵騎馬相互通信,確定進攻的時間,可是一方面通訊兵可能會在送信過程中被敵方擊殺,另一方面根據不可靠消息,在這些將軍中有叛徒的存在,叛徒可能會擅自變更進攻意向或者進攻時間,從而向其他將軍傳達虛假指令,影響他人判斷。


如果整個分佈式網路相當於拜占庭帝國,而每個節點相當於裏面的將軍,那麼在這種狀態下,該怎麼做才能保證網路中的全部節點對於某個事情達成一致?(即將軍們在同一時間一起發起進攻,從而贏取戰鬥)這就是拜占庭將軍問題。


所以簡單來說,拜占庭將軍描述的是,分佈式網路會面臨的兩個問題:


  • 如何解決各個節點之間的同步問題。比如在沒有叛徒情況下,將軍 A 向其他將軍傳遞進攻方案時(如:明日下午 2 點進攻),可能將軍B也在傳遞進攻方案(如:明日下午 3點進攻)。


  • 如何解決惡意節點,故意發送錯誤資訊干擾網路的運行的問題。比如在有叛徒情況下,叛徒會向不同的將軍發出不同的進攻提議,干擾其他將軍們達成一致。


後來大家發現,想要在分佈式網路中,讓每一個節點都不出錯是不可能的,於是就有人提出了“拜占庭容錯”的觀點來解決拜占庭將軍的問題,這個解決辦法就是資訊的偽造或錯誤並不重要,只要誠實的將軍數量大於總數的三分之二,即使有少部分不誠實的將軍存在,整個系統也可以達成一致。


於是,大家以此為基礎,設計出了很多解決方案。

Updated on: 27/07/2023