姬曉濤 劉建華
(西安郵電大學(xué) 西安 710121)
區(qū)塊鏈?zhǔn)且环N全新的分布式計(jì)算范式,其不需要中心節(jié)點(diǎn)來(lái)統(tǒng)一處理,管理網(wǎng)絡(luò),網(wǎng)絡(luò)中各節(jié)點(diǎn)同步運(yùn)行并通過(guò)共識(shí)機(jī)制保證一致[1]。Leslie Lamport[2]在1998提出了Paxos共識(shí)算法,2014年斯坦福教授Diego Ongaro[3]發(fā)布了Raft算法(Paxos算法的變種)。1999年,Castro和Liskov提出了實(shí)用拜占庭容錯(cuò)協(xié)議(PBFT),使拜占庭協(xié)議的復(fù)雜度有所降低[4],同年“工作量證明”這一概念被Markus Jakobsson[5]首次提出,2008年工作量首次被應(yīng)用到中本聰[6]提出的比特幣中。2011年,權(quán)益證明POS算法由一位名為Quantum Me-chanic的數(shù)字貨幣愛(ài)好者首次提出[7],2012年Sunny King[8]在點(diǎn)點(diǎn)幣中首次使用了權(quán)益證明。為了解決工作量證明機(jī)制和權(quán)益證明存在的問(wèn)題,F(xiàn)abian Schuh提出了股份授權(quán)證明機(jī)制,比特股[9]是該機(jī)制的首次應(yīng)用。2017年韓璇劉亞敏對(duì)現(xiàn)有的共識(shí)機(jī)制進(jìn)行了總結(jié),并從安全性等方面進(jìn)行了評(píng)價(jià)[10]。
共識(shí)機(jī)制的研究主要集中在創(chuàng)新研究出更好的共識(shí)算法以及對(duì)其安全性、性能的分析等方面。共識(shí)機(jī)制作為區(qū)塊鏈這一分布式系統(tǒng)的核心技術(shù)之一,目前并沒(méi)有對(duì)其在CAP理論方面的權(quán)衡分析。因此本文在詳細(xì)了解了幾大主流共識(shí)算法的共識(shí)流程后,從CAP理論的角度分析了各算法對(duì)三屬性的考量與權(quán)衡,將共識(shí)算法進(jìn)行了分類,這將為區(qū)塊鏈未來(lái)的應(yīng)用提供了理論基礎(chǔ)。
百度百科定義:“‘共識(shí)機(jī)制’是通過(guò)特殊節(jié)點(diǎn)的投票,在很短的時(shí)間內(nèi)完成對(duì)交易的驗(yàn)證和確認(rèn);對(duì)一筆交易,如果利益不相干的若干個(gè)節(jié)點(diǎn)能夠達(dá)成共識(shí),我們就可以認(rèn)為全網(wǎng)對(duì)此也能夠達(dá)成共識(shí)”[11]。本文認(rèn)為共識(shí)機(jī)制就是網(wǎng)絡(luò)中所有節(jié)點(diǎn)通過(guò)某種特定規(guī)則對(duì)某個(gè)提案達(dá)成一致的過(guò)程。目前主流的區(qū)塊鏈共識(shí)機(jī)制包括工作量證明機(jī)制(POW)、權(quán)益證明機(jī)制(POS)、股份授權(quán)證明機(jī)制(DPOS)、實(shí)用拜占庭容錯(cuò)協(xié)議(PBFT)、Paxos共識(shí)算法以及Raft共識(shí)算法。
CAP理論最早是Eric Brewer[12]在2000年提出的,Gilbert等[13]在2002年對(duì)其進(jìn)行了證明。CAP原理指的是分布式系統(tǒng)不能同時(shí)滿足一致性、可用性、分區(qū)容錯(cuò)性三屬性,必須選擇一個(gè)進(jìn)行一定程度的弱化。三屬性的含義如下:
2)可用性(Availability):對(duì)于系統(tǒng)的每一個(gè)請(qǐng)求在一定時(shí)間內(nèi)無(wú)論成功還是失敗都必須有回應(yīng)。
3)分區(qū)容錯(cuò)性(Partition Tolerance):網(wǎng)絡(luò)中部分節(jié)點(diǎn)發(fā)生故障,對(duì)整個(gè)系統(tǒng)的使用不會(huì)產(chǎn)生影響。
本文對(duì)共識(shí)機(jī)制的CAP理論分析按照下述步驟進(jìn)行:
1)了解算法的共識(shí)過(guò)程,畫(huà)出其共識(shí)過(guò)程的流程圖;
2)根據(jù)流程圖,判斷共識(shí)算法對(duì)交易的確認(rèn)是否需要等到多個(gè)區(qū)塊的確認(rèn)才算達(dá)成一致。如果需要多次確認(rèn),就是最終一致性,相反,則是強(qiáng)一致性;
3)根據(jù)CAP理論三選二的原則給出結(jié)論。
3.2.1 工作量證明機(jī)制(POW)
鮑照的《東武吟》作于元嘉二十七年北伐失利后,南朝國(guó)力已衰時(shí)。詩(shī)歌未脫去民歌說(shuō)唱的痕跡,如開(kāi)篇的稱呼:主人指聽(tīng)者,“賤子”與“仆”皆說(shuō)唱者謙稱。
POW是一個(gè)參與者對(duì)其他參與者關(guān)于他做過(guò)一定工作的證明。圖1是比特幣的POW共識(shí)流程,其中只要每新增2016個(gè)區(qū)塊,難度值就會(huì)進(jìn)行調(diào)整,調(diào)整的公式為新難度值=舊難度值*(過(guò)去2016個(gè)區(qū)塊耗費(fèi)的時(shí)長(zhǎng)/20160min)[14]。
POW在對(duì)區(qū)塊達(dá)成共識(shí)的過(guò)程中,可能存在分叉問(wèn)題,因此為了保證各節(jié)點(diǎn)數(shù)據(jù)的一致性,POW設(shè)計(jì)一筆交易被全網(wǎng)確認(rèn)需要6個(gè)區(qū)塊被確認(rèn),即一個(gè)小時(shí)。故POW是保證了可用性和分區(qū)容錯(cuò)性,對(duì)一致性進(jìn)行了弱化。
3.2.2 權(quán)益證明機(jī)制(POS)
POS是以系統(tǒng)相關(guān)的權(quán)益為依據(jù)來(lái)競(jìng)爭(zhēng)對(duì)某個(gè)區(qū)塊的記賬權(quán)。這里通過(guò)點(diǎn)點(diǎn)幣的共識(shí)來(lái)說(shuō)明POS共識(shí)算法的流程,如圖2。點(diǎn)點(diǎn)幣選取的權(quán)益是幣齡,節(jié)點(diǎn)獲得記賬權(quán)的機(jī)會(huì)與幣齡大小成正比,其中幣齡=幣數(shù)*持有幣的天數(shù)[15]。
圖1 比特幣POW共識(shí)流程圖
圖2 POS共識(shí)算法流程
POS目標(biāo)值的調(diào)整是由兩個(gè)區(qū)塊生成的時(shí)間間隔決定的,出塊速率控制在10min一個(gè),當(dāng)一個(gè)區(qū)塊被加入后,經(jīng)過(guò)多個(gè)區(qū)塊的確認(rèn),默認(rèn)其被全網(wǎng)寫(xiě)入。以CAP理論為指導(dǎo),POS采取的是弱化一致性,換取高可用性和分區(qū)容錯(cuò)性。
3.2.3 股份授權(quán)證明機(jī)制(DPOS)
股份授權(quán)證明機(jī)制是由所有節(jié)點(diǎn)投票選出見(jiàn)證人,見(jiàn)證人有生成區(qū)塊的權(quán)利。這里以比特股采用的DPOS機(jī)制為例,詳細(xì)說(shuō)明其共識(shí)的過(guò)程,如圖3。其中,節(jié)點(diǎn)投票的權(quán)重與持有的比特股數(shù)成正比。
圖3 DPOS共識(shí)過(guò)程
DPOS中,每個(gè)見(jiàn)證者有2s的時(shí)間生成區(qū)塊,當(dāng)所有見(jiàn)證者一次循環(huán)結(jié)束后,該區(qū)塊得到確認(rèn)。由此可見(jiàn),股份授權(quán)證明機(jī)制是達(dá)到最終一致的狀態(tài)。因此以CAP理論為指導(dǎo),DPOS采取的是弱化一致性,換取高可用性和分區(qū)容錯(cuò)性。
3.2.4 實(shí)用拜占庭容錯(cuò)協(xié)議(PBFT)
PBFT中R代表系統(tǒng)節(jié)點(diǎn)的集合,假設(shè)故障節(jié)點(diǎn)數(shù)為f個(gè),則整個(gè)系統(tǒng)的節(jié)點(diǎn)數(shù)為|R|=3f+1。因此為了保證系統(tǒng)的一致性,至少需要2f+1個(gè)節(jié)點(diǎn)進(jìn)行確認(rèn)才能達(dá)成共識(shí)。具體的共識(shí)流程如圖4。其中V代表視圖的編號(hào),N代表當(dāng)前請(qǐng)求的編號(hào),n指的是i節(jié)點(diǎn)的stable checkpoint的編號(hào),M指的是消息的具體內(nèi)容,d或D(m)指的是消息內(nèi)容提取的摘要,i代表當(dāng)前節(jié)點(diǎn)編號(hào),C代表2f+1個(gè)節(jié)點(diǎn)的有效checkpoint信息的集合,P代表i節(jié)點(diǎn)中上一個(gè)view中編號(hào)大于n并且到達(dá)prepared狀態(tài)的請(qǐng)求消息的集合,O代表pre-prepare消息的集合。
圖4 PBFT共識(shí)過(guò)程
從PBFT的共識(shí)流程發(fā)現(xiàn),PBFT不需要經(jīng)過(guò)多個(gè)區(qū)塊的確認(rèn),只需要至少2f+1個(gè)節(jié)點(diǎn)達(dá)成共識(shí)即可,一旦共識(shí)不可修改,可見(jiàn)其注重一致性,那么只能對(duì)可用性作一定的妥協(xié)。一旦故障節(jié)點(diǎn)大于m,那么系統(tǒng)就不能繼續(xù)執(zhí)行客戶端的請(qǐng)求。因此PBFT采取的是弱化可用性,換取強(qiáng)一致性和分區(qū)容錯(cuò)性。
3.2.5 Paxos共識(shí)算法
Paxos算法包括客戶端(Client)、提議者(Proposer)、接受者(Acceptor)、學(xué)習(xí)者(Learner)、領(lǐng)導(dǎo)者(Leader)五個(gè)角色,其中每個(gè)節(jié)點(diǎn)可以同時(shí)是多種角色。具體的共識(shí)流程如圖5。其中流程中的f代表最多可能出現(xiàn)的故障接受者節(jié)點(diǎn),那么至少需要2f+1個(gè)接受者節(jié)點(diǎn)。
圖5 Paxos算法共識(shí)過(guò)程
從Paxos共識(shí)算法流程來(lái)說(shuō),其只需要f+1個(gè)節(jié)點(diǎn)達(dá)成共識(shí)即可,一旦共識(shí),各個(gè)節(jié)點(diǎn)的賬本將保持一致,不需等待。因此Paxos是保證了強(qiáng)一致性和分區(qū)容錯(cuò)性,而對(duì)可用性進(jìn)行了弱化。
3.2.6 Raft共識(shí)算法
Raft算法將節(jié)點(diǎn)的狀態(tài)分為領(lǐng)導(dǎo)人(leader)、候選者(candidate)、跟隨者(follower)三種狀態(tài),每個(gè)節(jié)點(diǎn)只能同時(shí)處于一種狀態(tài)。其中領(lǐng)導(dǎo)人只有一個(gè)。具體的共識(shí)流程如圖6。
Raft共識(shí)算法將所有的權(quán)利交給領(lǐng)導(dǎo)人,只要領(lǐng)導(dǎo)人加入新交易記錄,那么其他的跟隨者也必須將交易寫(xiě)入自己的賬本。各節(jié)點(diǎn)的數(shù)據(jù)始終保持一致。故Raft是在確保強(qiáng)一致性和分區(qū)容錯(cuò)性的情況下,對(duì)可用性進(jìn)行了一定的弱化。
圖6 Raft共識(shí)流程
根據(jù)上述的分析,我們將共識(shí)機(jī)制的分析結(jié)果總結(jié)為表1。
表1 各共識(shí)機(jī)制的分析對(duì)比
本文從CAP理論的角度,對(duì)區(qū)塊鏈的部分共識(shí)算法進(jìn)行了分析與總結(jié)。首先給出了共識(shí)機(jī)制的定義,并說(shuō)明了分析思路;然后以流程圖的形式詳細(xì)說(shuō)明了部分共識(shí)機(jī)制的流程,并從CAP理論的角度按照分析思路給共識(shí)機(jī)制進(jìn)行了分析;最后進(jìn)行了總結(jié)。目前區(qū)塊鏈的應(yīng)用場(chǎng)景越來(lái)越多,本文的分析為區(qū)塊鏈的應(yīng)用提供了參考價(jià)值。我們可以根據(jù)應(yīng)用場(chǎng)景的需求,選取滿足需求的共識(shí)算法。