把區塊鏈當作分佈式賬本的說法並不準確,兩者的區別主要體現在共識算法和鏈式結構。

原文標題:《區塊鏈與分佈式系統》
撰文:蓋蓋,UBC 計算機博士在讀,研究分佈式系統、拜占庭容錯、區塊鏈

區塊鏈技術的火熱推動了傳統分佈式技術的進一步發展。從區塊鏈技術的本質來看,基本脫離不開傳統分佈式系統跟密碼學的核心技術。那麼區塊鏈技術真的值得去研究嗎?是區塊鏈選擇了我們,還是我們選擇了區塊鏈?本文從一個分佈式系統研究者的角度來理解區塊鏈。

人們常常把區塊鏈當作分佈式數據庫,或者是分佈式賬本,這種說法不準確,而且具有迷惑性。區塊鏈與我們常見到的分佈式數據庫相比,我認爲區別主要有兩個:共識算法和鏈式結構。這兩者相輔相成,共同構成了區塊鏈的獨特性。

共識算法

分佈式數據庫所採用的共識算法一般都是基於 Paxos 所衍生出來的一系列算法。這些算法的安全性仰賴於中心化的假設,即所有的節點由一個可信賴的中心管理。在這個假設下,所有節點都被認爲是「誠實」的,也就是說,所有節點都竭盡全力去傳遞消息,並且消息不會被篡改。如果有少部分節點宕機,或者失聯也不會影響協議的安全性。

然而區塊鏈中的共識算法沒有中心化的假設,每個節點都可以被認爲是有獨立行爲的,這也是區塊鏈「去中心化」的由來。協議允許一部分節點(一般少於 1/3)是拜占庭節點,它們可以按照自己的意願選擇遵從或者違背協議,發送任意消息或者假裝宕機。拜占庭節點可以是被攻擊者完全控制的節點,也可以是自身軟件出現嚴重 bug 的節點。這類算法被稱作拜占庭容錯(Byzantine fault-tolerant)算法,簡稱 BFT。很明顯可以看出,區塊鏈的共識算法的容錯性要遠遠高於傳統的分佈式數據庫,因此往往也更低效。

針對 BFT 共識算法的研究從很早就開始了,其中影響力最大的就是圖靈獎得主 Barbara 在 1999 OSDI 年提出的 PBFT (Practical BFT) [1]。然而由於算法的複雜性過高,很難進行大規模部署。除此之外,這類算法還要求每個節點的身份已知,也就是說,在協議初始或者新節點加入時,都需要有準入控制(Access Control)機制,保證節點之間可以互相驗證身份。基於以上原因,針對傳統的 BFT 協議的研究到了 2010 年也沒有很大的進展。

比特幣的出現打破了人們對這一領域的認知,它使得人人都可以輕易加入到網絡中來,不需要任何准入控制機制。只要擁有至少 51% 算力的計算機是誠實的,整個網絡就是安全的,並且通過比特幣的獎勵機制鼓勵參與者規範自己的行爲。比特幣通過極其簡單的設計就在某種程度上實現了「海納百川,一視同仁」,不得不說是一個奇蹟。然而奇蹟的誕生是要付出代價的。比特幣付出的代價在我看來主要有三個:

  1. 極大的資源消耗。參與到網絡中的礦工需要付出龐大的硬件費用和電費。
  2. 極低的性能。比特幣的網絡每秒鐘大概能處理 7 個交易,每個區塊的平均生成時間是 10 分鐘左右。
  3. 交易的不確定性。即使一個區塊在比特幣網絡中被確認了,由於區塊鏈可能存在分叉 fork,這個區塊仍然有被重寫的風險。只有等待一個區塊被確認若干次(比如 6 次)之後,才能使得這個區塊被重寫的風險降到足夠低。這也進一步提高了交易被確認的延遲。

爲了減少上述代價,有不少研究者都做出了卓越努力。例如,爲了提高共識算法的性能,來自 Cornell 大學的研究者在 2016 年的 NDSI 提出了 Bitcoin-NG [2]。來自 MIT 和 Stanford 的研究者在 2019 年的 CCS 提出了 Prism [3],進一步對比特幣進行擴容。此外,爲了減少資源消耗,來自 MIT 的研究者在 2017 年 SOSP 上提出了基於 Proof-of-Stake 的 Algorand,移除了挖礦的消耗。

