劉澤坤,王峰,賈海蓉
(太原理工大學(xué) 信息與計算機學(xué)院,太原 030024)
隨著互聯(lián)網(wǎng)技術(shù)的日益發(fā)展,以比特幣[1]為代表的數(shù)字貨幣隨之崛起,支撐比特幣系統(tǒng)[2]的底層技術(shù)(如區(qū)塊鏈技術(shù)[3])也成為研究熱點。區(qū)塊鏈技術(shù)被廣泛應(yīng)用于金融業(yè)、能源互聯(lián)網(wǎng)、農(nóng)業(yè)等領(lǐng)域[4],本質(zhì)是“點對點”分布式數(shù)據(jù)庫,具有利用共識機制解決分布式框架問題的優(yōu)勢,能夠有效解決去中心化問題。
共識算法作為區(qū)塊鏈的核心技術(shù),能夠信任不同節(jié)點并計算其權(quán)益,最終保證區(qū)塊鏈系統(tǒng)的一致性。工作證明(Proof of Work,POW)[5]、權(quán)益證明(Proof of Stake,POS)、Paxos、實用拜占庭容 錯(Practical Byzantine Fault Tolerance,PBFT)等共識算法被廣泛應(yīng)用于金融機構(gòu)、電子貨幣行業(yè)、農(nóng)產(chǎn)品溯源等多個領(lǐng)域。POW(俗稱“挖礦”)被廣泛用于維護系統(tǒng)的一致性和安全性[6],參與者(俗稱“礦工”)被鼓勵競爭生成一個有效的塊,通過解決一道密碼難題贏得獎勵[7],這將促使參與者投入巨大的計算資源來達成共識。獎勵通常以虛擬貨幣的形式存在,包括資源消耗的成本和合理的利潤。POW 可容納上千節(jié)點運行,但吞吐量較低且生成新區(qū)塊所需的時間較長,從而浪費電力資源和算力,不利于更大范圍市場的推廣。為解決上述問題,SUNNY 提出POS,設(shè)計一個可靠機制給予系統(tǒng)各個節(jié)點參與決策的權(quán)利。在實際應(yīng)用中,POS[8]不需要花費算力,且記賬權(quán)來源于權(quán)益,“挖礦”是幾乎沒有成本的[9]。鑒于“挖礦”的零成本,若惡意節(jié)點制造分叉鏈,選擇在每條鏈上“挖礦”,此時無論哪條主鏈,它們均會獲得收益。若大多數(shù)“礦工”都選擇在所有分叉上“挖礦”,則導(dǎo)致區(qū)塊鏈分叉,增大遭受雙花攻擊的可能性,無法保證區(qū)塊鏈的穩(wěn)定性。Paxos[10]基于消息傳遞,解決系統(tǒng)內(nèi)容一致性問題,在執(zhí)行相同的操作后,所有節(jié)點能夠得到一致的結(jié)果。但Paxos 存在故障風(fēng)險,若作惡節(jié)點發(fā)布假消息,網(wǎng)內(nèi)就存儲假消息。為避免上述風(fēng)險的發(fā)生,基于BFT 的PBFT 算法應(yīng)運而生,PBFT 算法的C/S 架構(gòu)使得算法復(fù)雜度大幅降低,可實現(xiàn)每秒上千次的交易請求和交易量,具有交易時間短、承載交易量大的優(yōu)點。
隨著對共識算法的深入研究,PBFT 算法在不斷的改進優(yōu)化,使證明方法、理論應(yīng)用呈現(xiàn)多樣化、多維化發(fā)展。簡化的拜占庭容錯(SBFT)[11]算法極大程度地加快算法完成共識的速率,各節(jié)點都可以自主操作,而無需與其他節(jié)點進行交互通信驗證,完成快速共識。但是在SBFT 中收集簽名的收集器是惡意的,則導(dǎo)致SBFT 的性能大幅下降。DGPBFT[12]算法基于擴展節(jié)點的屬性,增加節(jié)點可信度,并設(shè)計節(jié)點可信度的評估機制,通過對可信度的節(jié)點進行分組,大幅降低通信的復(fù)雜度。但當(dāng)DGPBFT 算法面對硬件錯誤、網(wǎng)絡(luò)擁塞、終端遭到惡意攻擊等問題時難以實現(xiàn)高效安全的工作[12]。DDBFT[13]將DPOS 應(yīng)用于PBFT 算法中,使得PBFT[14]算法具有動態(tài)性的特點,但是因網(wǎng)絡(luò)帶寬有限,導(dǎo)致網(wǎng)絡(luò)阻塞且吞吐量降低[15]。授權(quán)拜占庭容錯(DBFT)算法由BFT 算法演化而來,專用于許可區(qū)塊鏈,根據(jù)持有股份數(shù)量通過投票決定節(jié)點是否能進入到共識網(wǎng)內(nèi)。DBFT 雖然提高算法效率,但是當(dāng)超過1/3 的節(jié)點協(xié)同作惡或?qū)χ鞴?jié)點進行攻擊時,交易請求完成的主導(dǎo)權(quán)將被惡意節(jié)點掌控,算法的安全穩(wěn)定性無法得到保障[16]。
本文提出基于信用積分機制和動態(tài)增刪節(jié)點的實用拜占庭容錯共識算法DT-PBFT。通過引入動態(tài)機制,使聯(lián)盟鏈中節(jié)點的自主加入和退出更加靈活,增加網(wǎng)絡(luò)的靈活性。引入信用積分機制,通過增加信用積分篩選出信用度較高的節(jié)點作為備選主節(jié)點,對惡意節(jié)點(信用積分較低的節(jié)點)進行網(wǎng)內(nèi)的自主剔除,以有效地降低惡意節(jié)點成為主節(jié)點的概率,確保網(wǎng)內(nèi)各個節(jié)點的安全可靠性。在此基礎(chǔ)上,利用優(yōu)化的一致性協(xié)議實現(xiàn)對共識流程的改進,并進行一輪全網(wǎng)廣播,提高網(wǎng)絡(luò)的運行效率。
PBFT 是一種狀態(tài)機副本復(fù)制算法[17],狀態(tài)機在不同的節(jié)點上復(fù)制副本,并應(yīng)用于分布式系統(tǒng)中。在PBFT 模型中,每次產(chǎn)生的主節(jié)點都會領(lǐng)導(dǎo)一次共識過程的執(zhí)行,運行中伴隨客戶端、主節(jié)點和從節(jié)點,其中主節(jié)點、從節(jié)點為備份節(jié)點,在運行過程中都會進行數(shù)據(jù)備份[7]。傳統(tǒng)PBFT 算法的共識流程如圖1 所示。

