要達成分散式的共識,得先解決這幾個問題!
蒙特卡洛/張詠晴編譯
2018-12-03 16:10

 

分散式共識與分散式技術雖然只差一個詞,但是兩者的內涵完全不一樣,分散式技術是技術層面的合作,而分散式共識卻是社會層面的合作,它的內涵和適用範圍要廣得多。

 

為了解決這個問題,科學家們想了很多辦法。

 

容錯與共識算法

 

為了從「分散式技術」提升到「分散式共識」,科學家們提出了很多理論,付出了很多的努力。

 

分散式系統要想達成百分之百的共識,是非常非常困難的事,總會有人惡意作惡,總會有人出現錯誤或者網路延遲等各種問題,要達成分散式的共識,最重要的是解決在達成共識過程中,會出現的各種「故障」,用專業術語說,就是要解決容錯問題。

 

比如:

 

(1)簡單容錯 

 

在簡單的容錯系統中,我們假設系統的所有進程的行為方式都是固定的:要麼遵守協議,要麼失敗。這種類型的系統能夠妥善處理故障節點,並且不必擔心節點發出任意或惡意的行為。 但是,如果運行環境不受控,簡單容錯機制很難發揮作用。

 

(2a)拜占庭容錯 

 

在拜占庭容錯系統中,我們假設節點可能產生故障或者惡意。在分散系統中,網路是開放的、不受限制的,節點由獨立的個體控制,因此行為有很大的隨意性,在設計系統模型時,這種情況必須考慮。

 

(2b)BAR 容錯 

 

還有一種故障叫做「理性」故障,即節點為了自身利益,可能會背離系統整體的目標。換句話說,節點可以老實,也可以不老實,這取決於其動機。如果「籌碼」足夠高,那麼甚至大多數節點都會「叛變」。正所謂忠誠,取決於背叛的籌碼。 這被正式定義為 BAR 模型,它考慮到了拜占庭式故障和理性故障。

 

分散式共識的不可能三角

 

具體的技術原理我們暫時不去管它,只需要知道關於如何達成分散式的共識,一直在學術上沒有得到有效解決方案,甚至拜占庭將軍問題在很長一段時間被認為是無解的,還有人提出了「不可能三角」理論。

 

不可能三角:在分散式數據系統中,有一個CAP原理(CAP Theorem)。CAP原理中,有三個要素: 一致性(Consistency) 可用性(Availability) 分區容忍性(Partition tolerance) 。

 

CAP原理指的是,這三個要素最多只能同時實現兩點,不可能三者兼顧。因此在進行分散式架構設計時,必須做出取捨。而對於分散式數據系統,分區容忍性是基本要求,否則就失去了價值。因此設計分散式數據系統,就是在一致性和可用性之間取一個平衡。對於大多數web應用,其實並不需要強一致性,因此犧牲一致性而換取高可用性,是目前多數分散式數據庫產品的方向。

 

注意看最後一句話:因此犧牲一致性而換取高可用性,是目前多數分散式數據庫產品的方向。也就是說一致性的問題,並沒有得到很好的解決,這種尷尬的狀態一直持續到中本聰的出現。

 

本文為巴比特資訊授權刊登,原文標題為「巴比特專欄 | 關於區塊鏈的系統思考與梳理