鏈式結構

區塊鏈帶來的另一項革新就是鏈式的結構。每個區塊都通過哈希跟前面的區塊鏈接在一起,一直追溯到初始區塊,形成一條綿延不絕的鏈。這個結構帶來的一個好處就是當一個節點確認一個區塊的時候,意味着同時確認了這個區塊所在鏈上之前的所有區塊。基於這種鏈式的結構,區塊鏈中很容易採用一種「最長鏈」原則發佈新的區塊。比如在比特幣中,由於網絡問題和惡意攻擊的存在,一個礦工可能會看到多條鏈,但礦工總是傾向於在最長的一條鏈上挖礦。即使挖礦挖到一半發現了一條比所在的鏈更長的鏈出現,也要切換到更長的鏈。「最長鏈」原則並不一定是非遵守不可,它並不會對協議安全造成嚴重影響,但當所有礦工都遵守這一原則的時候,每個礦工所能期望獲得的收益最大。當然,也有例外,當一個礦工佔有比較多的資源的時候(少於 50%),可以採取一種「自私挖礦」(selfish mining)[4] 的策略,違背「最長鏈」原則,謀求更高的收益。

區塊鏈的鏈式結構也給研究傳統 BFT 的研究者帶來很大啓發,很多爲區塊鏈量身定做的 BFT 協議開始涌現。這其中最著名的要數 Facebook 所採用的 LibraBFT [5] 共識協議。LibraBFT 基於 HotStuff [6],由來自 VMware 的研究者提出。HotSutff 通過採用區塊鏈的鏈式結構改進了傳統 BFT 的性能,使得協議能夠部署在具有上百個節點的網絡中。下面我簡單說明一下這種鏈式結構的神奇之處。

首先,我們想象用傳統的 BFT 協議實現區塊鏈。由於在傳統的 BFT 協議中共識是一次性(one-shot)的,我們需要對每個區塊單獨進行共識。例如在 PBFT 中,每個區塊鏈都要經歷 Propose,Prepare,Precommit,Commit 若干階段。每個階段都要經歷一輪投票,似乎都在做相同的事情,存在很多消息冗餘。如下圖所示(來源 [1])。

區塊鏈 = 分佈式數據庫?技術解讀區塊鏈與分佈式系統異同

爲了解決這一問題,HotStuff 在 PBFT 的基礎上引入了鏈式結構。由於之前所說的鏈式結構的特性,一個節點對一個區塊的投票實際上是對這個區塊所在鏈上之前的所有區塊的投票。因此鏈式 HotStuff 縮減了不同的投票階段,只保留了統一的 Propose-Vote 的形式。如下圖所示(來源 [6])。

區塊鏈 = 分佈式數據庫?技術解讀區塊鏈與分佈式系統異同

HotStuff 進一步利用了鏈式結構的特點規定了投票規則(voting rule)以及區塊被確認的規則(commit rule),從而保證協議的安全性。鏈式的結構使得 BFT 協議變得簡潔而優美,能夠很好地進行流程化(Pipelined)作業,提高了協議的性能,極大降低了狀態空間。

除了上述的好處之外,鏈式的結構也給協議留足了設計空間,比如激勵機制,信用管理,公平機制等,這些機制對一個多方參與的網絡來說都會起到積極作用。

總結

在 10 多年前,中本聰發明比特幣,區塊鏈應運而生。現在,我們對區塊鏈的研究逐漸撥雲見日,我們也應用一種客觀專業的眼光去看待這項技術。毫無疑問,區塊鏈的誕生給分佈式系統的研究帶來了新的生命力。但在研究區塊鏈的時候,不能粗暴的將共識算法和鏈式結構分開去研究,因爲這兩者相輔相成,共同構成區塊鏈的基本要素。

擴展閱讀

[1] Practical Byzantine Fault Tolerance

[2] Bitcoin-NG: A Scalable Blockchain Protocol

[3] Prism: Deconstructing the Blockchain to Approach Physical Limits

[4] State Machine Replication in the Libra Blockchain

[5] Majority is not Enough: Bitcoin Mining is Vulnerable

[6] HotStuff: BFT Consensus in the Lens of Blockchain

來源鏈接:zhuanlan.zhihu.com