目錄
在拜占庭時代,一支軍隊由多個師組成,每個師由一位將軍指揮。這些師包圍了一座敵城。將軍們必須共同決定是進攻還是撤退。
-
一致性要求: 所有將軍必須達成一致的行動計劃(要么一起進攻,要么一起撤退)。部分進攻部分撤退會導致災難性的失敗。
-
通信方式: 將軍們只能通過信使進行遠程通信。
-
問題所在: 這些將軍中可能有一個或多個是叛徒(叛徒會任意行事:可能發送錯誤的消息,欺騙盟友,或者破壞共識)。
-
挑戰: 忠誠的將軍們如何在可能存在叛徒(他們可能發送混亂或欺詐信息)的情況下,仍然能夠通過消息傳遞達成一致且正確的決策?
這個比喻完美地映射了分布式系統的挑戰:
- 將軍 = 計算機節點(服務器、處理器)
- 信使 = 網絡通信
- 叛徒 = 出現故障或惡意的節點(可能發送任意錯誤信息)
- 達成共識 = 所有正常節點就某個值(如交易記錄、系統狀態)達成一致
問題的核心與難點
拜占庭問題的難點在于處理“拜占庭故障”(Byzantine Fault)。這種故障比普通的“宕機”或“無響應”故障要惡劣得多。
普通故障(Crash Fault):節點只是停止工作,不再發送任何消息。這相對容易處理,其他節點檢測到它無響應后可以將其忽略。
拜占庭故障(Byzantine Fault):節點可以以任意方式發生故障。它可能:
- 向不同的節點發送相反的信息。
- 偽裝成另一個節點(欺騙)。
- 選擇性不響應。
- 合謀其他惡意節點一起行動。
關鍵是,它的行為是不可預測的,其目的是破壞系統共識。
因此,拜占庭容錯(Byzantine Fault Tolerance, BFT)系統必須能夠應對這種“無所不用其極”的破壞,而不僅僅是簡單的機器故障。
簡單來說,拜占庭問題問的是:“一群互不信任的參與者,如何在沒有中央權威的情況下,還能共同可靠地完成一件事?” 而它的答案,正是構建信任機器的核心技術。
思考如何在存在惡意或故障組件的分布式系統中如何達成共識的理論模型。
浙公網安備 33010602011771號