老K漫談區塊鏈的共識(3) —— 分佈式系統和區塊鏈共識

1. 啥是分佈式系統

當我們評價一個新的事物或者介紹一個新的技術的時候,我們不能架空歷史和環境,新的事物不可能脫離歷史和環境憑空誕生。任何新的事物和新的技術總是或多或少的,與舊的事件以及過去的技術有所關聯,或是他們的衍生品。所以我們談到區塊鏈共識的時候,就需要從計算機專業中的分佈式系統來講起,因爲區塊鏈說來說去,它也只是分佈式系統中的一類而已。

分佈式系統在計算機領域中定義爲:組件分佈在聯網的計算機上,組件通過傳遞消息進行通信和動作協調的系統。這裏的組件可以粗略的認爲就是一個軟件,或者某個軟件的可獨立運行的一部分。這裏面隱含的說明了分佈式系統的三個特徵:組件的併發行,缺乏全局時鐘、組件故障的獨立性。我們區塊鏈既然是一種分佈式系統,這三個特徵也都是存在的。我們經常說區塊鏈的系統中沒有一個同一的時間,區塊鏈應用無法獲得一個當前的時間,這就是分佈式系統的特徵之一,缺乏全局時鐘。

分佈式系統幾乎無所不在,從信息領域來說,Google的服務器集羣,我們當今的互聯網和移動互聯網,大型的多人在線遊戲,銀行的金融交易系統以及我們的區塊鏈系統等等,無一例外都是分佈式系統,現在還能找到不處於某個分佈式系統的計算機麼?很少!而我們身邊的生活場景中,也是存在很多的分佈式系統,跨地理區域的全國投票選舉,地理分佈的多個朋友協商聚會,一個蟻羣中多個螞蟻相互通知食物的位置等等。

2. 啥是分佈式系統的共識

分佈式系統對外可以提供統一的服務。在這裏,如果想讓分散在不同計算機的組件協調起來,我們需要有一個機制能夠協調這些組件,我們把這個機制叫做分佈式系統的共識,區塊鏈的共識是我們分佈式系統共識的一種。

3. 關於分佈式系統的分類

分佈式系統中的概念非常多,在這裏面我們介紹和區塊鏈共識相關的兩組概念。第一組概念是同步和異步,我們可以把分佈式系統按照同步和異步分成兩類。對於同步的分佈式系統,我們描述爲處於分佈式系統的不同計算機之間通信,消息不丟失而且秒到,也就是說通信即快而可靠。而異步的分佈式系統是通信不可靠,分佈式系統中的不同計算機之間相互發送消息,消息有延遲而且也可能丟失。我們可以認爲我們的內部局域網是一個同步系統,大的互聯網是一個異步系統,前者通信無延遲且可靠,後者通信慢而且消息可能丟失。

第二組和區塊鏈共識相關的分佈式系統概念是拜占庭容錯(BFT,Byzantine Fault Tolerant),即可以容忍拜占庭錯誤(BF, Byzantine Fault)的分佈式系統共識(即使存在拜占庭錯誤,分佈式系統還可以正常工作),所謂的拜占庭錯誤,即分佈式系統中的計算機(節點)不但有可能產生故障還有可能產生錯誤。這裏故障只是不響應或者停機,而錯誤是指計算機(節點)有可能發送錯誤的消息。我們也可以理解爲兩軍對戰,其中一方出現了叛徒,出現叛徒的一方的問題就定義爲拜占庭錯誤。所以我們可以從這個角度把分佈式系統來分爲:拜占庭容錯的分佈式系統和非拜占庭容錯的分佈式系統。

我們從上面的兩組概念中可以把分佈式系統劃分爲以下四類:

分佈式系統類型 同步 異步
拜占庭容錯 同步拜占庭容錯 異步拜占庭容錯
非拜占庭容錯 同步的非拜占庭容錯 異步的非拜占庭容錯

4. 回到正題:區塊鏈共識

如果我們想按照上面的分佈式系統分類來劃分區塊鏈的話,我們可以把區塊鏈簡單的劃分爲一種異步的拜占庭容錯的分佈式系統。爲什麼是拜占庭容錯的分佈式系統,是因爲區塊鏈中是假設參與的計算機或者節點是有壞人的,它們會發錯誤消息和假消息,所以區塊鏈中是存在拜占庭錯誤的,可以推出區塊鏈是一個拜占庭容錯的分佈式系統。當然由於區塊鏈是分佈在我們的互聯網上,按照上面的定義我們認爲互聯網是一個異步分佈式系統,所以區塊鏈也是一個異步分佈式系統。

5. 題外話:關於異步分佈式系統的共識

關於異步式分佈式系統的共識,有這樣一個基礎的結論,FLP不可能原理。是在1985年由Fischer, Lynch 和 Patterson三位計算機科學家,提出了一個FLP不可能原理:“在網絡可靠的前提下,任意節點失效,一個或者多個的最小化異步模型系統中,不可能存在一個解決一致性問題的確定性算法。即如果存在任意節點失效的情況下,就無法完全保證分佈式系統可以達到同步”。我們可以理解爲認爲完全異步的分佈式系統是無法達到共識的。所以我們區塊鏈的共識機制或多或少的對異步式分佈式系統加了一些限制條件,比如pBFT共識算法,它假設節點之間消息節點有延遲,但是在有限時間內是可以達到的。所以我們區塊鏈爲了達到共識,也是有一點限制條件的異步分佈式系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章