1. 程式人生 > >區塊鏈知識分享——共識演算法

區塊鏈知識分享——共識演算法

什麼是共識演算法?

區塊鏈架構是一種分散式的架構。其部署模式有公共鏈、聯盟鏈、私有鏈三種,對應的是去中心化分散式系統、部分去中心化分散式系統和弱中心分散式系統。

分散式系統中,多個主機通過非同步通訊方式組成網路叢集。在這樣的一個非同步系統中,需要主機之間進行狀態複製,以保證每個主機達成一致的狀態共識。然而,非同步系統中,可能出現無法通訊的故障主機,而主機的效能可能下降,網路可能擁塞,這些可能導致錯誤資訊在系統內傳播。因此需要在預設不可靠的非同步網路中定義容錯協議,以確保各主機達成安全可靠的狀態共識。

利用區塊鏈構造基於網際網路的去中心化賬本,需要解決的首要問題是如何實現不同賬本節點上的賬本資料的一致性和正確性。這就需要借鑑已有的在分散式系統中實現狀態共識的演算法,確定網路中選擇記賬節點的機制,以及如何保障賬本資料在全網中形成正確、一致的共識。

在 20 世紀 80 年代出現的分散式系統共識演算法,是區塊鏈共識演算法的基礎。經典的拜占庭容錯技術(Byzantine Fault Tolerance,BFT)是一類分散式計算領域的容錯技術。拜占庭假設是對現實世界的模型化,由於硬體錯誤、網路擁塞或中斷以及遭到惡意攻擊等原因,計算機和網路可能出現不可預料的行為。拜占庭容錯技術被設計用來處理這些異常行為,並滿足所要解決的問題的規範要求。

於是,拜占庭將軍問題的可以描述為:一個傳送命令的將軍要傳送一個命令給其餘 n-1 個將軍,使得:

IC1.所有忠誠的接收命令的將軍遵守相同的命令;

IC2.如果傳送命令的將軍是忠誠的,那麼所有忠誠的接收命令的將軍遵守所接收的命令。

Lamport 對拜占庭將軍問題的研究表明,當 n>3m 時,即叛徒的個數 m 小於將軍總數 n 的 1/3 時,通過口頭同步通訊(假設通訊是可靠的),可以構造同時滿足 IC1 和 IC2 的解決方案,即將軍們可以達成一致的命令。但如果通訊是可認證、防篡改偽造的(如採用 PKI認證,訊息簽名等),則在任意多的叛徒(至少得有兩個忠誠將軍)的情況下都可以找到解決方案。

而 在 異 步 通 信 情 況 下 , 情 況 就 沒 有 這 麼 樂 觀 。

Fischer-Lynch-Paterson 定理證明了,只要有一個叛徒存在,拜占庭將軍問題就無解。翻譯成分散式計算語言,在一個多程序非同步系統中,只要有一個程序不可靠,那麼就不存在一個協議,此協議能保證有限時間內使所有程序達成一致。由此可見,拜占庭將軍問題在一個分散式系統中,是一個非常有挑戰性的問題。因為分散式系統不能依靠同步通訊,否則效能和效率將非常低。因此尋找一種實用的解決拜占庭將軍問題的演算法一直是分散式計算領域中的一個重要問題。