圖1 傳統(tǒng)PBFT 算法共識流程Fig.1 Consensus procedure of traditional PBFT algorithm
傳統(tǒng)PBFT算法[18]的共識過程分 為5 個階段:1)請求階段,客戶端向主節(jié)點發(fā)送請求消息;2)預(yù)準(zhǔn)備階段,客戶端向主節(jié)點發(fā)布請求消息編號,并向其他節(jié)點廣播預(yù)準(zhǔn)備消息[19];3)準(zhǔn)備階段,主節(jié)點發(fā)布的預(yù)準(zhǔn)備消息被集群內(nèi)節(jié)點接收后進行自主核驗,當(dāng)從節(jié)點核驗同意預(yù)準(zhǔn)備消息后,則轉(zhuǎn)入準(zhǔn)備階段等待其余節(jié)點的核驗,若從節(jié)點核驗不同意預(yù)準(zhǔn)備消息后,則不再繼續(xù)進入下一階段[20],當(dāng)在集群內(nèi)收到2f+1 個從節(jié)點時,發(fā)布的完成預(yù)準(zhǔn)備消息的核驗以及同意進入準(zhǔn)備階段,即表示準(zhǔn)備階段已經(jīng)完成[21];4)確認階段,所有節(jié)點都要對外發(fā)送進入確認階段的消息,節(jié)點i查驗包括自身在內(nèi)的2f+1 個確認消息,當(dāng)確認消息與預(yù)準(zhǔn)備消息一致時,表示此階段已完成;5)回復(fù)階段,當(dāng)節(jié)點i完成確認階段后,向客戶端反饋回復(fù)消息,客戶端C只有收到f+1 個反饋信息時,表示發(fā)出的請求已經(jīng)成功完成共識。
PBFT 算法隨意選取主節(jié)點,可能使得惡意節(jié)點連續(xù)成為主節(jié)點,從而浪費網(wǎng)絡(luò)資源。雖然惡意主節(jié)點能被其他節(jié)點識別并推翻[22],但是更替主節(jié)點會增加系統(tǒng)開銷、降低共識效率。在共識階段的一致性協(xié)議中,Prepare 和Commit 兩階段均采用節(jié)點在全網(wǎng)內(nèi)廣播交互驗證的方法。隨著節(jié)點數(shù)的增加,系統(tǒng)所需的網(wǎng)絡(luò)開銷和帶寬容量呈多項式級增加,導(dǎo)致PBFT 算法無法工作。集群內(nèi)節(jié)點在原有的預(yù)準(zhǔn)備階段前可能處于宕機或自主退出網(wǎng)絡(luò)的狀態(tài),節(jié)點一旦超過算法允許的延遲時間,就無法參與后續(xù)共識流程。由于缺少退出環(huán)節(jié),該節(jié)點仍存在于網(wǎng)內(nèi),但是在PBFT 算法后續(xù)的共識過程中,其他節(jié)點仍要向該節(jié)點發(fā)送無效的交互驗證消息,增加了網(wǎng)絡(luò)開銷。節(jié)點無法動態(tài)地加入和退出集群,使得算法在具體應(yīng)用時靈活性較差。
DT-PBFT 算法以PBFT 為基礎(chǔ),加入了動態(tài)機制、信用積分機制和協(xié)議一致性的優(yōu)化,有效解決了PBFT 的動態(tài)性較差、靈活性較差、通信開銷的時延較大等問題。
動態(tài)機制的主要功能是節(jié)點動態(tài)加入共識網(wǎng)絡(luò)和動態(tài)退出共識網(wǎng)絡(luò),在節(jié)點動態(tài)加入和退出的過程中并不需要重新動態(tài)啟動區(qū)塊鏈網(wǎng)絡(luò),有效提高共識算法的靈活性。
2.1.1 節(jié)點動態(tài)加入
節(jié)點動態(tài)加入的流程主要有以下5 個步驟:
1)申請階段:當(dāng)啟動網(wǎng)絡(luò)中存在的新增節(jié)點后,若該節(jié)點要加入到集群中參與后續(xù)的共識階段,應(yīng)先向集群內(nèi)所有節(jié)點發(fā)送請求加入集群的消息s,并加上時間戳,發(fā)起AddNode 請求連接。
2)認證新節(jié)點階段:當(dāng)現(xiàn)有節(jié)點收到來自新增節(jié)點發(fā)起的AddNode 請求時,通過廣播并收集其他節(jié)點發(fā)送的AgreeAdd 消息。當(dāng)節(jié)點收集到2f+1 條AgreeAdd 消息時,則向新增節(jié)點發(fā)送同意加入集群的認證消息。當(dāng)新節(jié)點收到2f+1 條認證消息時,則請求達成一致,允許新增節(jié)點加入到集群中。
3)數(shù)據(jù)同步階段:新增節(jié)點進入主動恢復(fù)Recovery 的流程。新增節(jié)點發(fā)送數(shù)據(jù)同步的請求,并廣播給其他節(jié)點,同時其他節(jié)點給新增節(jié)點發(fā)送當(dāng)前所存的全部信息,以實現(xiàn)新增節(jié)點的數(shù)據(jù)同步。
4)入網(wǎng)階段:在完成數(shù)據(jù)同步之后,向全區(qū)塊鏈網(wǎng)絡(luò)的所有節(jié)點廣播JoinNet的請求,請求參與區(qū)塊鏈網(wǎng)絡(luò)的共識。所有的現(xiàn)有節(jié)點收到來自新增節(jié)點發(fā)送的JoinNet 請求,同時通知所有的現(xiàn)有節(jié)點,新增節(jié)點正式入網(wǎng),并重新計算網(wǎng)內(nèi)節(jié)點總數(shù)以及新視圖v。
5)回執(zhí)階段:由主節(jié)點向所有集群內(nèi)節(jié)點發(fā)布UpdataNet 信息,當(dāng)所有共識節(jié)點收到消息后,更新區(qū)塊鏈集群內(nèi)節(jié)點總數(shù)N和視圖v,完成新增節(jié)點的流程。當(dāng)視圖和節(jié)點總數(shù)更新完成后,共識節(jié)點向主節(jié)點進行反饋,當(dāng)主節(jié)點收到2f+1 條信息,即網(wǎng)內(nèi)已完成并入新節(jié)點,則完成一次動態(tài)增加節(jié)點的共識行為。
節(jié)點動態(tài)加入流程如圖2 所示,圖中New_Replica5 為新增節(jié)點。

