段 靚,呂 鑫,b,劉 凡,b
(河海大學(xué) a.計(jì)算機(jī)與信息學(xué)院; b.海岸災(zāi)害及防護(hù)教育部重點(diǎn)實(shí)驗(yàn)室,南京 210098)
區(qū)塊鏈作為一種去中心化的分布式系統(tǒng),鏈上的數(shù)據(jù)需要在全網(wǎng)節(jié)點(diǎn)間進(jìn)行一致性分發(fā)和冗余存儲(chǔ),以此保證數(shù)據(jù)無法被篡改或偽造[1]。這一特性是區(qū)塊鏈技術(shù)的優(yōu)勢(shì),但也是區(qū)塊鏈應(yīng)用的瓶頸。區(qū)塊鏈系統(tǒng)需要消耗大量的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源實(shí)現(xiàn)全網(wǎng)節(jié)點(diǎn)間的數(shù)據(jù)和業(yè)務(wù)協(xié)同,這使得區(qū)塊鏈系統(tǒng)在業(yè)務(wù)處理上的性能遠(yuǎn)低于傳統(tǒng)中心化的系統(tǒng)[2],而且網(wǎng)絡(luò)規(guī)模越大,這種差異就越明顯。
公有鏈的共識(shí)算法主要是從PoW(Proof of Work)和PoS(Proof of Stake)這2種算法上派生演化的,而聯(lián)盟鏈共識(shí)算法則大多基于經(jīng)典分布式一致性算法CFT(Crash Fault Tolerance)和BFT(Byzantine Fault Tolerance)[3-4]。無論是公有鏈還是聯(lián)盟鏈,采用分片技術(shù)和并行技術(shù)都可以解決區(qū)塊鏈平臺(tái)擴(kuò)展性問題。分片技術(shù)包括計(jì)算分片、通信分片和存儲(chǔ)分片,例如公有鏈采用的多鏈、跨鏈等混合共識(shí)機(jī)制[5],聯(lián)盟鏈采用的分組、分層共識(shí)機(jī)制等[6]。
本文提出一種基于信任委托的分層共識(shí)優(yōu)化機(jī)制。該機(jī)制將共識(shí)網(wǎng)絡(luò)劃分成不同的子區(qū)域,子區(qū)域內(nèi)的節(jié)點(diǎn)根據(jù)可信程度選舉出代理人委托其參與全局共識(shí)。
本文重點(diǎn)研究聯(lián)盟鏈的共識(shí)算法,這是因?yàn)楣墟溎壳白顝V泛的應(yīng)用場(chǎng)景還是開放環(huán)境中的加密貨幣,而在政府和企業(yè)級(jí)應(yīng)用場(chǎng)景中,節(jié)點(diǎn)都是經(jīng)過身份認(rèn)證的,因此多采用聯(lián)盟鏈架構(gòu)[7]。
聯(lián)盟鏈中最通用的共識(shí)協(xié)議就是實(shí)用拜占庭容錯(cuò)(Practical Byzantine Fault Tolerance,PBFT),其本質(zhì)是一種基于投票的共識(shí)機(jī)制[8]。當(dāng)節(jié)點(diǎn)數(shù)增大時(shí),共識(shí)交互消息會(huì)成幾何倍數(shù)增長(zhǎng)。如果節(jié)點(diǎn)分布在互聯(lián)網(wǎng)上,網(wǎng)絡(luò)延時(shí)會(huì)導(dǎo)致共識(shí)協(xié)議時(shí)間迅速增加,嚴(yán)重影響共識(shí)服務(wù)的吞吐量。為解決這一問題,業(yè)界主要從優(yōu)化共識(shí)協(xié)議和改進(jìn)共識(shí)架構(gòu)兩方面開展研究[9]。
1)優(yōu)化共識(shí)協(xié)議。文獻(xiàn)[10]提供一種基于聚合簽名的優(yōu)化方法dBFT,將m條消息簽名聚合為1條,空間復(fù)雜度降為原先的1/m,但計(jì)算復(fù)雜度提升為O(3m)。文獻(xiàn)[11]提出一種基于環(huán)簽名的PBFT區(qū)塊鏈共識(shí)算法改進(jìn)方案,節(jié)點(diǎn)在環(huán)簽名時(shí)自行組成環(huán),使PBFT算法能夠支持節(jié)點(diǎn)的動(dòng)態(tài)加入與退出,從而提高超時(shí)導(dǎo)致的共識(shí)效率低下問題。文獻(xiàn)[12]提出一種基于投票機(jī)制的優(yōu)化算法VPBFT。通過引入投票證明將共識(shí)節(jié)點(diǎn)分成投票人、管理人、候選人和普通用戶,候選人由投票人選舉產(chǎn)生。生產(chǎn)節(jié)點(diǎn)根據(jù)任期內(nèi)是否生成有效的數(shù)據(jù)塊來獲得相應(yīng)的分?jǐn)?shù),分?jǐn)?shù)高的節(jié)點(diǎn)將允許進(jìn)入下一輪投票。該方法消耗的帶寬是PBFT的2/3。文獻(xiàn)[13]提出一種基于Gossip協(xié)議的PBFT算法。該算法將PBFT的消息廣播改為利用Gossip協(xié)議,節(jié)點(diǎn)自行選擇鄰近節(jié)點(diǎn)進(jìn)行信息交換。通過主動(dòng)探測(cè)故障節(jié)點(diǎn),使共識(shí)網(wǎng)絡(luò)可以容錯(cuò)一半的節(jié)點(diǎn),達(dá)到XFT容錯(cuò)能力。文獻(xiàn)[14]提出一種不依賴計(jì)算能力的共識(shí)算法C-BFT。在主從多鏈模型中,使用時(shí)間閾值來約束各鏈之間的共識(shí)協(xié)作,動(dòng)態(tài)調(diào)整節(jié)點(diǎn)間的通信延遲,確保主鏈節(jié)點(diǎn)在時(shí)間閾值內(nèi)寫入數(shù)據(jù)。另有一些算法采用基于DAG的分布式賬本改進(jìn)性能,通過節(jié)點(diǎn)中非同步的平行共識(shí)來加快數(shù)據(jù)傳輸。文獻(xiàn)[15]提出一種基于Lachesis協(xié)議的PBFT算法ONLAY,使用分層和層次化的DAG圖對(duì)數(shù)據(jù)進(jìn)行異步排序以保障共識(shí)完成的時(shí)間?;谠撍惴ǖ腇antom平臺(tái)能達(dá)到300K TPS的吞吐量。
2)改進(jìn)共識(shí)架構(gòu)。無論是采用橫向分片還是縱向分層擴(kuò)展,其本質(zhì)上都是將節(jié)點(diǎn)劃分為各自獨(dú)立的空間。文獻(xiàn)[16]針對(duì)聯(lián)盟鏈提出一種多中心動(dòng)態(tài)共識(shí)機(jī)制,設(shè)計(jì)了一種主從多鏈結(jié)構(gòu),全局區(qū)塊鏈鏈接多個(gè)主體區(qū)塊鏈。每個(gè)主體(即中心)包含若干區(qū)塊鏈節(jié)點(diǎn),維護(hù)本主體的交易區(qū)塊鏈(即從鏈),所有主體再共同維護(hù)全局區(qū)塊鏈(即主鏈)。當(dāng)構(gòu)建全局區(qū)塊時(shí),每一輪都要由一個(gè)全局主節(jié)點(diǎn)從全網(wǎng)選出下一輪的全局節(jié)點(diǎn),采用并行方式構(gòu)建Merkle樹。該方法采用驗(yàn)證群組來解決數(shù)據(jù)全局一致性的問題。文獻(xiàn)[17]提出一種基于“組”的層次結(jié)構(gòu),將所有節(jié)點(diǎn)劃分為若干組,每組有一個(gè)主節(jié)點(diǎn)。層次共識(shí)分為局部和全局2個(gè)階段。首先,客戶節(jié)點(diǎn)將請(qǐng)求廣播給所有節(jié)點(diǎn),每一個(gè)分組都要在組內(nèi)進(jìn)行一次請(qǐng)求的局部共識(shí);然后,各個(gè)分組的主節(jié)點(diǎn)再進(jìn)行一次全局共識(shí),至此,整個(gè)請(qǐng)求才算完成。文獻(xiàn)[18]提出一種可伸縮動(dòng)態(tài)多代理層次化的PBFT算法SDMA-PBFA,可以將共識(shí)過程中的通信消息復(fù)雜度從O(n2)降至O(n·k·logkn)[18]。其基本思想是將節(jié)點(diǎn)劃分為若干組,每個(gè)組選出一個(gè)節(jié)點(diǎn)作為代理人??蛻艄?jié)點(diǎn)請(qǐng)求先分發(fā)給所有代理人,代理人再在分組內(nèi)部完成共識(shí)過程,最后由各個(gè)代理人通知客戶節(jié)點(diǎn)請(qǐng)求完成。文獻(xiàn)[19]同樣采用節(jié)點(diǎn)分組的方式,每個(gè)分組有一個(gè)領(lǐng)導(dǎo)人,PRE-PREPARE、PREPARE和COMMIT 3個(gè)階段都需要本組節(jié)點(diǎn)和其他組領(lǐng)導(dǎo)人節(jié)點(diǎn)參與。文獻(xiàn)[20]采用樹形拓?fù)錁?gòu)建共識(shí)網(wǎng)絡(luò),引入信譽(yù)模型降低錯(cuò)誤節(jié)點(diǎn)在共識(shí)過程中的影響,但共識(shí)消息仍要通過子網(wǎng)的父節(jié)點(diǎn)分發(fā)到子網(wǎng)內(nèi)進(jìn)行三階段共識(shí)。
盡管上述研究通過采用分片技術(shù)和代理人節(jié)點(diǎn)能夠降低共識(shí)消息復(fù)雜度,提升共識(shí)性能,但卻沒有很好地解決以下問題:即如何對(duì)成員可靠性進(jìn)行檢測(cè)和評(píng)估,確保選出可信的委員會(huì)成員,以保障共識(shí)網(wǎng)絡(luò)拓?fù)涞姆€(wěn)定;如果委員會(huì)成員是高可信的,分片共識(shí)協(xié)議能否進(jìn)一步簡(jiǎn)化,以提升共識(shí)網(wǎng)絡(luò)的吞吐量,如果委員會(huì)成員行為異常,共識(shí)協(xié)議能否采取主動(dòng)干預(yù)機(jī)制,以減輕共識(shí)請(qǐng)求時(shí)間的波動(dòng)。
針對(duì)上述問題,本文提出一種基于信任委托的分層共識(shí)優(yōu)化機(jī)制,在保證整體共識(shí)過程滿足PBFT協(xié)議有效性、一致性和完整性要求的同時(shí),降低每個(gè)階段參與共識(shí)的節(jié)點(diǎn)數(shù)量,提升共識(shí)網(wǎng)絡(luò)的吞吐量。
本文的設(shè)計(jì)思想包含信任、層次化和委托3個(gè)核心概念。下文分別定義這3個(gè)概念的內(nèi)涵。
1)信任。在社會(huì)治理領(lǐng)域,聯(lián)盟鏈?zhǔn)歉m合政府和企業(yè)構(gòu)建行業(yè)應(yīng)用的區(qū)塊鏈方案。這是因?yàn)榧尤肼?lián)盟鏈的節(jié)點(diǎn)需要經(jīng)過審核和授權(quán),節(jié)點(diǎn)的行為狀態(tài)相對(duì)穩(wěn)定,可以建立信任關(guān)系[21]。這里的“信任關(guān)系”不是主觀設(shè)定的關(guān)系,而是根據(jù)節(jié)點(diǎn)在生成區(qū)塊過程中的行為進(jìn)行客觀地評(píng)價(jià)。運(yùn)行速度快、能和大多數(shù)節(jié)點(diǎn)形成一致共識(shí)的節(jié)點(diǎn),其信任度就高;經(jīng)常響應(yīng)超時(shí)、共識(shí)消息發(fā)生錯(cuò)誤的節(jié)點(diǎn),其信任度就低。將節(jié)點(diǎn)依據(jù)信任度劃分成不同類型的節(jié)點(diǎn)后,就可以為不同節(jié)點(diǎn)分配共識(shí)過程中不同的任務(wù)。
2)層次化。在各行各業(yè)的分布式業(yè)務(wù)系統(tǒng)中,業(yè)務(wù)節(jié)點(diǎn)的交互和數(shù)據(jù)都存在局部現(xiàn)象。這是因?yàn)樯鐣?huì)網(wǎng)絡(luò)作為一種復(fù)雜網(wǎng)絡(luò),宏觀上有“小世界”,中觀上有“群聚特性”,微觀上有“中心性”“聚類性”等特征。聯(lián)盟鏈在實(shí)際場(chǎng)景中,節(jié)點(diǎn)也同樣具有小世界現(xiàn)象。例如大型機(jī)構(gòu)設(shè)立分支機(jī)構(gòu),省局下設(shè)地市和區(qū)縣分局,中心節(jié)點(diǎn)和邊緣節(jié)點(diǎn)協(xié)同處理業(yè)務(wù)請(qǐng)求?;诖怂枷?可以將區(qū)塊鏈平臺(tái)在同一平面內(nèi)的節(jié)點(diǎn)進(jìn)行層次化,劃分成若干個(gè)相互獨(dú)立的子區(qū)域。節(jié)點(diǎn)的信任度只要根據(jù)節(jié)點(diǎn)與子區(qū)域內(nèi)節(jié)點(diǎn)交互的行為進(jìn)行評(píng)價(jià),即只需得到子區(qū)域內(nèi)的節(jié)點(diǎn)認(rèn)可。
3)委托。委托是在完成節(jié)點(diǎn)層次化和建立的節(jié)點(diǎn)信任度之后進(jìn)行的。每個(gè)子區(qū)域有信任度的節(jié)點(diǎn)能被其他節(jié)點(diǎn)委托參與共識(shí),經(jīng)常故障或狀態(tài)異常的不可信節(jié)點(diǎn)不得參與共識(shí)。信任度高的節(jié)點(diǎn)可以作為子區(qū)域的代表,被委托參與各個(gè)子區(qū)域之間的協(xié)調(diào)共識(shí)。
本文的層次化不同于基于分片技術(shù)的共識(shí)算法。分片通常是指針對(duì)鏈上數(shù)據(jù)進(jìn)行劃分,構(gòu)建不同的子鏈,而本文是針對(duì)節(jié)點(diǎn)的交互范圍對(duì)節(jié)點(diǎn)進(jìn)行劃分,降低共識(shí)過程的網(wǎng)絡(luò)復(fù)雜度。此外,基于信任度的劃分,使得共識(shí)算法可以充分考慮節(jié)點(diǎn)的時(shí)延、抖動(dòng)、吞吐量、失敗率等性能指標(biāo),從而確保共識(shí)服務(wù)質(zhì)量。
本文提出的共識(shí)機(jī)制是一個(gè)基于“監(jiān)控-評(píng)價(jià)-反饋”的流程,包含狀態(tài)監(jiān)控、信任度評(píng)價(jià)、委托代理人和分層共識(shí)4個(gè)部分,如圖1所示。其中,節(jié)點(diǎn)狀態(tài)監(jiān)控是基礎(chǔ),信任度評(píng)價(jià)是核心,委托代理人是手段,分層共識(shí)是目標(biāo),4個(gè)階段相互關(guān)聯(lián),循環(huán)往復(fù)。
圖1 監(jiān)控-評(píng)價(jià)-反饋系統(tǒng)流程Fig.1 Procedure of monitor-evaluate-feedback system
狀態(tài)監(jiān)控包括節(jié)點(diǎn)狀態(tài)監(jiān)控和共識(shí)過程監(jiān)控。前者主要檢測(cè)節(jié)點(diǎn)的網(wǎng)絡(luò)和服務(wù)狀態(tài),例如服務(wù)是否在線、節(jié)點(diǎn)是否宕機(jī)等;后者則監(jiān)控節(jié)點(diǎn)共識(shí)過程中的行為,例如完成消息的時(shí)間、共識(shí)的結(jié)果等。
信任度評(píng)價(jià)根據(jù)狀態(tài)監(jiān)控的數(shù)據(jù)計(jì)算節(jié)點(diǎn)信任度的各個(gè)影響因子,進(jìn)而對(duì)當(dāng)次共識(shí)過程中節(jié)點(diǎn)的表現(xiàn)進(jìn)行評(píng)價(jià)。信任度更新則是結(jié)合節(jié)點(diǎn)過往信任度,合理穩(wěn)健地更新節(jié)點(diǎn)的信任度,保障節(jié)點(diǎn)信任狀態(tài)的穩(wěn)定。
委托代理人則依據(jù)各個(gè)節(jié)點(diǎn)的信任度,選舉出不同級(jí)別的代理人參與分層共識(shí)。在分層共識(shí)的過程中,共識(shí)算法還會(huì)依據(jù)節(jié)點(diǎn)的信任狀態(tài)動(dòng)態(tài)選擇可靠的共識(shí)節(jié)點(diǎn),識(shí)別故障或惡意節(jié)點(diǎn),并提前干預(yù),從而改善共識(shí)算法的性能,提升系統(tǒng)共識(shí)效率。
對(duì)共識(shí)節(jié)點(diǎn)可信度的評(píng)價(jià)主要基于節(jié)點(diǎn)的3種行為,即正常、故障和惡意行為。節(jié)點(diǎn)的不同行為會(huì)導(dǎo)致信任度發(fā)生相應(yīng)變化。在上一輪評(píng)估信任度的基礎(chǔ)上,正常行為會(huì)增加信任度,故障行為會(huì)減少信任度,一旦發(fā)現(xiàn)惡意行為,信任度直接歸0。
根據(jù)信任度的大小進(jìn)一步將節(jié)點(diǎn)分成4種類型。使用3個(gè)閾值Ctrust、Cnormal和Cabnormal分別表示可信節(jié)點(diǎn)、普通節(jié)點(diǎn)和故障節(jié)點(diǎn)的信任度下限,也就是各類型節(jié)點(diǎn)的信任度閾值,其值滿足Ctrust>Cnormal>Cabnormal。Ctrust默認(rèn)值為0.8,Cnormal默認(rèn)值為0.5,Cabnormal默認(rèn)值為0.2。系統(tǒng)初始化時(shí)節(jié)點(diǎn)狀態(tài)均為普通節(jié)點(diǎn),如果某節(jié)點(diǎn)長(zhǎng)期穩(wěn)定運(yùn)行,性能優(yōu)越,則隨著其可信度增高,節(jié)點(diǎn)將會(huì)升級(jí)為可信節(jié)點(diǎn);如果某節(jié)點(diǎn)運(yùn)行不穩(wěn)定,可信度會(huì)逐步降低,節(jié)點(diǎn)降級(jí)為故障節(jié)點(diǎn);如果節(jié)點(diǎn)故障長(zhǎng)時(shí)間得不到修復(fù),可信度降至Cabnormal之下,或者被檢測(cè)存在惡意行為,則將被立刻標(biāo)記為惡意節(jié)點(diǎn),并拒絕其參與共識(shí)過程。
信任度的計(jì)算基于對(duì)節(jié)點(diǎn)行為的評(píng)估,節(jié)點(diǎn)行為可以從不同角度描述。例如有的節(jié)點(diǎn)活躍度高,頻繁參與共識(shí),有的節(jié)點(diǎn)運(yùn)行不穩(wěn)定,經(jīng)常超時(shí)等等。這些不同的表現(xiàn)可通過節(jié)點(diǎn)活躍情況、總體運(yùn)行狀況、事務(wù)影響程度、節(jié)點(diǎn)行為等因素來體現(xiàn)。這些因素可以統(tǒng)稱為信任度因子。將這些相關(guān)因子以不同權(quán)重加入信用度的計(jì)算中,就可以通過信用度評(píng)價(jià)共識(shí)過程中節(jié)點(diǎn)的行為狀態(tài)。
定義1(節(jié)點(diǎn)活躍度) 指節(jié)點(diǎn)在一定時(shí)間T內(nèi)參與共識(shí)的頻度,反映了節(jié)點(diǎn)在系統(tǒng)中的活躍程度。節(jié)點(diǎn)活躍度ρ(n)表示為:
(1)
定義2(節(jié)點(diǎn)共識(shí)完成率) 指節(jié)點(diǎn)完成其所參與共識(shí)的頻度,反映了節(jié)點(diǎn)在共識(shí)網(wǎng)絡(luò)中的運(yùn)行狀況。節(jié)點(diǎn)共識(shí)完成率γ表示為:
(2)
其中,s表示成功完成的共識(shí)次數(shù),n為總共參與共識(shí)的次數(shù),γ值隨s與n比值增大而增大,γ越大表示節(jié)點(diǎn)越穩(wěn)定。
定義3(節(jié)點(diǎn)歷史影響度) 指節(jié)點(diǎn)歷史信任度對(duì)當(dāng)前信任度的影響程度。節(jié)點(diǎn)歷史影響度ω(Δt)表示為:
(3)
定義4(事務(wù)重要級(jí)別因子) 用于標(biāo)識(shí)請(qǐng)求事務(wù)的重要程度。設(shè)交易重要性參數(shù)為m,則事務(wù)影響函數(shù)F(m)可表示為:
(4)
其中,M0為交易重要性參數(shù)的閾值,本文取3,F(m)的值隨m值增大而增大,F(m)越大表示事務(wù)重要程度越高。
定義5(行為評(píng)價(jià)值) 對(duì)節(jié)點(diǎn)參與共識(shí)過程的行為進(jìn)行綜合評(píng)價(jià),行為評(píng)價(jià)值E表示為:
(5)
在每次共識(shí)過程完成后,系統(tǒng)會(huì)對(duì)各節(jié)點(diǎn)在本次過程中的表現(xiàn)進(jìn)行評(píng)價(jià)。子區(qū)域i中節(jié)點(diǎn)j的信任度評(píng)價(jià)Sij表示為:
(6)
其中,Cinit為節(jié)點(diǎn)信任度初值,ρ(n)為節(jié)點(diǎn)活躍度,γ為共識(shí)完成率,ω(Δt)為歷史影響度,F(m)為事務(wù)重要級(jí)別因子,E為行為評(píng)價(jià)值。該模型可以準(zhǔn)確地反映節(jié)點(diǎn)在本次共識(shí)過程中的表現(xiàn)。如果節(jié)點(diǎn)活躍度高且共識(shí)的完成情況好,或者完成級(jí)別較高的事務(wù)獲得較好的評(píng)價(jià),都會(huì)使節(jié)點(diǎn)獲得較高的信任度評(píng)價(jià)。反之,如果節(jié)點(diǎn)活躍度較低,無法完成共識(shí)過程,則會(huì)導(dǎo)致節(jié)點(diǎn)獲得較低的信任度評(píng)價(jià)。
在完成對(duì)節(jié)點(diǎn)行為的評(píng)價(jià)后,需要以一定的策略更新節(jié)點(diǎn)的信任度,從而更新節(jié)點(diǎn)的信任類型。
設(shè)節(jié)點(diǎn)在開始共識(shí)前的信任度為Tij,本次共識(shí)過程完成后,節(jié)點(diǎn)信任度的評(píng)價(jià)值為Sij,則節(jié)點(diǎn)信任度按式(7)的規(guī)則更新:
(7)
其中,θ為信任度更新調(diào)節(jié)因子,若節(jié)點(diǎn)本次信任度評(píng)價(jià)高于往次,可適當(dāng)調(diào)高信任度,反之則調(diào)低信任度。
如果節(jié)點(diǎn)因故障發(fā)生離線,信用度Cij會(huì)逐步衰減,即每次共識(shí)評(píng)價(jià)值Sij值為Cinit,直至Cij∈[0.9·Cinit,1.1·Cinit]或節(jié)點(diǎn)重新恢復(fù)服務(wù)。如果節(jié)點(diǎn)有惡意行為,信任度會(huì)變?yōu)?,后續(xù)該節(jié)點(diǎn)將被禁止參與共識(shí)。
信任度更新調(diào)節(jié)因子θ按式(8)的規(guī)則更新:
(8)
當(dāng)本次信用度評(píng)價(jià)與前次評(píng)價(jià)值相差較大時(shí),較小的信用度所占權(quán)重較大。這是因?yàn)楫?dāng)信用度評(píng)價(jià)值突然變大時(shí),很有可能是節(jié)點(diǎn)在利用重要級(jí)別事務(wù)惡意提升自己的信任度,而該因子調(diào)節(jié)方式可以抑制信用度異常變化行為。
當(dāng)節(jié)點(diǎn)完成信任度評(píng)估并確認(rèn)信任類型后,就可以依據(jù)信任度進(jìn)行委托選舉。
PBFT協(xié)議本質(zhì)上是一種基于投票的共識(shí)機(jī)制,下面參照選舉制度為例來闡述節(jié)點(diǎn)委托的概念。圖2是一個(gè)三層的樹狀共識(shí)網(wǎng)絡(luò),其中節(jié)點(diǎn)包含4種類型:1)三級(jí)代理人節(jié)點(diǎn),由信任類型為普通的節(jié)點(diǎn)組成,如果把每個(gè)子區(qū)域看做一個(gè)州,其類似于州一級(jí)的議員;2)二級(jí)代理人節(jié)點(diǎn),從其直接子節(jié)點(diǎn)(即圖2中三級(jí)代理人節(jié)點(diǎn))中的信任類型為可信的節(jié)點(diǎn)中選出,可以代表其所有子節(jié)點(diǎn),類似于國(guó)會(huì)議員;3)一級(jí)代理人節(jié)點(diǎn),從全網(wǎng)二級(jí)代理人節(jié)點(diǎn)中選出,具有最高的共識(shí)權(quán)重,類似于大選中獲勝的總統(tǒng);4)非共識(shí)節(jié)點(diǎn),通常是故障或惡意節(jié)點(diǎn),不參與共識(shí)過程,由于選舉是自下而上的,當(dāng)?shù)鸵患?jí)代理人升級(jí)為高一級(jí)代理人之后,其空缺的位置將根據(jù)節(jié)點(diǎn)信任度排名自動(dòng)遞補(bǔ)。
圖2 分層共識(shí)網(wǎng)絡(luò)架構(gòu)Fig.2 Hierarchical consensus network architecture
在系統(tǒng)初始化階段,根據(jù)應(yīng)用需求、網(wǎng)絡(luò)環(huán)境等條件預(yù)先規(guī)劃樹狀網(wǎng)絡(luò)結(jié)構(gòu),并根據(jù)節(jié)點(diǎn)的處理能力設(shè)置初始時(shí)各級(jí)代理人節(jié)點(diǎn)。在節(jié)點(diǎn)完成組網(wǎng)后,各級(jí)別節(jié)點(diǎn)分工合作,實(shí)現(xiàn)對(duì)全網(wǎng)節(jié)點(diǎn)請(qǐng)求事務(wù)的共識(shí)過程。類似于各級(jí)議員和總統(tǒng)分工合作實(shí)現(xiàn)對(duì)國(guó)家事務(wù)的治理。
為降低全網(wǎng)共識(shí)過程的通信復(fù)雜度,將共識(shí)分為局部和全局兩級(jí)共識(shí)過程。首先是各個(gè)子區(qū)域內(nèi)的節(jié)點(diǎn)進(jìn)行局部共識(shí),子區(qū)域的二級(jí)代理人節(jié)點(diǎn)負(fù)責(zé)定時(shí)生成區(qū)塊,二級(jí)和三級(jí)代理人節(jié)點(diǎn)會(huì)先對(duì)區(qū)塊進(jìn)行一次局部共識(shí)過程,類似州議員投票形成一個(gè)州議案。全網(wǎng)所有的二級(jí)代理人和一級(jí)代理人再對(duì)區(qū)塊進(jìn)行一次全局共識(shí)過程,對(duì)區(qū)塊進(jìn)行最終確認(rèn)。其他子區(qū)域的二級(jí)代理人節(jié)點(diǎn)將區(qū)塊異步地分發(fā)給各自區(qū)域內(nèi)的三級(jí)代理人節(jié)點(diǎn),更新其節(jié)點(diǎn)的賬本數(shù)據(jù)庫。類似國(guó)會(huì)議員和總統(tǒng)對(duì)州議會(huì)的提案進(jìn)行投票,形成全國(guó)性的法案,并將法案分發(fā)給其他各州執(zhí)行。
與其他基于分組的PBFT共識(shí)機(jī)制不同之處在于,由于采用了基于節(jié)點(diǎn)信任度的授權(quán),參與全局共識(shí)的節(jié)點(diǎn)是可信節(jié)點(diǎn),可以代表其所在區(qū)域的所有節(jié)點(diǎn)進(jìn)行共識(shí)投票,這樣極大地降低了共識(shí)的通信復(fù)雜度。
平臺(tái)將根據(jù)各級(jí)節(jié)點(diǎn)在共識(shí)過程中的表現(xiàn)(如完成共識(shí)的時(shí)間)確定節(jié)點(diǎn)的信任度。當(dāng)某個(gè)代理人節(jié)點(diǎn)的信任度低于特定的閾值或因故障不能正常提供服務(wù)時(shí),平臺(tái)將重新選舉新的代理人。當(dāng)重新選舉時(shí),如果是二級(jí)代理人節(jié)點(diǎn),則僅需要本區(qū)域內(nèi)的節(jié)點(diǎn)完成一次選舉;如果是一級(jí)代理人節(jié)點(diǎn),則需要全網(wǎng)節(jié)點(diǎn)重新進(jìn)行選舉。
定義9(代理人節(jié)點(diǎn)狀態(tài)) 代理人節(jié)點(diǎn)分為:1)正常狀態(tài),即節(jié)點(diǎn)可以在規(guī)定時(shí)間內(nèi)完成共識(shí)過程;2)故障狀態(tài),即節(jié)點(diǎn)因?yàn)榉?wù)器宕機(jī)或網(wǎng)絡(luò)中斷導(dǎo)致的故障狀態(tài),該故障狀態(tài)如果能在指定時(shí)間內(nèi)恢復(fù)正常狀態(tài),則可以不重新選舉代理人節(jié)點(diǎn);3)異常狀態(tài),即節(jié)點(diǎn)被檢測(cè)出惡意破壞和攻擊PBFT共識(shí)過程,此時(shí),該節(jié)點(diǎn)被排除出共識(shí)網(wǎng)絡(luò),系統(tǒng)重新選擇代理人節(jié)點(diǎn)替代其職能。
定義10(法定選舉票數(shù)) 共識(shí)網(wǎng)絡(luò)完成共識(shí)過程需要的全網(wǎng)節(jié)點(diǎn)的最少票數(shù)。一個(gè)共識(shí)節(jié)點(diǎn)只有一張選票,但二級(jí)代理人節(jié)點(diǎn)在全局共識(shí)時(shí)可以擁有子區(qū)域內(nèi)的所有選票,類似大選中的贏者通吃策略。
定義11(票數(shù)權(quán)重) 一級(jí)和二級(jí)代理人節(jié)點(diǎn)在進(jìn)行全局共識(shí)過程中代表其子節(jié)點(diǎn)票數(shù)的權(quán)重。如某個(gè)二級(jí)代理人節(jié)點(diǎn)下有10個(gè)三級(jí)代理人節(jié)點(diǎn)。當(dāng)權(quán)重為100%時(shí),其全局共識(shí)算作10張選票。當(dāng)權(quán)重為50%時(shí),其全局權(quán)重算作5張選票。票權(quán)隨著節(jié)點(diǎn)信用度的變化而改變。
定義12(區(qū)塊) 區(qū)塊鏈上的區(qū)塊由一組請(qǐng)求事務(wù)及其哈希值組成,表示為B=([tx1,tx2,…,txk],h)。區(qū)塊在全局有唯一的序號(hào)s。
定義13(局部共識(shí)) 每個(gè)子集合內(nèi)的節(jié)點(diǎn)執(zhí)行PBFT協(xié)議,完成共識(shí)過程,得到一個(gè)局部合法的區(qū)塊。
定義14(全局共識(shí)) 代表各個(gè)子集的二級(jí)代理人節(jié)點(diǎn)和一級(jí)代理人節(jié)點(diǎn)執(zhí)行PBFT協(xié)議,對(duì)局部共識(shí)進(jìn)行二次共識(shí)過程,得到最終全局合法的區(qū)塊。
本文提出的基于信任授權(quán)的分層共識(shí)協(xié)議TDH-PBFT,其核心思想是通過對(duì)共識(shí)節(jié)點(diǎn)進(jìn)行劃分后,利用不同子區(qū)域的局部共識(shí)和委托代理人的全局共識(shí)降低傳統(tǒng)PBFT協(xié)議連接的節(jié)點(diǎn)數(shù)量,從而降低完成共識(shí)的時(shí)間,提高系統(tǒng)的吞吐量。
在聯(lián)盟鏈共識(shí)網(wǎng)絡(luò)中,各級(jí)代理人節(jié)點(diǎn)可以由管理方預(yù)先設(shè)定,也可以隨機(jī)從節(jié)點(diǎn)中選擇。當(dāng)節(jié)點(diǎn)運(yùn)行一段時(shí)間,更新節(jié)點(diǎn)信任度之后,即可以依據(jù)信任度定期選舉各級(jí)代理人節(jié)點(diǎn)。
代理人選舉算法如算法1所示。
算法1TDH-PBFT代理人選舉算法
輸入對(duì)等數(shù)量n,對(duì)等節(jié)點(diǎn)N[n],組數(shù)m,節(jié)點(diǎn)組數(shù)G[m][n],三級(jí)代理人節(jié)點(diǎn)數(shù)TD_number[m],投票人權(quán)重FD_weight,SD_weight[m]
全局變量:FD,SD[m],TD[m][n],FD_credit,SD_credit[m],TD_credit[m][n]
1.procedure TDHPBFT_ELECTION()
2.for I ← 0,m do
3.TD[i][n]←delegatorElection(G[i][n],TD_number[i]+1)
4.end for
5.SD[m] ← delegatorElection(TD[m][n],1)
6.FD,k ← delegatorElection(SD[m],1)
7.SD[k] ← delegatorElection(TD[k][n],1)
8.TD[k][n] ← delegatorElection(G[k][n],1)
9.end procedure
H-PBFT初始化算法首先從各個(gè)子集中選取三級(jí)代理人節(jié)點(diǎn)。這里選擇的數(shù)量要比指定的三級(jí)代理人數(shù)量多一個(gè),因?yàn)楸贿x出的三級(jí)代理人節(jié)點(diǎn)將再執(zhí)行一次delegatorElection,推舉出二級(jí)代理人節(jié)點(diǎn)。同樣,二級(jí)代理人節(jié)點(diǎn)將選舉出擁有最高共識(shí)權(quán)重的一級(jí)代理人節(jié)點(diǎn)。假設(shè)被選中的一級(jí)代理人來自第k個(gè)集合,此時(shí),由于k集合二級(jí)代理人晉升導(dǎo)致其崗位空缺。該集合將先從三級(jí)代理人中補(bǔ)選一個(gè)二級(jí)代理人,再從普通節(jié)點(diǎn)中增補(bǔ)一個(gè)三級(jí)代理人。
不同信任狀態(tài)的節(jié)點(diǎn)擁有不同的權(quán)限??尚殴?jié)點(diǎn)權(quán)限最大,通常是一級(jí)、二級(jí)代理人節(jié)點(diǎn),或者有機(jī)會(huì)作為候選人被選為一級(jí)、二級(jí)代理人節(jié)點(diǎn)。普通節(jié)點(diǎn)作為三級(jí)代理人節(jié)點(diǎn)正常參與局部共識(shí)過程。故障節(jié)點(diǎn)雖然狀態(tài)不穩(wěn)定,但仍然可以參與共識(shí)。但是一旦共識(shí)消息響應(yīng)超過時(shí)限,二級(jí)代理人節(jié)點(diǎn)可以在滿足允許的容錯(cuò)節(jié)點(diǎn)數(shù)量前提下,主動(dòng)放棄等待其返回的消息。惡意節(jié)點(diǎn)不參與共識(shí),應(yīng)及時(shí)通知系統(tǒng)管理員進(jìn)行故障修復(fù)。
TDH-PBFT分層共識(shí)協(xié)議分為本地共識(shí)和全局共識(shí)2個(gè)階段執(zhí)行:
階段1(子集內(nèi)部的本地共識(shí)階段) 子集內(nèi)的二級(jí)代理人節(jié)點(diǎn)發(fā)起本地共識(shí)。由于子集內(nèi)有不少于4個(gè)節(jié)點(diǎn)參與共識(shí),即節(jié)點(diǎn)數(shù)大于3f+1,因此可以抵御f個(gè)惡意節(jié)點(diǎn)的拜占庭攻擊。共識(shí)過程分為PROPOSE、WRITE和ACCEPT 3步。二級(jí)代理人節(jié)點(diǎn)首先向其他節(jié)點(diǎn)廣播PROPOSE消息。其他節(jié)點(diǎn)驗(yàn)證PROPOSE消息后就進(jìn)入WRITE階段,廣播WRITE消息。當(dāng)各節(jié)點(diǎn)接收到2f+1個(gè)WRITE消息后,節(jié)點(diǎn)進(jìn)入ACCEPT階段,廣播ACCEPT消息。當(dāng)各節(jié)點(diǎn)接收到2f+1個(gè)ACCEPT消息后,表示大部分節(jié)點(diǎn)對(duì)二級(jí)代理人節(jié)點(diǎn)發(fā)起的請(qǐng)求達(dá)成了共識(shí)。此時(shí),階段1的本地共識(shí)完成。
階段2(子集間的全局共識(shí)階段) 在本地共識(shí)階段完成后,接收到足夠數(shù)量消息的二級(jí)代理人節(jié)點(diǎn),將作為成員參加全局共識(shí)過程。首先向一級(jí)代理人節(jié)點(diǎn)和各個(gè)子集的二級(jí)代理人節(jié)點(diǎn)廣播PROPOSE消息。這里各子集二級(jí)代理人不需要再將消息轉(zhuǎn)發(fā)到子集內(nèi)部進(jìn)行本地共識(shí),而是作為各自子集的全權(quán)代表對(duì)消息進(jìn)行投票,具體代表的票數(shù)通過投票權(quán)數(shù)控制。例如,某個(gè)子集內(nèi)有4個(gè)節(jié)點(diǎn),投票權(quán)重為100%,二級(jí)代理人節(jié)點(diǎn)擁有4張票權(quán),若投票權(quán)重為50%,則擁有2張票權(quán)。按照此規(guī)則,各節(jié)點(diǎn)開始廣播WRITE消息。當(dāng)各節(jié)點(diǎn)接收到2f+1個(gè)WRITE消息后,節(jié)點(diǎn)進(jìn)入ACCEPT階段,并廣播ACCEPT消息。當(dāng)各節(jié)點(diǎn)接收到2f+1個(gè)ACCEPT消息后,表示大部分節(jié)點(diǎn)對(duì)二級(jí)代理人發(fā)來的請(qǐng)求達(dá)成了共識(shí)。此時(shí),階段2的全局共識(shí)完成,一級(jí)和二級(jí)代理人將區(qū)塊寫入賬本。各子集的二級(jí)代理人通知子集內(nèi)部其他節(jié)點(diǎn),各節(jié)點(diǎn)更新本地區(qū)塊鏈賬本,實(shí)現(xiàn)共識(shí)網(wǎng)絡(luò)數(shù)據(jù)的最終一致性。
分層共識(shí)協(xié)議消息示意圖如圖3所示。
圖3 分層共識(shí)協(xié)議消息示意圖Fig.3 Schematic diagram of hierarchical consensus protocol messages
分層共識(shí)算法如算法2所示。
算法2TDH-PBFT分層共識(shí)算法
1.Initialisation
2.s ← 0
3.B ← ⊥
4.D ← ⊥
5.accepted ← {⊥}
6.
7.Local propose phase
8.send LOCAL_PROPOSE
9.
10.Upon LOCAL_PROPOSE
11.s ← sp
12.B ← Bp
13.begin Local write phase
14.
15.Local write phase
16.D ← digest(B)
17.send LOCAL_WRITE
18.wait for majority of LOCAL_WRITE
19.send LOCAL_ACCEPT
20.
21.Upon LOCAL_ACCEPT
22.if Dp= D then
23.accepted ← accepted {delegator}
24.if accepted contains majority of delegators then
25.begin Global propose phase
26.
27.Global propose phase
28.send GLOBAL_PROPOSE
29.
30.Upon GLOBAL_PROPOSE
31.s ← sp
32.B ← Bp
33.begin Global write phase
34.
35.Global write phase
36.D ← digest(B)
37.send GLOBAL_WRITE
38.wait for majority of GLOBAL_WRITE
39.send GLOBAL_ACCEPT
40.
41.Upon GLOBAL_ACCEPT
42.if Dp=D then
43.accepted ← accepted {delegator}
44.if accepted contains majority of delegators then
45.decided on B
在經(jīng)典PBFT算法中,一個(gè)節(jié)點(diǎn)只擁有一張票權(quán)。建立可變票權(quán)機(jī)制可以進(jìn)一步優(yōu)化共識(shí)算法,增強(qiáng)共識(shí)算法的容錯(cuò)能力。
節(jié)點(diǎn)的投票權(quán)數(shù)是根據(jù)節(jié)點(diǎn)的信任狀態(tài)決定的??尚殴?jié)點(diǎn)通常具有更高的票權(quán),用Vtrust表示為:
(9)
其中,Nabnormal為故障節(jié)點(diǎn)數(shù)量,Ntrust為可信節(jié)點(diǎn)數(shù)量,N為參與共識(shí)的節(jié)點(diǎn)總數(shù)。從式(9)可以看出,故障節(jié)點(diǎn)數(shù)增加或可信節(jié)點(diǎn)數(shù)減少都會(huì)提升可信節(jié)點(diǎn)的投票權(quán)數(shù)。
普通節(jié)點(diǎn)投票權(quán)用Vnormal表示為:
(10)
其中,Nnormal為普通節(jié)點(diǎn)數(shù)量,其權(quán)重同樣受到故障節(jié)點(diǎn)和普通節(jié)點(diǎn)數(shù)量的影響。如果當(dāng)前系統(tǒng)內(nèi)沒有可信節(jié)點(diǎn),可以進(jìn)一步提升普通節(jié)點(diǎn)的票權(quán),如式(11)所示:
(11)
故障節(jié)點(diǎn)投票權(quán)用Vabnormal表示為:
(12)
故障節(jié)點(diǎn)投票權(quán)數(shù)主要取決于故障節(jié)點(diǎn)占共識(shí)總節(jié)點(diǎn)數(shù)的大小。故障節(jié)點(diǎn)越多,其票權(quán)就越低。惡意節(jié)點(diǎn)沒有投票權(quán),則不參與共識(shí)過程。
利用節(jié)點(diǎn)的信任度,可以在共識(shí)開始前和WRITE、ACCEPT消息完成后進(jìn)一步優(yōu)化共識(shí)過程。
如圖4所示,當(dāng)共識(shí)過程開始時(shí),二級(jí)代理人節(jié)點(diǎn)先將各節(jié)點(diǎn)按信用度高低排序。排除惡意節(jié)點(diǎn),將可信節(jié)點(diǎn)、正常節(jié)點(diǎn)和異常節(jié)點(diǎn)作為本次共識(shí)的節(jié)點(diǎn)。
圖4 基于信任度的共識(shí)過程優(yōu)化示意圖Fig.4 Schematic diagram of consensus process optimization based on trust degree
在WRITE階段,三級(jí)代理人節(jié)點(diǎn)將WRITE消息廣播給其他共識(shí)節(jié)點(diǎn),當(dāng)二級(jí)代理人節(jié)點(diǎn)收到2f+1個(gè)確認(rèn)消息后,進(jìn)入ACCEPT階段。如果此時(shí)有節(jié)點(diǎn)的消息沒有正常返回,或者有惡意消息,在保證2/3共識(shí)節(jié)點(diǎn)數(shù)量的前提下,該節(jié)點(diǎn)將被移除,不再參與后續(xù)共識(shí)。二級(jí)代理人節(jié)點(diǎn)通過ACCEPT消息的附加屬性將移除的節(jié)點(diǎn)通知其他三級(jí)代理人節(jié)點(diǎn)。
在ACCEPT階段,三級(jí)代理人節(jié)點(diǎn)將WRITE消息廣播給其他共識(shí)節(jié)點(diǎn),當(dāng)二級(jí)代理人節(jié)點(diǎn)收到2f+1個(gè)確認(rèn)消息后共識(shí)達(dá)成。二級(jí)代理人記錄各節(jié)點(diǎn)在共識(shí)過程中的行為和狀態(tài),計(jì)算并更新節(jié)點(diǎn)信用值和節(jié)點(diǎn)信用狀態(tài),再將各節(jié)點(diǎn)最新信任度表廣播給各個(gè)三級(jí)代理人節(jié)點(diǎn)。
下文證明采用TDH-PBFT協(xié)議實(shí)現(xiàn)分布式一致性,并且滿足分層共識(shí)網(wǎng)絡(luò)的活性和安全屬性。
證明由于TDH-PBFT協(xié)議包含了局部共識(shí)和全局共識(shí)2個(gè)階段,下面將通過分析2個(gè)階段中協(xié)議的執(zhí)行過程來證明TDH-PBFT可以實(shí)現(xiàn)分布式一致性。
綜上所述,TDH-PBFT共識(shí)過程是2個(gè)連續(xù)的PBFT過程,且區(qū)塊序號(hào)在2次協(xié)議執(zhí)行中保持不變。由于PBFT協(xié)議已被證明實(shí)現(xiàn)了分布式一致性,因此TDH-PBFT在全局共識(shí)協(xié)議中實(shí)現(xiàn)了一致性,滿足區(qū)塊鏈網(wǎng)絡(luò)的有效性、一致性、完整性和全序關(guān)系等屬性。
引理1TDH-PBFT協(xié)議滿足分層共識(shí)網(wǎng)絡(luò)有效性Validity。
1)如果二級(jí)代理人SDi未被錯(cuò)誤懷疑,則所有參與全局共識(shí)的節(jié)點(diǎn)都會(huì)對(duì)區(qū)塊B達(dá)成共識(shí),即所有無故障的二級(jí)代理人節(jié)點(diǎn)都會(huì)獲得B,并將該區(qū)塊分發(fā)給各自區(qū)域內(nèi)的節(jié)點(diǎn)進(jìn)行提交。如果某個(gè)二級(jí)代理人發(fā)生故障,它會(huì)先根據(jù)全局故障恢復(fù)機(jī)制得到處理,并最終獲取區(qū)塊B。因此,請(qǐng)求tx將最終在共識(shí)過程中被提交。
引理2TDH-PBFT協(xié)議滿足分層共識(shí)網(wǎng)絡(luò)一致性Agreement。
證明如果某個(gè)子區(qū)域i內(nèi)的節(jié)點(diǎn)N提交一個(gè)請(qǐng)求tx,根據(jù)分布式共識(shí)服務(wù)的“連續(xù)序號(hào)”和“不重復(fù)請(qǐng)求”屬性,則有:1)該節(jié)點(diǎn)所在區(qū)域的二級(jí)代理人節(jié)點(diǎn)SDi必然提交了包含tx且序號(hào)為s的區(qū)塊B;2)區(qū)塊B必然已經(jīng)完成了一次全局共識(shí);3)各級(jí)節(jié)點(diǎn)必然已經(jīng)獲取了所有小于序號(hào)s的區(qū)塊;4)沒有任何小于序號(hào)s的區(qū)塊會(huì)包含tx。由此可得,在分層共識(shí)網(wǎng)絡(luò)中,如果正常狀態(tài)的代理人節(jié)點(diǎn)接收到序號(hào)為s的區(qū)塊B和序號(hào)為s′的區(qū)塊B′,若s=s′,則B=B′。
引理3TDH-PBFT協(xié)議滿足分層共識(shí)網(wǎng)絡(luò)完整性Integrity。
證明假設(shè)某二級(jí)代理人節(jié)點(diǎn)SDi發(fā)送了序號(hào)為s+1的區(qū)塊Bs+1,根據(jù)分布式共識(shí)服務(wù)的“連續(xù)序號(hào)”和“不重復(fù)請(qǐng)求”屬性,則必然有某二級(jí)代理人節(jié)點(diǎn)SDj已經(jīng)提交了序號(hào)為s的區(qū)塊Bs,且該區(qū)塊已經(jīng)完成全局共識(shí),并被各節(jié)點(diǎn)提交至賬本。二級(jí)代理人節(jié)點(diǎn)SDi在發(fā)起請(qǐng)求s+1前,使用哈希函數(shù)對(duì)本地賬本數(shù)據(jù)庫存儲(chǔ)的前一個(gè)區(qū)塊s進(jìn)行簽名,將得到的哈希值H(B)和最新的tx事務(wù)一起打包。這樣新的區(qū)塊Bs+1必然滿足哈希鏈完整性。
引理4TDH-PBFT協(xié)議滿足分層共識(shí)網(wǎng)絡(luò)全序關(guān)系Total order。
證明假設(shè)來自子區(qū)域i和j的2個(gè)客戶節(jié)點(diǎn)ci和cj分別發(fā)起了事務(wù)請(qǐng)求txi和txj。子區(qū)域i和j各自的二級(jí)代理人SDi和SDj將對(duì)txi和txj打包成區(qū)塊Bi和Bj。下面分兩種情況來說明該引理成立。
1)如果ci和cj位于同一個(gè)子區(qū)域,則SD將按照請(qǐng)求提交的時(shí)間對(duì)txi和txj進(jìn)行排序。接下來txi和txj可能都被按序打包進(jìn)序號(hào)為s的區(qū)塊B中,當(dāng)區(qū)塊完成全局共識(shí)分發(fā)至各節(jié)點(diǎn)后,txi必將先于txj被提交至賬本。txi和txj還有可能分別打包進(jìn)序號(hào)為s的區(qū)塊Bs以及序號(hào)為s+1的區(qū)塊Bs+1。由分布式共識(shí)服務(wù)的“連續(xù)序號(hào)”屬性可知,Bs將先于Bs+1完成全局共識(shí)并被提交,則txi也將先于txj被提交至賬本。
2)如果ci和cj位于不同的子區(qū)域,則有txi和txj分別被SDi和SDj打包至區(qū)塊Bi和Bj中。
(1)由于客戶節(jié)點(diǎn)ci在執(zhí)行請(qǐng)求事務(wù)時(shí),必須選擇至少包含F(xiàn)D、SDi和TDki在內(nèi)的3個(gè)代理人節(jié)點(diǎn)。3個(gè)節(jié)點(diǎn)返回的事務(wù)執(zhí)行結(jié)果必須相同,即保證賬本數(shù)據(jù)庫在全局和局部完全一致,客戶節(jié)點(diǎn)才會(huì)將請(qǐng)求發(fā)送給SDi,從而開始2次共識(shí)過程。
(2)一級(jí)代理人節(jié)點(diǎn)FD擁有的全局事務(wù)視圖,是協(xié)調(diào)各個(gè)子區(qū)域請(qǐng)求事務(wù)順序的關(guān)鍵。
SDi在將事務(wù)tx打包成區(qū)塊B時(shí),將詢問FD其區(qū)域允許打包事務(wù)的開始和結(jié)束區(qū)間。當(dāng)區(qū)間內(nèi)沒有鍵值修改沖突時(shí),例如txi先于txj修改了鍵為k的值,SDi將按照預(yù)定的區(qū)塊大小或默認(rèn)時(shí)間間隔進(jìn)行打包。這樣,Bi先于Bj被提交參與共識(shí),可確保Bi中的事務(wù)txi先于txj被提交至賬本;否則,假設(shè)txj先于txi修改了鍵為k的值,SDi將打包至SDj修改k的前一次修改事務(wù)到區(qū)塊Bi,SDj將從修改k的事務(wù)開始打包Bj。此時(shí),當(dāng)Bi和Bj完成全局共識(shí)后,Bj中的事務(wù)txj先于txi被提交至賬本。
綜上可得,TDH-PBFT協(xié)議滿足分層共識(shí)網(wǎng)絡(luò)的全序關(guān)系要求。
為深入了解TDH-PBFT模型的運(yùn)行機(jī)制,使用SimPy模擬器對(duì)其運(yùn)行流程進(jìn)行建模。SimPy是基于進(jìn)程的離散事件模擬器,它包含實(shí)體(Process)、事件(Event)和資源(Resource)3個(gè)主要概念。在TDH-PBFT中,實(shí)體主要是各級(jí)代理人節(jié)點(diǎn),事件包括局部和全局共識(shí)的PROPOSE、WRITE、ACCEPT等。為了便于對(duì)比參照,還使用SimPy實(shí)現(xiàn)了標(biāo)準(zhǔn)的PBFT算法以及單純采用分組的H-PBFT算法。H-PBFT算法中,各分組的頭結(jié)點(diǎn)用于轉(zhuǎn)發(fā)其他分組的消息,而并非像TDH-PBFT算法,代表組內(nèi)節(jié)點(diǎn)直接參與共識(shí)。
首先比較3種共識(shí)算法在系統(tǒng)節(jié)點(diǎn)數(shù)為17、49、97這3種情況下的性能,主要考察吞吐量和延時(shí)2個(gè)指標(biāo),PBFT的性能數(shù)據(jù)是實(shí)驗(yàn)的基準(zhǔn)線。從圖5和圖6可以看出,PBFT算法性能隨著節(jié)點(diǎn)數(shù)的增多而下降。吞吐量從3 164 TPS迅速下降至1 233 TPS,下降了61%。事務(wù)請(qǐng)求平均延時(shí)從750 ms增大到1 103 ms?;诜纸M的H-PBFT共識(shí)算法性能有所改善,這得益于分組降低了全網(wǎng)共識(shí)消息。TDH-PBFT的吞吐量是三者中最優(yōu)的,隨著共識(shí)節(jié)點(diǎn)數(shù)從17增大到97,吞吐量?jī)H下降了14.7%。節(jié)點(diǎn)數(shù)為97時(shí)的事務(wù)請(qǐng)求平均延時(shí)為762 ms,接近PBFT算法在節(jié)點(diǎn)數(shù)為17時(shí)的延時(shí)。該實(shí)驗(yàn)展現(xiàn)了TDH-PBFT共識(shí)算法具有良好的伸縮性能,可以有效緩解當(dāng)共識(shí)網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)增大時(shí),消息數(shù)量爆炸導(dǎo)致的性能下降。
圖5 不同共識(shí)算法下系統(tǒng)吞吐量的對(duì)比Fig.5 Comparison of system throughput under different consensus algorithm
圖6 不同共識(shí)算法下系統(tǒng)延時(shí)的對(duì)比Fig.6 Comparison of system delay under different consensus algorithm
然后比較區(qū)塊大小對(duì)系統(tǒng)性能的影響。分別選取0.5 MB、1 MB、2 MB和4 MB 4種取值,這也是實(shí)際系統(tǒng)部署時(shí)常選取的4種取值。從圖7可以看出,當(dāng)區(qū)塊大小從0.5 MB增大到2 MB時(shí),系統(tǒng)吞吐量從6 023 TPS增加到7 989 TPS,增加了33%。但單個(gè)事務(wù)請(qǐng)求的平均延時(shí)從608 ms增大到753 ms。這是因?yàn)樵龃髤^(qū)塊大小可以減少共識(shí)次數(shù),提升系統(tǒng)的整體處理能力,但對(duì)于個(gè)別請(qǐng)求,等待打包的時(shí)間增加了其請(qǐng)求時(shí)長(zhǎng)。當(dāng)區(qū)塊大小從2 MB增大到4 MB時(shí),系統(tǒng)吞吐量增加了2%,系統(tǒng)延時(shí)也進(jìn)一步增大??梢钥闯?此時(shí)增加區(qū)塊大小對(duì)系統(tǒng)性能提升的作用已不顯著,2 MB是TDH-PBFT算法首選的區(qū)塊大小值。
圖7 區(qū)塊大小對(duì)系統(tǒng)吞吐量和延時(shí)的影響Fig.7 Influence of block size on system throughput and latency
最后比較共識(shí)節(jié)點(diǎn)部署在不同類型網(wǎng)絡(luò)下的系統(tǒng)性能差異。選取17個(gè)節(jié)點(diǎn)的共識(shí)網(wǎng)絡(luò),第1類場(chǎng)景模擬所有節(jié)點(diǎn)全部都在局域網(wǎng)環(huán)境內(nèi),節(jié)點(diǎn)之間使用百兆網(wǎng)絡(luò)互連。第2類場(chǎng)景模擬節(jié)點(diǎn)混合部署,即一級(jí)和二級(jí)代理人之間的全局共識(shí)網(wǎng)絡(luò)使用10兆網(wǎng)絡(luò)互連,二級(jí)和三級(jí)代理人之間的局部共識(shí)網(wǎng)絡(luò)使用百兆網(wǎng)絡(luò)互連。第3類場(chǎng)景模擬所有節(jié)點(diǎn)全部都在互聯(lián)網(wǎng)環(huán)境內(nèi),節(jié)點(diǎn)之間使用10兆網(wǎng)絡(luò)互連。從圖8可以看出,3種算法在有節(jié)點(diǎn)處于互聯(lián)網(wǎng)環(huán)境時(shí),隨著共識(shí)時(shí)間變長(zhǎng),吞吐量均會(huì)下降。但無論在哪種網(wǎng)絡(luò)類型下,TDH-PBFT的吞吐量都是最優(yōu)的。即使在完全互聯(lián)網(wǎng)環(huán)境中,TDH-PBFT的性能也優(yōu)于H-PBFT在完全局域網(wǎng)環(huán)境的性能。分層共識(shí)算法減少了共識(shí)消息的數(shù)量,使網(wǎng)絡(luò)帶寬對(duì)共識(shí)算法性能的影響降到最低。
圖8 網(wǎng)絡(luò)對(duì)系統(tǒng)吞吐量的影響Fig.8 Influence of network on system throughput
為優(yōu)化大規(guī)模聯(lián)盟鏈網(wǎng)絡(luò)的共識(shí)過程,本文提出一種基于信任委托的分層共識(shí)優(yōu)化機(jī)制。根據(jù)節(jié)點(diǎn)運(yùn)行狀態(tài)建立信任度,選舉出可信的代理人節(jié)點(diǎn)進(jìn)行局部和全局2次共識(shí)過程,從而降低消息廣播的數(shù)量,提升共識(shí)網(wǎng)絡(luò)吞吐率。實(shí)驗(yàn)結(jié)果表明,該模型能夠滿足聯(lián)盟鏈平臺(tái)的性能擴(kuò)展性需求,當(dāng)全網(wǎng)節(jié)點(diǎn)數(shù)增大時(shí),系統(tǒng)依然可以保持較好的性能。在TDH-PBFT共識(shí)算法中,二級(jí)與三級(jí)節(jié)點(diǎn)配比、權(quán)重票數(shù)和全局共識(shí)閾值等參數(shù)均對(duì)系統(tǒng)性能產(chǎn)生顯著影響,后續(xù)將對(duì)參數(shù)的作用做進(jìn)一步研究。