【go共識算法】-BFT

BFT介紹

BFT

BFT( Byzantine Fault Tolerance)稱爲 拜占庭容錯。拜占庭容錯技術是一類分佈式計算領域的容錯技術。拜占庭假設是對現實世界的模型化,因爲硬件錯誤、網絡擁塞或中斷以及遭到惡意攻擊等緣由,計算機和網絡可能出現不可預料的行爲。拜占庭容錯技術被設計用來處理這些異常行爲,並知足所要解決的問題的規範要求。算法

拜占庭將軍問題

拜占庭容錯技術來源於拜占庭將軍問題。 拜占庭將軍問題是Leslie Lamport(2013年的圖靈講得住)用來爲描述分佈式系統一致性問題(Distributed Consensus)在論文中抽象出來一個著名的例子。安全

拜占庭帝國想要進攻一個強大的敵人,爲此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵騎馬相互通訊來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不肯定他們中是否有叛徒,叛徒可能擅自變動進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們才能保證有多於6支軍隊在同一時間一塊兒發起進攻,從而贏取戰鬥?網絡

拜占庭將軍問題中並不去考慮通訊兵是否會被截獲或沒法傳達信息等問題,即消息傳遞的信道絕無問題。Lamport已經證實了在消息可能丟失的不可靠信道上試圖經過消息傳遞的方式達到一致性是不可能的。因此,在研究拜占庭將軍問題的時候,已經假定了信道是沒有問題的.

咱們將拜占庭將軍問題簡化成了,全部忠誠的將軍都可以讓別的將軍接收到本身的真實意圖,並最終一致行動;而形式化的要求就是,「一致性」與「正確性」。
一致性:每一個忠誠的將軍必須收到相同的命令值vi(vi是第i個將軍的命令)
正確性:若是第i個將軍是忠誠的,那麼他發送的命令和每一個忠誠將軍收到的vi相同。異步

Lamport 對拜占庭將軍的問題的研究代表,當 n > 3m 時,即叛徒的個數 m 小於將軍總數的 n 的 1/3 時,經過口頭同步通訊(假設通訊是可靠的),能夠構造同時知足「一致性」和「正確性」的解決方法,即將軍們能夠達成一致的命令。分佈式

拜占庭容錯系統

區塊鏈網絡的記帳共識和拜占庭將軍的問題是類似的。參與共識記帳的每個節點至關於將軍,節點之間的消息傳遞至關於信使,某些節點可能因爲各類緣由而產生錯誤的信息傳遞給其餘節點。一般這些發生故障的節點被稱爲拜占庭節點,而正常的節點即爲非拜占庭節點。
假設分佈式系統擁有n臺節點,並假設整個系統拜占庭節點不超過m臺(n ≥ 3m + 1),拜占庭容錯系統須要知足以下兩個條件:區塊鏈

  1. 全部非拜占庭節點使用相同的輸入信息,產生一樣的結果。在區塊鏈系統中,能夠理解爲,隨機數相同、區塊算法相同、原帳本相同的時候,計算結果相同。
  2. 若是輸入的信息正確,那麼全部非拜占庭節點必須接收這個消息,並計算相應的結果。在區塊鏈系統中,能夠理解爲,非拜占庭節點須要對客戶的請求進行計算並生成區塊。

另外,拜占庭容錯系統須要達成以下兩個指標:設計

  1. 安全性:任何已經完成的請求都不會被更改,它能夠在之後請求看到。在區塊鏈系統中,能夠理解爲,已經生成的帳本不可篡改,而且能夠被節點隨時查看。
  2. 活性:能夠接受而且執行非拜占庭客戶端的請求,不會被任何因素影響而致使非拜占庭客戶端的請求不能執行。在區塊鏈系統中,能夠理解爲,系統須要持續生成區塊,爲用戶記帳,這主要靠挖礦的激勵機制來保證。

在分析拜占庭問題的時候,假設信道是可信的。拓展開來,在拜占庭容錯系統,廣泛採用的假設條件包括:code

  • 拜占庭節點的行爲能夠是任意的,拜占庭節點之間能夠共謀;
  • 節點之間的錯誤是不相關的;
  • 節點之間經過異步網絡鏈接,網絡中的消息可能丟失、亂序並延時到達,但大部分協議假設消息在有限的時間裏能傳達到目的地;
  • 節點之間傳遞的信息,第三方能夠嗅探到,可是不能篡改、僞造信息的內容和破壞信息的完整性。
相關文章
相關標籤/搜索