圖2 節(jié)點動態(tài)加入流程Fig.2 Dynamic joining procedure of nodes
2.1.2 節(jié)點動態(tài)退出
節(jié)點動態(tài)退出的流程如圖3所示,其中Del_Replica5為主動請求退出的節(jié)點。

圖3 節(jié)點動態(tài)退出流程Fig.3 Dynamic exit procedure of node
節(jié)點動態(tài)退出流程分為以下4 個步驟:1)申請階段,當(dāng)Del_Replica5 節(jié)點主動要求退出時,由該節(jié)點開始向其他節(jié)點廣播Del-request 消息;2)認證消息階段,其他節(jié)點收到Del-request 消息后,假設(shè)該節(jié)點退出現(xiàn)有區(qū)塊鏈網(wǎng)絡(luò),計算刪除該節(jié)點后的視圖v和節(jié)點總數(shù)N,通過向區(qū)塊鏈網(wǎng)絡(luò)中的其他節(jié)點廣播自己同意刪除Del_Replica5 節(jié)點,若收集到f條AgreeDel 的消息,則所有節(jié)點同意并刪除該節(jié)點發(fā)起數(shù)據(jù)同步的請求,并將刪除該節(jié)點后的視圖v、節(jié)點總數(shù)N等消息封裝;3)退網(wǎng)階段,當(dāng)Del_Replica5節(jié)點退出后,主節(jié)點發(fā)送UpdataNet 信息;4)更新網(wǎng)絡(luò),全網(wǎng)所有節(jié)點收到UpdataNet 信息后,更新區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點總數(shù)N和視圖v,完成刪除該節(jié)點的流程。
PBFT[23]引入整體信用積分機制,通過對集群內(nèi)節(jié)點隨機選擇主節(jié)點的機制進行改進。信用積分機制的流程如圖4 所示。

