原文標題:《區塊鏈與分散式系統》
撰文:蓋蓋,ubc 計算機博士在讀,研究分散式系統、拜占庭容錯、區塊鏈
區塊鏈技術的火熱推動了傳統分散式技術的進一步發展。從區塊鏈技術的本質來看,基本脫離不開傳統分散式系統跟密碼學的核心技術。那麼區塊鏈技術真的值得去研究嗎?是區塊鏈選擇了我們,還是我們選擇了區塊鏈?本文從一個分散式系統研究者的角度來理解區塊鏈。
人們常常把區塊鏈當作分散式資料庫,或者是分散式賬本,這種說法不準確,而且具有迷惑性。區塊鏈與我們常見到的分散式資料庫相比,我認為區別主要有兩個:共識演算法和鏈式結構。這兩者相輔相成,共同構成了區塊鏈的獨特性。
共識演算法
分散式資料庫所採用的共識演算法一般都是基於 paxos 所衍生出來的一系列演算法。這些演算法的安全性仰賴於中心化的假設,即所有的節點由一個可信賴的中心管理。在這個假設下,所有節點都被認為是「誠實」的,也就是說,所有節點都竭盡全力去傳遞訊息,並且訊息不會被篡改。如果有少部分節點宕機,或者失聯也不會影響協議的安全性。
然而區塊鏈中的共識演算法沒有中心化的假設,每個節點都可以被認為是有獨立行為的,這也是區塊鏈「去中心化」的由來。協議允許一部分節點(一般少於 1/3)是拜占庭節點,它們可以按照自己的意願選擇遵從或者違背協議,傳送任意訊息或者假裝宕機。拜占庭節點可以是被攻擊者完全控制的節點,也可以是自身軟體出現嚴重 bug 的節點。這類演算法被稱作拜占庭容錯(byzantine fault-tolerant)演算法,簡稱 bft。很明顯可以看出,區塊鏈的共識演算法的容錯性要遠遠高於傳統的分散式資料庫,因此往往也更低效。
針對 bft 共識演算法的研究從很早就開始了,其中影響力最大的就是圖靈獎得主 barbara 在 1999 osdi 年提出的 pbft (practical bft) [1]。然而由於演算法的複雜性過高,很難進行大規模部署。除此之外,這類演算法還要求每個節點的身份已知,也就是說,在協議初始或者新節點加入時,都需要有準入控制(access control)機制,保證節點之間可以互相驗證身份。基於以上原因,針對傳統的 bft 協議的研究到了 2010 年也沒有很大的進展。
比特幣的出現打破了人們對這一領域的認知,它使得人人都可以輕易加入到網路中來,不需要任何准入控制機制。只要擁有至少 51% 算力的計算機是誠實的,整個網路就是安全的,並且透過比特幣的獎勵機制鼓勵參與者規範自己的行為。比特幣透過極其簡單的設計就在某種程度上實現了「海納百川,一視同仁」,不得不說是一個奇蹟。然而奇蹟的誕生是要付出代價的。比特幣付出的代價在我看來主要有三個:
- 極大的資源消耗。參與到網路中的礦工需要付出龐大的硬體費用和電費。
- 極低的效能。比特幣的網路每秒鐘大概能處理 7 個交易,每個區塊的平均生成時間是 10 分鐘左右。
- 交易的不確定性。即使一個區塊在比特幣網路中被確認了,由於區塊鏈可能存在分叉 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