發(fā)布時間:所屬分類:計算機職稱論文瀏覽:1次
摘 要: 摘要共識算法是區(qū)塊鏈技術(shù)的核心要素,也是近年來分布式系統(tǒng)研究的熱點.本文系統(tǒng)性地梳理和討論了區(qū)塊鏈發(fā)展過程中的32種重要共識算法,介紹了傳統(tǒng)分布式一致性算法以及分布式共識領(lǐng)域的里程碑式的重要研究和結(jié)論,提出了區(qū)塊鏈共識算法的一種基礎(chǔ)模型和分類
摘要共識算法是區(qū)塊鏈技術(shù)的核心要素,也是近年來分布式系統(tǒng)研究的熱點.本文系統(tǒng)性地梳理和討論了區(qū)塊鏈發(fā)展過程中的32種重要共識算法,介紹了傳統(tǒng)分布式一致性算法以及分布式共識領(lǐng)域的里程碑式的重要研究和結(jié)論,提出了區(qū)塊鏈共識算法的一種基礎(chǔ)模型和分類方法,并總結(jié)了現(xiàn)有共識算法的發(fā)展脈絡(luò)和若干性能指標,以期為未來共識算法的創(chuàng)新和區(qū)塊鏈技術(shù)的發(fā)展提供參考.
關(guān)鍵詞區(qū)塊鏈,共識算法,分布式系統(tǒng),拜占庭容錯,P2P網(wǎng)絡(luò)
共識問題是社會科學(xué)和計算機科學(xué)等領(lǐng)域的經(jīng)典問題,已經(jīng)有很長的研究歷史.目前有記載的文獻至少可以追溯到1959年,蘭德公司和布朗大學(xué)的埃德蒙·艾森伯格(EdmundEisenberg)和大衛(wèi).蓋爾(DavidGale)發(fā)表的“Consensusofsubjectiveprobabilities:thepari—mutuelmethod”,主要研究針對某個特定的概率空間,一組個體各自有其主觀的概率分布時,如何形成一個共識概率分布的問題【.隨后,共識問題逐漸引起了社會學(xué)、管理學(xué)、經(jīng)濟學(xué)、特別是計算機科學(xué)等各學(xué)科領(lǐng)域的廣泛研究興趣.
計算機科學(xué)領(lǐng)域的早期共識研究一般聚焦于分布式一致性,即如何保證分布式系統(tǒng)集群中所有節(jié)點的數(shù)據(jù)完全相同并且能夠?qū)δ硞提案達成一致的問題,是分布式計算的根本問題之一.雖然共識(Consensus)和一致性(Consistency)在很多文獻和應(yīng)用場景中被認為是近似等價和可互換使用的,但二者涵義存在著細微的差別:共識研究側(cè)重于分布式節(jié)點達成一致的過程及其算法,而一致性研究則側(cè)重于節(jié)點共識過程最終達成的穩(wěn)定狀態(tài);此外,傳統(tǒng)分布式一致性研究大多不考慮拜占庭容錯問題,即假設(shè)不存在惡意篡改和偽造數(shù)據(jù)的拜占庭節(jié)點,因此在很長一段時間里,傳統(tǒng)分布式一致性算法的應(yīng)用場景大多是節(jié)點數(shù)量有限且相對可信的分布式數(shù)據(jù)庫環(huán)境.與之相比,區(qū)塊鏈系統(tǒng)的共識算法則必須運行于更為復(fù)雜、開放和缺乏信任的互聯(lián)網(wǎng)環(huán)境下,節(jié)點數(shù)量更多且可能存在惡意拜占庭節(jié)點.因此,即使Viewstampedreplication(VR)和Paxos等許多分布式一致性算法早在上世紀8O年代就已經(jīng)提出,但是如何跨越拜占庭容錯這道鴻溝、設(shè)計簡便易行的分布式共識算法,仍然是分布式計算領(lǐng)域的難題之一.
2008年10月31日,一位化名為“中本聰”的研究者在密碼學(xué)郵件組中發(fā)表了比特幣的奠基性論文“Bitcoin:apeer—to—peerelectroniccashsystem”【2J.基于區(qū)塊鏈(特別是公有鏈)的共識研究自此拉開序幕.從分布式計算和共識的角度來看,比特幣的根本性貢獻在于首次實現(xiàn)和驗證了一類實用的、互聯(lián)網(wǎng)規(guī)模的拜占庭容錯算法,從而打開了通往區(qū)塊鏈新時代的大門.
一般而言,區(qū)塊鏈系統(tǒng)的節(jié)點具有分布式、自治性、開放可自由進出等特性,因而大多采用對等式網(wǎng)絡(luò)(Peer—to—peernetwork,P2P網(wǎng)絡(luò))來組織散布全球的參與數(shù)據(jù)驗證和記賬的節(jié)點.P2P網(wǎng)絡(luò)中的每個節(jié)點均地位對等且以扁平式拓撲結(jié)構(gòu)相互連通和交互,不存在任何中心化的特殊節(jié)點和層級結(jié)構(gòu),每個節(jié)點均會承擔網(wǎng)絡(luò)路由、驗證區(qū)塊數(shù)據(jù)、傳播區(qū)塊數(shù)據(jù)、發(fā)現(xiàn)新節(jié)點等功能.區(qū)塊鏈系統(tǒng)采用特定的經(jīng)濟激勵機制來保證分布式系統(tǒng)中所有節(jié)點均有動機參與數(shù)據(jù)區(qū)塊的生成和驗證過程,按照節(jié)點實際完成的工作量分配共識過程所產(chǎn)生的數(shù)字加密貨幣,并通過共識算法來選擇特定的節(jié)點將新區(qū)塊添加到區(qū)塊鏈.以比特幣為代表的一系列區(qū)塊鏈應(yīng)用的蓬勃發(fā)展,彰顯了區(qū)塊鏈技術(shù)的重要性與應(yīng)用價值,區(qū)塊鏈系統(tǒng)的共識也成為一個新的研究熱點[引.
迄今為止,研究者已經(jīng)在共識相關(guān)領(lǐng)域做了大量研究工作,不同領(lǐng)域研究者的側(cè)重點也各不相同.計算機學(xué)科通常稱為共識算法或者共識協(xié)議,管理和經(jīng)濟學(xué)科則通常稱為共識機制.細究之下,這些提法存在細微的差異:算法一般是一組順序敏感的指令集且有明確的輸入和輸出;而協(xié)議和機制則大多是一組順序不敏感的規(guī)則集.就區(qū)塊鏈領(lǐng)域而言,本文認為比特幣和以太坊等可認為是底層協(xié)議或機制,其詳細規(guī)定了系統(tǒng)或平臺內(nèi)部的節(jié)點交互規(guī)則、數(shù)據(jù)路由和轉(zhuǎn)發(fā)規(guī)則、區(qū)塊構(gòu)造規(guī)則、交易驗證規(guī)則、賬本維護規(guī)則等集合;而工作量證明(Proof-ofwork,PoW)、權(quán)益證明(Proof-of-stake,PoS)等則是建立在特定協(xié)議或機制基礎(chǔ)上、可靈活切換的算法,其規(guī)定了交易偵聽與打包、構(gòu)造區(qū)塊、記賬人選舉、區(qū)塊傳播與驗證、主鏈選擇與更新等若干類順序敏感的指令集合.因此,本文后續(xù)敘述均采用共識算法的提法.現(xiàn)有文獻研究的共識問題實際上可以分為算法共識和決策共識兩個分支,前者致力于研究在特定的網(wǎng)絡(luò)模型和故障模型前提下,如何在缺乏中央控制和協(xié)調(diào)的分布式網(wǎng)絡(luò)中確保一致性,其實質(zhì)是一種“機器共識”;后者則更為廣泛地研究無中心的群體決策中,如何就最優(yōu)的決策達成一致的問題,例如關(guān)于比特幣系統(tǒng)擴容【6j問題和分叉問題的社區(qū)討論與路線選擇,其實質(zhì)是“人的共識”.二者的區(qū)別在于:前者是機器問的確定性共識,以工程復(fù)雜性為主;而后者則是以“人在環(huán)路中(Human—inthe—loop)”的復(fù)雜系統(tǒng)為特點的不確定性共識,以社會復(fù)雜性為主.區(qū)塊鏈共識算法研究應(yīng)屬于算法共識分支的子集,而決策共識則大多見于分布式人工智能、多智能體等研究領(lǐng)域.
拜占庭將軍問題是分布式共識的基礎(chǔ),也是上述兩個研究分支的根源.拜占庭將軍問題有兩個交互一致性條件,即一致性和正確性.由于大多數(shù)情況下,正確性涉及到人的主觀價值判斷,很難施加到分布式節(jié)點上,因此算法共識采用的是“降級的正確性(Degradedcorrectness),即從“表達的內(nèi)容是正確的”降級為“正確地表達”,這就導(dǎo)致區(qū)塊鏈的拜占庭共識實際上是一種機器共識,其本身等價于分布式一致性+正確表達(不篡改消息).與之相對的是,決策共識可以認為是人的共識,不僅要求一致性,而且要求所有節(jié)點相信“表達的內(nèi)容是正確的”,因而決策共識不僅要求內(nèi)容的客觀一致性,而且還要求其在共識節(jié)點間的主觀正確性.由此可見,算法共識處理的是客觀的二值共識,即對(唯一正確的賬本)和錯(所有錯誤的賬本),而決策共識處理的是主觀的多值共識,即意見1(及其所屬群體)、意見2(及其所屬群體)、…、意見Ⅳ(及其所屬群體),各節(jié)點最終通過群體問的協(xié)調(diào)和協(xié)作過程收斂到唯一意見(共識),而此過程可能失敗(不收斂).
本文致力于按時間順序梳理和討論區(qū)塊鏈發(fā)展過程中的共識算法,以期為未來共識算法的創(chuàng)新和區(qū)塊鏈技術(shù)的發(fā)展提供參考.本文的后續(xù)章節(jié)安排如下:首先,簡要介紹了分布式共識領(lǐng)域重要的里程碑式的研究和結(jié)論,包括兩軍問題、拜占庭問題和FLP不可能定理,并介紹了傳統(tǒng)的分布式一致性算法;然后,提出了區(qū)塊鏈共識算法的一種基礎(chǔ)模型和分類方法,并對當前主流的區(qū)塊鏈共識算法進行了分析;最后,總結(jié)了區(qū)塊鏈共識算法的發(fā)展和研究趨勢.
1傳統(tǒng)分布式一致性算法
1975年,紐約州立大學(xué)石溪分校的阿克云盧(AkkoyunluE.A.)、埃卡納德漢姆(EkanadhamK.)和胡貝爾(HuberR.V.)在論文“Somecon—straintsandtradeofsinthedesignofnetworkcommunications”中首次提出了計算機領(lǐng)域的兩軍問題及其無解性證明【711著名的數(shù)據(jù)庫專家吉姆.格雷正式將該問題命名為“兩軍問題”-8J.兩軍問題表明,在不可靠的通信鏈路上試圖通過通信達成一致共識是不可能的,這被認為是計算機通信研究中第一個被證明無解的問題.兩軍問題對計算機通信研究產(chǎn)生了重要的影響,互聯(lián)網(wǎng)時代最重要的TCP/IP協(xié)議中的“三次握手”過程即是為解決兩軍問題不存在理論解而誕生的簡單易行、成本可控的“工程解”.
分布式計算領(lǐng)域的共識問題于1980年由馬歇爾·皮斯(MarshallPease)、羅伯特·肖斯塔克(RobertShostak)和萊斯利·蘭伯特(LeslieLam—port)提出I9j1該問題主要研究在一組可能存在故障節(jié)點、通過點對點消息通信的獨立處理器網(wǎng)絡(luò)中,非故障節(jié)點如何能夠針對特定值達成一致共識.1982年,作者在另一篇文章中正式將該問題命名為“拜占庭將軍問題”【10_,提出了基于口頭消息和基于簽名消息的兩種算法來解決該問題.拜占庭假設(shè)是對現(xiàn)實世界的模型化,強調(diào)的是由于硬件錯誤、網(wǎng)絡(luò)擁塞或斷開以及遭到惡意攻擊,計算機和網(wǎng)絡(luò)可能出現(xiàn)的不可預(yù)料的行為.此后,分布式共識算法可以分為兩類,即拜占庭容錯和非拜占庭容錯類共識.早期共識算法一般為非拜占庭容錯算法,例如廣泛應(yīng)用于分布式數(shù)據(jù)庫的VR和Paxos,目前主要應(yīng)用于聯(lián)盟鏈和私有鏈;2008年末,比特幣等公有鏈誕生后,拜占庭容錯類共識算法才逐漸獲得實際應(yīng)用.需要說明的是,拜占庭將軍問題是區(qū)塊鏈技術(shù)核心思想的根源,直接影響著區(qū)塊鏈系統(tǒng)共識算法的設(shè)計和實現(xiàn),因而在區(qū)塊鏈技術(shù)體系中具有重要意義.
1985年,邁克爾·費合爾(MichaelFisher)、南希·林奇(NancyLynch)和邁克爾·帕特森(MichaelPaterson)共同發(fā)表了論文“Impossibil—ityofdistributedconsensuswithonefaultypro—cess”[11J.這篇文章證明:在含有多個確定性進程的異步系統(tǒng)中,只要有一個進程可能發(fā)生故障,那么就不存在協(xié)議能保證有限時間內(nèi)使所有進程達成一致.按照作者姓氏的首字母,該定理被命名為FLP不可能定理,是分布式系統(tǒng)領(lǐng)域的經(jīng)典結(jié)論之一,并由此獲得了Dijkstra獎.FLP不可能定理同樣指出了存在故障進程的異步系統(tǒng)的共識問題不存在有限時間的理論解,因而必須尋找其可行的“工程解”.為此,研究者們只能通過調(diào)整問題模型來規(guī)避FLP不可能定理,例如犧牲確定性、增加時間等;加密貨幣則是通過設(shè)定網(wǎng)絡(luò)同步性(或弱同步性)和時間假設(shè)來規(guī)避FLP不可能性,例如網(wǎng)絡(luò)節(jié)點可以快速同步,且礦工在最優(yōu)鏈上投入有限時問和資源等.
早期的共識算法一般也稱為分布式一致算法.與目前主流的區(qū)塊鏈共識算法相比,分布式一致性算法主要面向分布式數(shù)據(jù)庫操作、且大多不考慮拜占庭容錯問題,即假設(shè)系統(tǒng)節(jié)點只發(fā)生宕機和網(wǎng)絡(luò)故障等非人為問題,而不考慮惡意節(jié)點篡改數(shù)據(jù)等問題.1988年,麻省理工學(xué)院的布萊恩·奧奇(BrianM.Oki)和芭芭拉·里斯科夫(BarbaraH.Liskov,著名計算機專家、2008年圖靈獎得主)提出了VR一致性算法,采用主機備份(Primary—backup)模式,規(guī)定所有數(shù)據(jù)操作都必須通過主機進行,然后復(fù)制到各備份機器以保證一致性【J.1989年,萊斯利·蘭伯特fLeslieLamport)在工作論文“Thepart—timeparliament”中提出Paxos算法,由于文章采用了講故事的敘事風格且內(nèi)容過于艱深晦澀,直到1998年才通過評審、發(fā)表在ACMtransac—tionsoncomputersystems期刊上.Paxos是基于消息傳遞的一致性算法,主要解決分布式系統(tǒng)如何就某個特定值達成一致的問題.隨著分布式共識研究的深人,Paxos算法獲得了學(xué)術(shù)界和工業(yè)界的廣泛認可,并衍生出Abstractpaxos、Classicpaxos、Byzantinepaxos和Diskpaxos等變種算法,成為解決異步系統(tǒng)共識問題最重要的算法家族【MJ.實際上,Liskove等提出的VR算法本質(zhì)上也是一類Paxos算法.需要說明的是,VR和Paxos算法均假設(shè)系統(tǒng)中不存在拜占庭故障節(jié)點,因而是非拜占庭容錯的共識算法.除以上共識算法外,獲得較多研究關(guān)注的早期共識算法還有兩階段提交(Two—phasecommit)算法、三階段提交(Three—phasecommit)算法、Zab、Zyzzyva、Kafka等,本文限于篇幅不加詳述.
2主流區(qū)塊鏈共識算法
1993年,美國計算機科學(xué)家、哈佛大學(xué)教授辛西婭·德沃克(CynthiaDwork)首次提出了工作量證明思想_15J,用來解決垃圾郵件問題.該機制要求郵件發(fā)送者必須算出某個數(shù)學(xué)難題的答案來證明其確實執(zhí)行了一定程度的計算工作,從而提高垃圾郵件發(fā)送者的成本.1997年,英國密碼學(xué)家亞當·伯克(AdamBack)也獨立地提出、并于2002年正式發(fā)表了用于哈希現(xiàn)金(Hashcash)的工作量證明機制l16j.哈希現(xiàn)金也是致力于解決垃圾郵件問題,其數(shù)學(xué)難題是尋找包含郵件接受者地址和當前日期在內(nèi)的特定數(shù)據(jù)的SHA一1哈希值,使其至少包含20個前導(dǎo)零.1999年,馬庫斯·雅各布松(MarkusJakobsson)正式提出了“工作量證明”概念-17_.這些工作為后來中本聰設(shè)計比特幣的共識機制奠定了基礎(chǔ).
1999年,BarbaraLiskov等提出了實用拜占庭容錯算法(PracticalByzantinefaulttolerance,PBFT)[18],解決了原始拜占庭容錯算法效率不高的問題,將算法復(fù)雜度由指數(shù)級降低到多項式級,使得拜占庭容錯算法在實際系統(tǒng)應(yīng)用中變得可行.PBFT實際上是Paxos算法的變種,通過改進Paxos算法使其可以處理拜占庭錯誤,因而也稱為Byzantinepaxos算法,可以在保證活性(Live—ness)和安全性(Safety)的前提下提供(n一1)/3的容錯性,其中n為節(jié)點總數(shù).
2000年,加利福尼亞大學(xué)的埃里克·布魯爾(EricBrewer)教授在ACMSymposiumonPrin—ciplesofDistributedComputing研討會的特邀報告中提出了一個猜想:分布式系統(tǒng)無法同時滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯性(Partitiontolerance),最多只能同時滿足其中兩個.其中,一致性是指分布式系統(tǒng)中的所有數(shù)據(jù)備份在同一時刻保持同樣的值;可用性是指集群中部分節(jié)點出現(xiàn)故障時,集群整體是否還能處理客戶端的更新請求;分區(qū)容忍性則是指是否允許數(shù)據(jù)分區(qū),不同分區(qū)的集群節(jié)點之問無法互相通信.
2002年,塞斯.吉爾伯特(SethGilbert)和南希·林奇(NancyLynch)在異步網(wǎng)絡(luò)模型中證明了這個猜想,使其成為CAP(Consistency,availability,partitiontolerance)定理或布魯爾定理I1.該定理使得分布式網(wǎng)絡(luò)研究者不再追求同時滿足三個特性的完美設(shè)計,而是不得不在其中做出取合,這也為后來的區(qū)塊鏈體系結(jié)構(gòu)設(shè)計帶來了影響和限制.
2008年10月,中本聰發(fā)表的比特幣創(chuàng)世論文催生了基于區(qū)塊鏈的共識算法研究.前文所提到的傳統(tǒng)分布式一致性算法大多應(yīng)用于相對可信的聯(lián)盟鏈和私有鏈,而面向比特幣、以太坊等公有鏈環(huán)境則誕生了PoW、PoS等一系列新的拜占庭容錯類共識算法.
比特幣采用了PoW共識算法來保證比特幣網(wǎng)絡(luò)分布式記賬的一致性,這也是最早和迄今為止最安全可靠的公有鏈共識算法.PoW的核心思想是通過分布式節(jié)點的算力競爭來保證數(shù)據(jù)的一致性和共識的安全性.比特幣系統(tǒng)的各節(jié)點(即礦工)基于各自的計算機算力相互競爭來共同解決一個求解復(fù)雜但是驗證容易的SHA256數(shù)學(xué)難題(即挖礦),最快解決該難題的節(jié)點將獲得下一區(qū)塊的記賬權(quán)和系統(tǒng)自動生成的比特幣獎勵.PoW共識在比特幣中的應(yīng)用具有重要意義,其近乎完美地整合了比特幣系統(tǒng)的貨幣發(fā)行、流通和市場交換等功能,并保障了系統(tǒng)的安全性和去中心性.然而,PoW共識同時存在著顯著的缺陷,其強大算力造成的資源浪費(主要是電力消耗)歷來為人們所詬病,而且長達l0分鐘的交易確認時問使其相對不適合小額交易的商業(yè)應(yīng)用【3】_
2011年7月,一位名為QuantumMe—chanic的數(shù)字貨幣愛好者在比特幣論壇(www.bitcointalk.org)首次提出了權(quán)益證明PoS共識算法【2o_.隨后,SunnyKing在2012年8月發(fā)布的點點幣(Peercoin,PPC)中首次實現(xiàn).PoS由系統(tǒng)中具有最高權(quán)益而非最高算力的節(jié)點獲得記賬權(quán),其中權(quán)益體現(xiàn)為節(jié)點對特定數(shù)量貨幣的所有權(quán),稱為幣齡或幣天數(shù)(Coindays).PPC將PoW和PoS兩種共識算法結(jié)合起來,初期采用PoW挖礦方式以使得Token相對公平地分配給礦工,后期隨著挖礦難度增加,系統(tǒng)將主要由PoS共識算法維護.PoS一定程度上解決了PoW算力浪費的問題,并能夠縮短達成共識的時間,因而比特幣之后的許多競爭幣都采用PoS共識算法.
2013年2月,以太坊創(chuàng)始人VitalikButerin在比特幣雜志網(wǎng)站詳細地介紹了Ripple(瑞波幣)及其共識過程的思路.Ripple項目實際上早于比特幣,2004年就由瑞安·福格爾(RyanFugger)實現(xiàn),其初衷是創(chuàng)造一種能夠有效支持個人和社區(qū)發(fā)行自己貨幣的去中心化貨幣系統(tǒng);2014年,大衛(wèi)·施瓦爾茨(DavidSchwartz)等提出了瑞波協(xié)議共識算法(RippleProtocolConsensusAlgo—rithm,RPCA)_21_,該共識算法解決了異步網(wǎng)絡(luò)節(jié)點通訊時的高延遲問題,通過使用集體信任的子網(wǎng)絡(luò)(Collectively—trustedsubnetworks),在只需最小化信任和最小連通性的網(wǎng)絡(luò)環(huán)境中實現(xiàn)了低延遲、高魯棒性的拜占庭容錯共識算法.目前,Ripple已經(jīng)發(fā)展為基于區(qū)塊鏈技術(shù)的全球金融結(jié)算網(wǎng)絡(luò).
相關(guān)期刊推薦:《電腦知識與技術(shù)》是由安徽省科技情報學(xué)會、中國計算機函授學(xué)院主辦的一本融知識、技術(shù)、信息于一體的電腦類雜志,是全國的專業(yè)IT類旬刊刊物,讀者對象主要為廣大電腦用戶、電腦愛好者和各企事業(yè)單位計算機技術(shù)人員。創(chuàng)刊以來,一直本著普及電腦知識、推廣電腦技術(shù)、交流經(jīng)驗技巧、促進電腦應(yīng)用的辦刊宗旨,注重雜志質(zhì)量。
2013年8月,比特股(Bitshares)項目提出了一種新的共識算法,即授權(quán)股份證明算法(Delegatedproof-of-stake,DPoS)[22J.DPoS共識的基本思路類似于“董事會決策”,即系統(tǒng)中每個節(jié)點可以將其持有的股份權(quán)益作為選票授予一個代表,獲得票數(shù)最多且愿意成為代表的前Ⅳ個節(jié)點將進入“董事會”,按照既定的時間表輪流對交易進行打包結(jié)算、并且簽署(即生產(chǎn))新區(qū)塊L31.如果說PoW和PoS共識分別是“算力為王”和“權(quán)益為王”的記賬方式的話,DPoS則可以認為是“民主集中式”的記賬方式,其不僅能夠很好地解決PoW浪費能源和聯(lián)合挖礦對系統(tǒng)的去中心化構(gòu)成威脅的問題,也能夠彌補PoS中擁有記賬權(quán)益的參與者未必希望參與記賬的缺點,其設(shè)計者認為DPoS是當時最快速、最高效、最去中心化和最靈活的共識算法.