圖4 信用積分機制流程Fig.4 Procedure of credit scoring mechanism
定義1(信用機制分層設(shè)置)在拜占庭容錯算法中區(qū)塊生成驗證由主節(jié)點主導(dǎo)完成。為改進原始算法,DT-PBFT 使得各個節(jié)點能更好地被監(jiān)控,引入信用積分機制主要是對所有節(jié)點進行分層,將節(jié)點分為備選主節(jié)點層、中間層、警告層、清理層,并將分?jǐn)?shù)值設(shè)為n且上限設(shè)為100,根據(jù)不同分?jǐn)?shù)段對區(qū)間進行區(qū)分。
1)備選主節(jié)點層(80≤n≤100):在交易時將集群內(nèi)較可靠的節(jié)點作為主節(jié)點,以解決拜占庭節(jié)點可能被連續(xù)選作主節(jié)點而造成算法運行效率較低的問題。當(dāng)主節(jié)點需切換時,仍會在備選主節(jié)點中選取節(jié)點進行替換。
2)中間層(40 3)警告層(20 4)清理層(n<20):節(jié)點初始信用分值處于中間層,經(jīng)多次作惡行為后進行分值減半處理,將被網(wǎng)絡(luò)內(nèi)定為不信任節(jié)點,并將信息返回到集群內(nèi)的每個節(jié)點,再由主節(jié)點刪除該節(jié)點的請求,最終經(jīng)交互后確認將該節(jié)點移除出網(wǎng)絡(luò),借助這個機制來減少網(wǎng)內(nèi)的拜占庭節(jié)點,從而提高算法的效率,降低無效的網(wǎng)絡(luò)開銷。 定義2惡意節(jié)點被清出網(wǎng)絡(luò)的流程如圖5 所示。當(dāng)存在惡意節(jié)點被踢出現(xiàn)有區(qū)塊鏈網(wǎng)絡(luò)時,首先計算刪除惡意節(jié)點后的視圖v、節(jié)點總數(shù)N;其次由主節(jié)點向其他節(jié)點廣播Del-message 消息,其他節(jié)點收到Del-message 消息后,并向區(qū)塊鏈網(wǎng)絡(luò)中的其他節(jié)點廣播自己同意刪除Del_Replica5;若收集到f條AgreeDel 的消息,則所有節(jié)點同意并刪除該節(jié)點發(fā)起數(shù)據(jù)同步的請求,并將刪除該節(jié)點后的視圖v、節(jié)點總數(shù)N等消息封裝;最后Del-Node5 節(jié)點退出后,主節(jié)點發(fā)送UpdataNet 信息,全網(wǎng)所有節(jié)點收到UpdataNet 信息后,更新區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點總數(shù)N和視圖v,完成刪除該節(jié)點的流程。 圖5 惡意節(jié)點被清除出網(wǎng)絡(luò)的流程Fig.5 Procedure of removing malicious nodes from the network 定義3(信用機制節(jié)點層次變更)在本文的信用機制中,根據(jù)每次請求處理的結(jié)果,針對性地對節(jié)點的信用分值進行增減。若視圖完成一次更替后,則將對所有參與交易的節(jié)點分值均加1,若交易失敗后,則將拜占庭節(jié)點的積分減為原積分的50%。采用信用機制的優(yōu)點主要有:1)若拜占庭節(jié)點處于上兩層之中,通過減半機制將備選主節(jié)點層的拜占庭節(jié)點先降到中間層或?qū)⒅虚g層的拜占庭節(jié)點降到警告層,通過降級剔除拜占庭節(jié)點,提高信用機制的可靠性,同時也給好節(jié)點(即非作惡節(jié)點)一到兩次的緩沖機會,避免出現(xiàn)誤操作或網(wǎng)絡(luò)因素而造成交易請求失敗,被集群直接判定為拜占庭節(jié)點,最終被移除出網(wǎng)絡(luò),提高了在實際應(yīng)用中的靈活性;2)采用信用積分的減半操作增大對拜占庭節(jié)點的作惡懲罰,并通過獎勵機制對好節(jié)點進行激勵,提高好節(jié)點的分值,使其進入到備選主節(jié)點層中。本文結(jié)合這兩個優(yōu)點能大幅減少整個網(wǎng)絡(luò)中的拜占庭節(jié)點數(shù),避免PBFT 算法中類似于拜占庭節(jié)點連續(xù)當(dāng)選主節(jié)點的情況,解決算法效率降低的問題。 傳統(tǒng)PBFT 算法[24]中,若要求算法在f<(N-1)/3的基礎(chǔ)上達到一致性共識,則表明合法數(shù)量的節(jié)點已驗證通過消息,即要求消息進入確認階段后保證已有2f-1 的節(jié)點已完成準(zhǔn)備階段。PBFT 算法共需兩輪全網(wǎng)節(jié)點交互確保消息準(zhǔn)確一致,最終使得算法的復(fù)雜度為O(N2)才可滿足算法可靠性的需求。其中N為總節(jié)點數(shù),f為存在的拜占庭節(jié)點數(shù)目。PBFT 算法存在選擇主節(jié)點時的隨機性,以及整個節(jié)點網(wǎng)絡(luò)靈活性較差的問題,導(dǎo)致在共識過程中無法及時將惡意節(jié)點排出。當(dāng)主節(jié)點發(fā)生故障或拜占庭節(jié)點成功作惡,甚至連續(xù)多次觸發(fā)視圖更換協(xié)議時,PBFT 算法將不斷重新選取主節(jié)點進行共識階段的信息交互驗證直至共識成功,導(dǎo)致浪費大量網(wǎng)絡(luò)開銷。為解決上述問題,本文提出的DT-PBFT 算法以增加信用積分篩選作為基礎(chǔ),采用優(yōu)化一致性協(xié)議和動態(tài)機制保證集群內(nèi)節(jié)點的可靠性。其中增加信用積分篩選信用度較高的節(jié)點作為備選主節(jié)點,增強主節(jié)點的可信任度。動態(tài)機制降低了有問題節(jié)點被選作主節(jié)點的概率以及在共識階段中減少一輪全網(wǎng)共識驗證的交互信息,使算法的復(fù)雜度降低。假設(shè)全網(wǎng)節(jié)點數(shù)為N,那么完成一次共識過程傳遞需要消息的次數(shù)如式(1)所示: M=N2+3N-1 (1) 優(yōu)化后的一致性協(xié)議流程如圖6 所示,主節(jié)點以及整個網(wǎng)絡(luò)的可信任程度得到了提高,有效減少了因主節(jié)點出現(xiàn)故障而導(dǎo)致不斷進行視圖更換的現(xiàn)象,同時避免了作惡節(jié)點可連續(xù)被選為主節(jié)點的情況。基于上述優(yōu)勢,優(yōu)化后的一致性協(xié)議保證了算法的有效性和可靠性,提高了算法的吞吐量和算法共識達成一致的成功率,尤其在節(jié)點數(shù)較多情況下,大幅降低了網(wǎng)絡(luò)開銷,節(jié)約網(wǎng)絡(luò)資源。 圖6 一致性協(xié)議流程Fig.6 Procedure of consistency protocol 本文從吞吐量、時延、交易請求完成率以及CPU 的利用率等方面對DT-PBFT、DDBFT 和PBFT 進行對比,以驗證算法的有效性、適用性及節(jié)能性。該仿真實驗所用的PC 機配置為 Intel Core i7-9750H 2.6 GHz CPU及Intel Core i5-6500 3.2 GHz CPU 雙機連接實現(xiàn)主從端分立仿真測試,通過Java 多線程機制模擬網(wǎng)絡(luò)中的共識節(jié)點通信交互過程。 交易時延是指客戶端向主節(jié)點發(fā)送一個交易請求,以確認完成共識的時間間隔[25]。該實驗的交易時延取200 次交易的平均值。圖7 所示為不同算法的交易時延對比。 圖7 不同算法的交易時延對比Fig.7 Transaction delay comparison among different algorithms 從圖7 可以看出,當(dāng)存在作惡節(jié)點時,隨著節(jié)點個數(shù)的增加,相比PBFT 算法,DT-PBFT 交易時延增長的速度得到有效減慢。但因DT-PBFT 增加了動態(tài)處理機制,使得時延略高于DDBFT。DT-PBFT 雖然增大了部分時延,但在處理數(shù)據(jù)上具有較優(yōu)的靈活性及穩(wěn)定性。 交易請求有效完成率是當(dāng)交易請求發(fā)出時經(jīng)過一次主節(jié)點選舉即可順利完成請求,通過有效的完成率表征該網(wǎng)絡(luò)內(nèi)節(jié)點整體的可信程度及安全可靠性。隨著節(jié)點數(shù)的增加,不同算法的交易完成次數(shù)對比如圖8 所示。從圖8 可以看出,無論節(jié)點數(shù)是多少,DT-PBFT 算法的交易完成次數(shù)均最多。 圖8 不同算法的交易完成次數(shù)對比Fig.8 Number of transactions completion comparison among different algorithms 表1所示為不同算法的交易請求有效完成率對比。隨著節(jié)點數(shù)的不斷增加,DDBFT 和PBFT 的有效完成率呈現(xiàn)明顯的下降趨勢,而DT-PBFT 雖然有一定程度的下降,但整體變化較平穩(wěn)。因此,DT-PBFT 算法在共識過程中具有較優(yōu)的穩(wěn)定性,由極大程度降低作惡節(jié)點當(dāng)選主節(jié)點的概率。同時主動刪除作惡節(jié)點的機制可以將作惡節(jié)點從網(wǎng)內(nèi)剔除,提升了網(wǎng)內(nèi)節(jié)點整體的安全穩(wěn)定性,使得每次請求順利達成共識,減少因多次重發(fā)引起網(wǎng)絡(luò)資源的浪費,從而降低網(wǎng)絡(luò)開銷。 表1 不同算法的交易請求有效完成率 Table 1 Effective completion rates of transaction requests comparison among different algorithms 吞吐量是指單位時間內(nèi)完成的交易數(shù)量,一般用每秒事務(wù)處理量(Transaction Per Second,TPS)來表示[17]。該實驗設(shè)置客戶端發(fā)送1 000 條交易請求,記錄每秒能夠完成共識的交易數(shù)量。為保證仿真實驗結(jié)果的代表性,實驗數(shù)據(jù)取多次結(jié)果的平均值(取整)。吞吐量測試主要從兩方面進行分析:1)單獨在信用積分機制下對4 種算法進行對比;2)在信用積分機制條件下再增加隨機的增或退節(jié)點,以測試4 種算法在仿真模擬實際應(yīng)用中對動態(tài)靈活性的表現(xiàn)情況。 3.3.1 信用積分機制作用 本節(jié)實驗在PBFT 算法的基礎(chǔ)上加入信用積分機制,僅允許對作惡節(jié)點按信用積分機制進行合理的剔除,實驗結(jié)果如圖9 所示。圖9 顯示隨著節(jié)點數(shù)的增加,交互信息呈指數(shù)級增加,4 種算法共識過程的吞吐量會隨之遞減。因DT-PBFT 引入的信用積分機制以及將共識階段由三階段縮減為兩階段的優(yōu)勢性,能自動剔除網(wǎng)內(nèi)積分較低的作惡節(jié)點,最大程度減少無用的開銷。DT-PBFT 穩(wěn)定的下降趨勢明顯優(yōu)于DDBFT、DGPBFT 以及PBFT,證明其具有良好的安全穩(wěn)定性,在存在作惡節(jié)點的環(huán)境下可以凸顯出更大的優(yōu)勢,也更貼合實際的應(yīng)用場合。 圖9 不同算法在信用積分機制下吞吐量對比Fig.9 Throughput comparison among different algorithms under credit scoring mechanism 3.3.2 信用積分機制與動態(tài)機制的作用 在不同初始節(jié)點數(shù)(n>4)下,交易請求執(zhí)行的過程中,本文隨機對節(jié)點進行增/刪,每次均增/刪一個節(jié)點作為測試,各增/刪十次。為了使仿真實驗結(jié)果適用于實際應(yīng)用的場合,本節(jié)隨機設(shè)置增/刪節(jié)點來代替實際應(yīng)用場合中節(jié)點的入/出,并進行多次實驗取均值,使結(jié)果具有代表性。因為PBFT 對于增刪節(jié)點在實際測試中表現(xiàn)較差,所以本節(jié)主要對DT-PBFT、DDBFT 和DGPBFT 算法進行對比分析。當(dāng)引入動態(tài)機制時不同算法的吞吐量對比如圖10 所示。 圖10 當(dāng)引入動態(tài)機制時不同算法的吞吐量對比Fig.10 Throughput comparison among different algorithms when introducing dynamic mechanism 從圖10 可以看出,加入動態(tài)機制對于DDBFT、DGPBFT 的吞吐量也具有一定影響,對DT-PBFT 吞吐量的影響程度并不明顯。因此,DT-PBFT 具有更強的穩(wěn)定性和靈活性。結(jié)合交易請求有效完成率可以看出,動態(tài)機制的引入對于DT-PBFT 只產(chǎn)生了低程度的吞吐量降低,但在整體完成交易請求成功率、效率以及動態(tài)特性上更能體現(xiàn)DT-PBFT 算法優(yōu)異的綜合性能。 本文對CPU 的使用率進行仿真數(shù)據(jù)分析,為保證實驗結(jié)果具有普遍性,該實驗取多個時刻下不同算法的利用率進行平均后取整。不同算法的CPU 使用率對比如圖11 所示。 圖11 不同算法的CPU 使用率對比Fig.11 CPU utilization comparison among different algorithms 從圖11 可以看出,CPU 的使用率隨著節(jié)點數(shù)的增加各算法會伴隨不同程度的信息交互量的提升。其中DT-PBFT 算法的上升趨勢較DDBFT、DGPBFT 算法平穩(wěn)。隨著節(jié)點數(shù)不斷增加,DT-PBFT 算法的CPU 使用率的增長率越低,具有較優(yōu)的節(jié)能性。當(dāng)節(jié)點數(shù)設(shè)置為22時,PBFT 和DDBFT 的CPU 使用率已經(jīng)達到了65%,且DGPBFT也高于60%,而DT-PBFT仍維持在50%左右。因此,DT-PBFT 具有較優(yōu)的節(jié)能性,在實際應(yīng)用過程中有效地節(jié)省了CPU 資源。 由于PBFT 算法中的節(jié)點存在無法隨時動態(tài)地加入或退出網(wǎng)絡(luò)、主節(jié)點選取過于隨意且通信開銷大等問題,因此本文提出一種實用拜占庭容錯算法DT-PBFT,通過引入動態(tài)加入或退出機制,使節(jié)點可以根據(jù)不同需求隨時加入或退出集群,從而提高網(wǎng)絡(luò)工作時的動態(tài)性。設(shè)計信用積分機制,通過獎懲機制對節(jié)點分?jǐn)?shù)進行分段,以選擇集群內(nèi)信任度高的節(jié)點作為主節(jié)點,有效降低拜占庭節(jié)點當(dāng)選主節(jié)點的概率,減少網(wǎng)絡(luò)開銷。同時通過動態(tài)退出機制剔除信用值較低的作惡節(jié)點,提高共識的成功率,將共識階段中的兩次全網(wǎng)廣播改為一次。在進入正式共識前,通過對節(jié)點確認后再更新視圖,減少無效的信息交互以及對帶寬的消耗。實驗結(jié)果表明,本文所提DT-PBFT 算法在實際應(yīng)用過程更具靈活性且更加高效,在減少對網(wǎng)絡(luò)資源消耗的同時節(jié)能性也得以提升。下一步將優(yōu)化動態(tài)機制,在弱網(wǎng)絡(luò)環(huán)境下改進本文提出的DT-PBFT 算法,保證DT-PBFT 算法的交易請求有效完成率和共識安全性的前提下,提高共識效率且減少通信開銷。
2.3 一致性協(xié)議優(yōu)化

3 仿真實驗與結(jié)果分析
3.1 時延測試

3.2 交易請求有效完成率


3.3 吞吐量測試


3.4 CPU 的使用率

4 結(jié)束語