劉澤坤,王峰,賈海蓉
(太原理工大學(xué) 信息與計(jì)算機(jī)學(xué)院,太原 030024)
隨著互聯(lián)網(wǎng)技術(shù)的日益發(fā)展,以比特幣[1]為代表的數(shù)字貨幣隨之崛起,支撐比特幣系統(tǒng)[2]的底層技術(shù)(如區(qū)塊鏈技術(shù)[3])也成為研究熱點(diǎn)。區(qū)塊鏈技術(shù)被廣泛應(yīng)用于金融業(yè)、能源互聯(lián)網(wǎng)、農(nóng)業(yè)等領(lǐng)域[4],本質(zhì)是“點(diǎn)對(duì)點(diǎn)”分布式數(shù)據(jù)庫(kù),具有利用共識(shí)機(jī)制解決分布式框架問(wèn)題的優(yōu)勢(shì),能夠有效解決去中心化問(wèn)題。
共識(shí)算法作為區(qū)塊鏈的核心技術(shù),能夠信任不同節(jié)點(diǎn)并計(jì)算其權(quán)益,最終保證區(qū)塊鏈系統(tǒng)的一致性。工作證明(Proof of Work,POW)[5]、權(quán)益證明(Proof of Stake,POS)、Paxos、實(shí)用拜占庭容 錯(cuò)(Practical Byzantine Fault Tolerance,PBFT)等共識(shí)算法被廣泛應(yīng)用于金融機(jī)構(gòu)、電子貨幣行業(yè)、農(nóng)產(chǎn)品溯源等多個(gè)領(lǐng)域。POW(俗稱“挖礦”)被廣泛用于維護(hù)系統(tǒng)的一致性和安全性[6],參與者(俗稱“礦工”)被鼓勵(lì)競(jìng)爭(zhēng)生成一個(gè)有效的塊,通過(guò)解決一道密碼難題贏得獎(jiǎng)勵(lì)[7],這將促使參與者投入巨大的計(jì)算資源來(lái)達(dá)成共識(shí)。獎(jiǎng)勵(lì)通常以虛擬貨幣的形式存在,包括資源消耗的成本和合理的利潤(rùn)。POW 可容納上千節(jié)點(diǎn)運(yùn)行,但吞吐量較低且生成新區(qū)塊所需的時(shí)間較長(zhǎng),從而浪費(fèi)電力資源和算力,不利于更大范圍市場(chǎng)的推廣。為解決上述問(wèn)題,SUNNY 提出POS,設(shè)計(jì)一個(gè)可靠機(jī)制給予系統(tǒng)各個(gè)節(jié)點(diǎn)參與決策的權(quán)利。在實(shí)際應(yīng)用中,POS[8]不需要花費(fèi)算力,且記賬權(quán)來(lái)源于權(quán)益,“挖礦”是幾乎沒有成本的[9]。鑒于“挖礦”的零成本,若惡意節(jié)點(diǎn)制造分叉鏈,選擇在每條鏈上“挖礦”,此時(shí)無(wú)論哪條主鏈,它們均會(huì)獲得收益。若大多數(shù)“礦工”都選擇在所有分叉上“挖礦”,則導(dǎo)致區(qū)塊鏈分叉,增大遭受雙花攻擊的可能性,無(wú)法保證區(qū)塊鏈的穩(wěn)定性。Paxos[10]基于消息傳遞,解決系統(tǒng)內(nèi)容一致性問(wèn)題,在執(zhí)行相同的操作后,所有節(jié)點(diǎn)能夠得到一致的結(jié)果。但Paxos 存在故障風(fēng)險(xiǎn),若作惡節(jié)點(diǎn)發(fā)布假消息,網(wǎng)內(nèi)就存儲(chǔ)假消息。為避免上述風(fēng)險(xiǎn)的發(fā)生,基于BFT 的PBFT 算法應(yīng)運(yùn)而生,PBFT 算法的C/S 架構(gòu)使得算法復(fù)雜度大幅降低,可實(shí)現(xiàn)每秒上千次的交易請(qǐng)求和交易量,具有交易時(shí)間短、承載交易量大的優(yōu)點(diǎn)。
隨著對(duì)共識(shí)算法的深入研究,PBFT 算法在不斷的改進(jìn)優(yōu)化,使證明方法、理論應(yīng)用呈現(xiàn)多樣化、多維化發(fā)展。簡(jiǎn)化的拜占庭容錯(cuò)(SBFT)[11]算法極大程度地加快算法完成共識(shí)的速率,各節(jié)點(diǎn)都可以自主操作,而無(wú)需與其他節(jié)點(diǎn)進(jìn)行交互通信驗(yàn)證,完成快速共識(shí)。但是在SBFT 中收集簽名的收集器是惡意的,則導(dǎo)致SBFT 的性能大幅下降。DGPBFT[12]算法基于擴(kuò)展節(jié)點(diǎn)的屬性,增加節(jié)點(diǎn)可信度,并設(shè)計(jì)節(jié)點(diǎn)可信度的評(píng)估機(jī)制,通過(guò)對(duì)可信度的節(jié)點(diǎn)進(jìn)行分組,大幅降低通信的復(fù)雜度。但當(dāng)DGPBFT 算法面對(duì)硬件錯(cuò)誤、網(wǎng)絡(luò)擁塞、終端遭到惡意攻擊等問(wèn)題時(shí)難以實(shí)現(xiàn)高效安全的工作[12]。DDBFT[13]將DPOS 應(yīng)用于PBFT 算法中,使得PBFT[14]算法具有動(dòng)態(tài)性的特點(diǎn),但是因網(wǎng)絡(luò)帶寬有限,導(dǎo)致網(wǎng)絡(luò)阻塞且吞吐量降低[15]。授權(quán)拜占庭容錯(cuò)(DBFT)算法由BFT 算法演化而來(lái),專用于許可區(qū)塊鏈,根據(jù)持有股份數(shù)量通過(guò)投票決定節(jié)點(diǎn)是否能進(jìn)入到共識(shí)網(wǎng)內(nèi)。DBFT 雖然提高算法效率,但是當(dāng)超過(guò)1/3 的節(jié)點(diǎn)協(xié)同作惡或?qū)χ鞴?jié)點(diǎn)進(jìn)行攻擊時(shí),交易請(qǐng)求完成的主導(dǎo)權(quán)將被惡意節(jié)點(diǎn)掌控,算法的安全穩(wěn)定性無(wú)法得到保障[16]。
本文提出基于信用積分機(jī)制和動(dòng)態(tài)增刪節(jié)點(diǎn)的實(shí)用拜占庭容錯(cuò)共識(shí)算法DT-PBFT。通過(guò)引入動(dòng)態(tài)機(jī)制,使聯(lián)盟鏈中節(jié)點(diǎn)的自主加入和退出更加靈活,增加網(wǎng)絡(luò)的靈活性。引入信用積分機(jī)制,通過(guò)增加信用積分篩選出信用度較高的節(jié)點(diǎn)作為備選主節(jié)點(diǎn),對(duì)惡意節(jié)點(diǎn)(信用積分較低的節(jié)點(diǎn))進(jìn)行網(wǎng)內(nèi)的自主剔除,以有效地降低惡意節(jié)點(diǎn)成為主節(jié)點(diǎn)的概率,確保網(wǎng)內(nèi)各個(gè)節(jié)點(diǎn)的安全可靠性。在此基礎(chǔ)上,利用優(yōu)化的一致性協(xié)議實(shí)現(xiàn)對(duì)共識(shí)流程的改進(jìn),并進(jìn)行一輪全網(wǎng)廣播,提高網(wǎng)絡(luò)的運(yùn)行效率。
PBFT 是一種狀態(tài)機(jī)副本復(fù)制算法[17],狀態(tài)機(jī)在不同的節(jié)點(diǎn)上復(fù)制副本,并應(yīng)用于分布式系統(tǒng)中。在PBFT 模型中,每次產(chǎn)生的主節(jié)點(diǎn)都會(huì)領(lǐng)導(dǎo)一次共識(shí)過(guò)程的執(zhí)行,運(yùn)行中伴隨客戶端、主節(jié)點(diǎn)和從節(jié)點(diǎn),其中主節(jié)點(diǎn)、從節(jié)點(diǎn)為備份節(jié)點(diǎn),在運(yùn)行過(guò)程中都會(huì)進(jìn)行數(shù)據(jù)備份[7]。傳統(tǒng)PBFT 算法的共識(shí)流程如圖1 所示。
圖1 傳統(tǒng)PBFT 算法共識(shí)流程Fig.1 Consensus procedure of traditional PBFT algorithm
傳統(tǒng)PBFT算法[18]的共識(shí)過(guò)程分 為5 個(gè)階段:1)請(qǐng)求階段,客戶端向主節(jié)點(diǎn)發(fā)送請(qǐng)求消息;2)預(yù)準(zhǔn)備階段,客戶端向主節(jié)點(diǎn)發(fā)布請(qǐng)求消息編號(hào),并向其他節(jié)點(diǎn)廣播預(yù)準(zhǔn)備消息[19];3)準(zhǔn)備階段,主節(jié)點(diǎn)發(fā)布的預(yù)準(zhǔn)備消息被集群內(nèi)節(jié)點(diǎn)接收后進(jìn)行自主核驗(yàn),當(dāng)從節(jié)點(diǎn)核驗(yàn)同意預(yù)準(zhǔn)備消息后,則轉(zhuǎn)入準(zhǔn)備階段等待其余節(jié)點(diǎn)的核驗(yàn),若從節(jié)點(diǎn)核驗(yàn)不同意預(yù)準(zhǔn)備消息后,則不再繼續(xù)進(jìn)入下一階段[20],當(dāng)在集群內(nèi)收到2f+1 個(gè)從節(jié)點(diǎn)時(shí),發(fā)布的完成預(yù)準(zhǔn)備消息的核驗(yàn)以及同意進(jìn)入準(zhǔn)備階段,即表示準(zhǔn)備階段已經(jīng)完成[21];4)確認(rèn)階段,所有節(jié)點(diǎn)都要對(duì)外發(fā)送進(jìn)入確認(rèn)階段的消息,節(jié)點(diǎn)i查驗(yàn)包括自身在內(nèi)的2f+1 個(gè)確認(rèn)消息,當(dāng)確認(rèn)消息與預(yù)準(zhǔn)備消息一致時(shí),表示此階段已完成;5)回復(fù)階段,當(dāng)節(jié)點(diǎn)i完成確認(rèn)階段后,向客戶端反饋回復(fù)消息,客戶端C只有收到f+1 個(gè)反饋信息時(shí),表示發(fā)出的請(qǐng)求已經(jīng)成功完成共識(shí)。
PBFT 算法隨意選取主節(jié)點(diǎn),可能使得惡意節(jié)點(diǎn)連續(xù)成為主節(jié)點(diǎn),從而浪費(fèi)網(wǎng)絡(luò)資源。雖然惡意主節(jié)點(diǎn)能被其他節(jié)點(diǎn)識(shí)別并推翻[22],但是更替主節(jié)點(diǎn)會(huì)增加系統(tǒng)開銷、降低共識(shí)效率。在共識(shí)階段的一致性協(xié)議中,Prepare 和Commit 兩階段均采用節(jié)點(diǎn)在全網(wǎng)內(nèi)廣播交互驗(yàn)證的方法。隨著節(jié)點(diǎn)數(shù)的增加,系統(tǒng)所需的網(wǎng)絡(luò)開銷和帶寬容量呈多項(xiàng)式級(jí)增加,導(dǎo)致PBFT 算法無(wú)法工作。集群內(nèi)節(jié)點(diǎn)在原有的預(yù)準(zhǔn)備階段前可能處于宕機(jī)或自主退出網(wǎng)絡(luò)的狀態(tài),節(jié)點(diǎn)一旦超過(guò)算法允許的延遲時(shí)間,就無(wú)法參與后續(xù)共識(shí)流程。由于缺少退出環(huán)節(jié),該節(jié)點(diǎn)仍存在于網(wǎng)內(nèi),但是在PBFT 算法后續(xù)的共識(shí)過(guò)程中,其他節(jié)點(diǎn)仍要向該節(jié)點(diǎn)發(fā)送無(wú)效的交互驗(yàn)證消息,增加了網(wǎng)絡(luò)開銷。節(jié)點(diǎn)無(wú)法動(dòng)態(tài)地加入和退出集群,使得算法在具體應(yīng)用時(shí)靈活性較差。
DT-PBFT 算法以PBFT 為基礎(chǔ),加入了動(dòng)態(tài)機(jī)制、信用積分機(jī)制和協(xié)議一致性的優(yōu)化,有效解決了PBFT 的動(dòng)態(tài)性較差、靈活性較差、通信開銷的時(shí)延較大等問(wèn)題。
動(dòng)態(tài)機(jī)制的主要功能是節(jié)點(diǎn)動(dòng)態(tài)加入共識(shí)網(wǎng)絡(luò)和動(dòng)態(tài)退出共識(shí)網(wǎng)絡(luò),在節(jié)點(diǎn)動(dòng)態(tài)加入和退出的過(guò)程中并不需要重新動(dòng)態(tài)啟動(dòng)區(qū)塊鏈網(wǎng)絡(luò),有效提高共識(shí)算法的靈活性。
2.1.1 節(jié)點(diǎn)動(dòng)態(tài)加入
節(jié)點(diǎn)動(dòng)態(tài)加入的流程主要有以下5 個(gè)步驟:
1)申請(qǐng)階段:當(dāng)啟動(dòng)網(wǎng)絡(luò)中存在的新增節(jié)點(diǎn)后,若該節(jié)點(diǎn)要加入到集群中參與后續(xù)的共識(shí)階段,應(yīng)先向集群內(nèi)所有節(jié)點(diǎn)發(fā)送請(qǐng)求加入集群的消息s,并加上時(shí)間戳,發(fā)起AddNode 請(qǐng)求連接。
2)認(rèn)證新節(jié)點(diǎn)階段:當(dāng)現(xiàn)有節(jié)點(diǎn)收到來(lái)自新增節(jié)點(diǎn)發(fā)起的AddNode 請(qǐng)求時(shí),通過(guò)廣播并收集其他節(jié)點(diǎn)發(fā)送的AgreeAdd 消息。當(dāng)節(jié)點(diǎn)收集到2f+1 條AgreeAdd 消息時(shí),則向新增節(jié)點(diǎn)發(fā)送同意加入集群的認(rèn)證消息。當(dāng)新節(jié)點(diǎn)收到2f+1 條認(rèn)證消息時(shí),則請(qǐng)求達(dá)成一致,允許新增節(jié)點(diǎn)加入到集群中。
3)數(shù)據(jù)同步階段:新增節(jié)點(diǎn)進(jìn)入主動(dòng)恢復(fù)Recovery 的流程。新增節(jié)點(diǎn)發(fā)送數(shù)據(jù)同步的請(qǐng)求,并廣播給其他節(jié)點(diǎn),同時(shí)其他節(jié)點(diǎn)給新增節(jié)點(diǎn)發(fā)送當(dāng)前所存的全部信息,以實(shí)現(xiàn)新增節(jié)點(diǎn)的數(shù)據(jù)同步。
4)入網(wǎng)階段:在完成數(shù)據(jù)同步之后,向全區(qū)塊鏈網(wǎng)絡(luò)的所有節(jié)點(diǎn)廣播JoinNet的請(qǐng)求,請(qǐng)求參與區(qū)塊鏈網(wǎng)絡(luò)的共識(shí)。所有的現(xiàn)有節(jié)點(diǎn)收到來(lái)自新增節(jié)點(diǎn)發(fā)送的JoinNet 請(qǐng)求,同時(shí)通知所有的現(xiàn)有節(jié)點(diǎn),新增節(jié)點(diǎn)正式入網(wǎng),并重新計(jì)算網(wǎng)內(nèi)節(jié)點(diǎn)總數(shù)以及新視圖v。
5)回執(zhí)階段:由主節(jié)點(diǎn)向所有集群內(nèi)節(jié)點(diǎn)發(fā)布UpdataNet 信息,當(dāng)所有共識(shí)節(jié)點(diǎn)收到消息后,更新區(qū)塊鏈集群內(nèi)節(jié)點(diǎn)總數(shù)N和視圖v,完成新增節(jié)點(diǎn)的流程。當(dāng)視圖和節(jié)點(diǎn)總數(shù)更新完成后,共識(shí)節(jié)點(diǎn)向主節(jié)點(diǎn)進(jìn)行反饋,當(dāng)主節(jié)點(diǎn)收到2f+1 條信息,即網(wǎng)內(nèi)已完成并入新節(jié)點(diǎn),則完成一次動(dòng)態(tài)增加節(jié)點(diǎn)的共識(shí)行為。
節(jié)點(diǎn)動(dòng)態(tài)加入流程如圖2 所示,圖中New_Replica5 為新增節(jié)點(diǎn)。
圖2 節(jié)點(diǎn)動(dòng)態(tài)加入流程Fig.2 Dynamic joining procedure of nodes
2.1.2 節(jié)點(diǎn)動(dòng)態(tài)退出
節(jié)點(diǎn)動(dòng)態(tài)退出的流程如圖3所示,其中Del_Replica5為主動(dòng)請(qǐng)求退出的節(jié)點(diǎn)。
圖3 節(jié)點(diǎn)動(dòng)態(tài)退出流程Fig.3 Dynamic exit procedure of node
節(jié)點(diǎn)動(dòng)態(tài)退出流程分為以下4 個(gè)步驟:1)申請(qǐng)階段,當(dāng)Del_Replica5 節(jié)點(diǎn)主動(dòng)要求退出時(shí),由該節(jié)點(diǎn)開始向其他節(jié)點(diǎn)廣播Del-request 消息;2)認(rèn)證消息階段,其他節(jié)點(diǎn)收到Del-request 消息后,假設(shè)該節(jié)點(diǎn)退出現(xiàn)有區(qū)塊鏈網(wǎng)絡(luò),計(jì)算刪除該節(jié)點(diǎn)后的視圖v和節(jié)點(diǎn)總數(shù)N,通過(guò)向區(qū)塊鏈網(wǎng)絡(luò)中的其他節(jié)點(diǎn)廣播自己同意刪除Del_Replica5 節(jié)點(diǎn),若收集到f條AgreeDel 的消息,則所有節(jié)點(diǎn)同意并刪除該節(jié)點(diǎn)發(fā)起數(shù)據(jù)同步的請(qǐng)求,并將刪除該節(jié)點(diǎn)后的視圖v、節(jié)點(diǎn)總數(shù)N等消息封裝;3)退網(wǎng)階段,當(dāng)Del_Replica5節(jié)點(diǎn)退出后,主節(jié)點(diǎn)發(fā)送UpdataNet 信息;4)更新網(wǎng)絡(luò),全網(wǎng)所有節(jié)點(diǎn)收到UpdataNet 信息后,更新區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)總數(shù)N和視圖v,完成刪除該節(jié)點(diǎn)的流程。
PBFT[23]引入整體信用積分機(jī)制,通過(guò)對(duì)集群內(nèi)節(jié)點(diǎn)隨機(jī)選擇主節(jié)點(diǎn)的機(jī)制進(jìn)行改進(jìn)。信用積分機(jī)制的流程如圖4 所示。
圖4 信用積分機(jī)制流程Fig.4 Procedure of credit scoring mechanism
定義1(信用機(jī)制分層設(shè)置)在拜占庭容錯(cuò)算法中區(qū)塊生成驗(yàn)證由主節(jié)點(diǎn)主導(dǎo)完成。為改進(jìn)原始算法,DT-PBFT 使得各個(gè)節(jié)點(diǎn)能更好地被監(jiān)控,引入信用積分機(jī)制主要是對(duì)所有節(jié)點(diǎn)進(jìn)行分層,將節(jié)點(diǎn)分為備選主節(jié)點(diǎn)層、中間層、警告層、清理層,并將分?jǐn)?shù)值設(shè)為n且上限設(shè)為100,根據(jù)不同分?jǐn)?shù)段對(duì)區(qū)間進(jìn)行區(qū)分。
1)備選主節(jié)點(diǎn)層(80≤n≤100):在交易時(shí)將集群內(nèi)較可靠的節(jié)點(diǎn)作為主節(jié)點(diǎn),以解決拜占庭節(jié)點(diǎn)可能被連續(xù)選作主節(jié)點(diǎn)而造成算法運(yùn)行效率較低的問(wèn)題。當(dāng)主節(jié)點(diǎn)需切換時(shí),仍會(huì)在備選主節(jié)點(diǎn)中選取節(jié)點(diǎn)進(jìn)行替換。
2)中間層(40 3)警告層(20 4)清理層(n<20):節(jié)點(diǎn)初始信用分值處于中間層,經(jīng)多次作惡行為后進(jìn)行分值減半處理,將被網(wǎng)絡(luò)內(nèi)定為不信任節(jié)點(diǎn),并將信息返回到集群內(nèi)的每個(gè)節(jié)點(diǎn),再由主節(jié)點(diǎn)刪除該節(jié)點(diǎn)的請(qǐng)求,最終經(jīng)交互后確認(rèn)將該節(jié)點(diǎn)移除出網(wǎng)絡(luò),借助這個(gè)機(jī)制來(lái)減少網(wǎng)內(nèi)的拜占庭節(jié)點(diǎn),從而提高算法的效率,降低無(wú)效的網(wǎng)絡(luò)開銷。 定義2惡意節(jié)點(diǎn)被清出網(wǎng)絡(luò)的流程如圖5 所示。當(dāng)存在惡意節(jié)點(diǎn)被踢出現(xiàn)有區(qū)塊鏈網(wǎng)絡(luò)時(shí),首先計(jì)算刪除惡意節(jié)點(diǎn)后的視圖v、節(jié)點(diǎn)總數(shù)N;其次由主節(jié)點(diǎn)向其他節(jié)點(diǎn)廣播Del-message 消息,其他節(jié)點(diǎn)收到Del-message 消息后,并向區(qū)塊鏈網(wǎng)絡(luò)中的其他節(jié)點(diǎn)廣播自己同意刪除Del_Replica5;若收集到f條AgreeDel 的消息,則所有節(jié)點(diǎn)同意并刪除該節(jié)點(diǎn)發(fā)起數(shù)據(jù)同步的請(qǐng)求,并將刪除該節(jié)點(diǎn)后的視圖v、節(jié)點(diǎn)總數(shù)N等消息封裝;最后Del-Node5 節(jié)點(diǎn)退出后,主節(jié)點(diǎn)發(fā)送UpdataNet 信息,全網(wǎng)所有節(jié)點(diǎn)收到UpdataNet 信息后,更新區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)總數(shù)N和視圖v,完成刪除該節(jié)點(diǎn)的流程。 圖5 惡意節(jié)點(diǎn)被清除出網(wǎng)絡(luò)的流程Fig.5 Procedure of removing malicious nodes from the network 定義3(信用機(jī)制節(jié)點(diǎn)層次變更)在本文的信用機(jī)制中,根據(jù)每次請(qǐng)求處理的結(jié)果,針對(duì)性地對(duì)節(jié)點(diǎn)的信用分值進(jìn)行增減。若視圖完成一次更替后,則將對(duì)所有參與交易的節(jié)點(diǎn)分值均加1,若交易失敗后,則將拜占庭節(jié)點(diǎn)的積分減為原積分的50%。采用信用機(jī)制的優(yōu)點(diǎn)主要有:1)若拜占庭節(jié)點(diǎn)處于上兩層之中,通過(guò)減半機(jī)制將備選主節(jié)點(diǎn)層的拜占庭節(jié)點(diǎn)先降到中間層或?qū)⒅虚g層的拜占庭節(jié)點(diǎn)降到警告層,通過(guò)降級(jí)剔除拜占庭節(jié)點(diǎn),提高信用機(jī)制的可靠性,同時(shí)也給好節(jié)點(diǎn)(即非作惡節(jié)點(diǎn))一到兩次的緩沖機(jī)會(huì),避免出現(xiàn)誤操作或網(wǎng)絡(luò)因素而造成交易請(qǐng)求失敗,被集群直接判定為拜占庭節(jié)點(diǎn),最終被移除出網(wǎng)絡(luò),提高了在實(shí)際應(yīng)用中的靈活性;2)采用信用積分的減半操作增大對(duì)拜占庭節(jié)點(diǎn)的作惡懲罰,并通過(guò)獎(jiǎng)勵(lì)機(jī)制對(duì)好節(jié)點(diǎn)進(jìn)行激勵(lì),提高好節(jié)點(diǎn)的分值,使其進(jìn)入到備選主節(jié)點(diǎn)層中。本文結(jié)合這兩個(gè)優(yōu)點(diǎn)能大幅減少整個(gè)網(wǎng)絡(luò)中的拜占庭節(jié)點(diǎn)數(shù),避免PBFT 算法中類似于拜占庭節(jié)點(diǎn)連續(xù)當(dāng)選主節(jié)點(diǎn)的情況,解決算法效率降低的問(wèn)題。 傳統(tǒng)PBFT 算法[24]中,若要求算法在f<(N-1)/3的基礎(chǔ)上達(dá)到一致性共識(shí),則表明合法數(shù)量的節(jié)點(diǎn)已驗(yàn)證通過(guò)消息,即要求消息進(jìn)入確認(rèn)階段后保證已有2f-1 的節(jié)點(diǎn)已完成準(zhǔn)備階段。PBFT 算法共需兩輪全網(wǎng)節(jié)點(diǎn)交互確保消息準(zhǔn)確一致,最終使得算法的復(fù)雜度為O(N2)才可滿足算法可靠性的需求。其中N為總節(jié)點(diǎn)數(shù),f為存在的拜占庭節(jié)點(diǎn)數(shù)目。PBFT 算法存在選擇主節(jié)點(diǎn)時(shí)的隨機(jī)性,以及整個(gè)節(jié)點(diǎn)網(wǎng)絡(luò)靈活性較差的問(wèn)題,導(dǎo)致在共識(shí)過(guò)程中無(wú)法及時(shí)將惡意節(jié)點(diǎn)排出。當(dāng)主節(jié)點(diǎn)發(fā)生故障或拜占庭節(jié)點(diǎn)成功作惡,甚至連續(xù)多次觸發(fā)視圖更換協(xié)議時(shí),PBFT 算法將不斷重新選取主節(jié)點(diǎn)進(jìn)行共識(shí)階段的信息交互驗(yàn)證直至共識(shí)成功,導(dǎo)致浪費(fèi)大量網(wǎng)絡(luò)開銷。為解決上述問(wèn)題,本文提出的DT-PBFT 算法以增加信用積分篩選作為基礎(chǔ),采用優(yōu)化一致性協(xié)議和動(dòng)態(tài)機(jī)制保證集群內(nèi)節(jié)點(diǎn)的可靠性。其中增加信用積分篩選信用度較高的節(jié)點(diǎn)作為備選主節(jié)點(diǎn),增強(qiáng)主節(jié)點(diǎn)的可信任度。動(dòng)態(tài)機(jī)制降低了有問(wèn)題節(jié)點(diǎn)被選作主節(jié)點(diǎn)的概率以及在共識(shí)階段中減少一輪全網(wǎng)共識(shí)驗(yàn)證的交互信息,使算法的復(fù)雜度降低。假設(shè)全網(wǎng)節(jié)點(diǎn)數(shù)為N,那么完成一次共識(shí)過(guò)程傳遞需要消息的次數(shù)如式(1)所示: M=N2+3N-1 (1) 優(yōu)化后的一致性協(xié)議流程如圖6 所示,主節(jié)點(diǎn)以及整個(gè)網(wǎng)絡(luò)的可信任程度得到了提高,有效減少了因主節(jié)點(diǎn)出現(xiàn)故障而導(dǎo)致不斷進(jìn)行視圖更換的現(xiàn)象,同時(shí)避免了作惡節(jié)點(diǎn)可連續(xù)被選為主節(jié)點(diǎn)的情況。基于上述優(yōu)勢(shì),優(yōu)化后的一致性協(xié)議保證了算法的有效性和可靠性,提高了算法的吞吐量和算法共識(shí)達(dá)成一致的成功率,尤其在節(jié)點(diǎn)數(shù)較多情況下,大幅降低了網(wǎng)絡(luò)開銷,節(jié)約網(wǎng)絡(luò)資源。 圖6 一致性協(xié)議流程Fig.6 Procedure of consistency protocol 本文從吞吐量、時(shí)延、交易請(qǐng)求完成率以及CPU 的利用率等方面對(duì)DT-PBFT、DDBFT 和PBFT 進(jìn)行對(duì)比,以驗(yàn)證算法的有效性、適用性及節(jié)能性。該仿真實(shí)驗(yàn)所用的PC 機(jī)配置為 Intel Core i7-9750H 2.6 GHz CPU及Intel Core i5-6500 3.2 GHz CPU 雙機(jī)連接實(shí)現(xiàn)主從端分立仿真測(cè)試,通過(guò)Java 多線程機(jī)制模擬網(wǎng)絡(luò)中的共識(shí)節(jié)點(diǎn)通信交互過(guò)程。 交易時(shí)延是指客戶端向主節(jié)點(diǎn)發(fā)送一個(gè)交易請(qǐng)求,以確認(rèn)完成共識(shí)的時(shí)間間隔[25]。該實(shí)驗(yàn)的交易時(shí)延取200 次交易的平均值。圖7 所示為不同算法的交易時(shí)延對(duì)比。 圖7 不同算法的交易時(shí)延對(duì)比Fig.7 Transaction delay comparison among different algorithms 從圖7 可以看出,當(dāng)存在作惡節(jié)點(diǎn)時(shí),隨著節(jié)點(diǎn)個(gè)數(shù)的增加,相比PBFT 算法,DT-PBFT 交易時(shí)延增長(zhǎng)的速度得到有效減慢。但因DT-PBFT 增加了動(dòng)態(tài)處理機(jī)制,使得時(shí)延略高于DDBFT。DT-PBFT 雖然增大了部分時(shí)延,但在處理數(shù)據(jù)上具有較優(yōu)的靈活性及穩(wěn)定性。 交易請(qǐng)求有效完成率是當(dāng)交易請(qǐng)求發(fā)出時(shí)經(jīng)過(guò)一次主節(jié)點(diǎn)選舉即可順利完成請(qǐng)求,通過(guò)有效的完成率表征該網(wǎng)絡(luò)內(nèi)節(jié)點(diǎn)整體的可信程度及安全可靠性。隨著節(jié)點(diǎn)數(shù)的增加,不同算法的交易完成次數(shù)對(duì)比如圖8 所示。從圖8 可以看出,無(wú)論節(jié)點(diǎn)數(shù)是多少,DT-PBFT 算法的交易完成次數(shù)均最多。 圖8 不同算法的交易完成次數(shù)對(duì)比Fig.8 Number of transactions completion comparison among different algorithms 表1所示為不同算法的交易請(qǐng)求有效完成率對(duì)比。隨著節(jié)點(diǎn)數(shù)的不斷增加,DDBFT 和PBFT 的有效完成率呈現(xiàn)明顯的下降趨勢(shì),而DT-PBFT 雖然有一定程度的下降,但整體變化較平穩(wěn)。因此,DT-PBFT 算法在共識(shí)過(guò)程中具有較優(yōu)的穩(wěn)定性,由極大程度降低作惡節(jié)點(diǎn)當(dāng)選主節(jié)點(diǎn)的概率。同時(shí)主動(dòng)刪除作惡節(jié)點(diǎn)的機(jī)制可以將作惡節(jié)點(diǎn)從網(wǎng)內(nèi)剔除,提升了網(wǎng)內(nèi)節(jié)點(diǎn)整體的安全穩(wěn)定性,使得每次請(qǐng)求順利達(dá)成共識(shí),減少因多次重發(fā)引起網(wǎng)絡(luò)資源的浪費(fèi),從而降低網(wǎng)絡(luò)開銷。 表1 不同算法的交易請(qǐng)求有效完成率 Table 1 Effective completion rates of transaction requests comparison among different algorithms 吞吐量是指單位時(shí)間內(nèi)完成的交易數(shù)量,一般用每秒事務(wù)處理量(Transaction Per Second,TPS)來(lái)表示[17]。該實(shí)驗(yàn)設(shè)置客戶端發(fā)送1 000 條交易請(qǐng)求,記錄每秒能夠完成共識(shí)的交易數(shù)量。為保證仿真實(shí)驗(yàn)結(jié)果的代表性,實(shí)驗(yàn)數(shù)據(jù)取多次結(jié)果的平均值(取整)。吞吐量測(cè)試主要從兩方面進(jìn)行分析:1)單獨(dú)在信用積分機(jī)制下對(duì)4 種算法進(jìn)行對(duì)比;2)在信用積分機(jī)制條件下再增加隨機(jī)的增或退節(jié)點(diǎn),以測(cè)試4 種算法在仿真模擬實(shí)際應(yīng)用中對(duì)動(dòng)態(tài)靈活性的表現(xiàn)情況。 3.3.1 信用積分機(jī)制作用 本節(jié)實(shí)驗(yàn)在PBFT 算法的基礎(chǔ)上加入信用積分機(jī)制,僅允許對(duì)作惡節(jié)點(diǎn)按信用積分機(jī)制進(jìn)行合理的剔除,實(shí)驗(yàn)結(jié)果如圖9 所示。圖9 顯示隨著節(jié)點(diǎn)數(shù)的增加,交互信息呈指數(shù)級(jí)增加,4 種算法共識(shí)過(guò)程的吞吐量會(huì)隨之遞減。因DT-PBFT 引入的信用積分機(jī)制以及將共識(shí)階段由三階段縮減為兩階段的優(yōu)勢(shì)性,能自動(dòng)剔除網(wǎng)內(nèi)積分較低的作惡節(jié)點(diǎn),最大程度減少無(wú)用的開銷。DT-PBFT 穩(wěn)定的下降趨勢(shì)明顯優(yōu)于DDBFT、DGPBFT 以及PBFT,證明其具有良好的安全穩(wěn)定性,在存在作惡節(jié)點(diǎn)的環(huán)境下可以凸顯出更大的優(yōu)勢(shì),也更貼合實(shí)際的應(yīng)用場(chǎng)合。 圖9 不同算法在信用積分機(jī)制下吞吐量對(duì)比Fig.9 Throughput comparison among different algorithms under credit scoring mechanism 3.3.2 信用積分機(jī)制與動(dòng)態(tài)機(jī)制的作用 在不同初始節(jié)點(diǎn)數(shù)(n>4)下,交易請(qǐng)求執(zhí)行的過(guò)程中,本文隨機(jī)對(duì)節(jié)點(diǎn)進(jìn)行增/刪,每次均增/刪一個(gè)節(jié)點(diǎn)作為測(cè)試,各增/刪十次。為了使仿真實(shí)驗(yàn)結(jié)果適用于實(shí)際應(yīng)用的場(chǎng)合,本節(jié)隨機(jī)設(shè)置增/刪節(jié)點(diǎn)來(lái)代替實(shí)際應(yīng)用場(chǎng)合中節(jié)點(diǎn)的入/出,并進(jìn)行多次實(shí)驗(yàn)取均值,使結(jié)果具有代表性。因?yàn)镻BFT 對(duì)于增刪節(jié)點(diǎn)在實(shí)際測(cè)試中表現(xiàn)較差,所以本節(jié)主要對(duì)DT-PBFT、DDBFT 和DGPBFT 算法進(jìn)行對(duì)比分析。當(dāng)引入動(dòng)態(tài)機(jī)制時(shí)不同算法的吞吐量對(duì)比如圖10 所示。 圖10 當(dāng)引入動(dòng)態(tài)機(jī)制時(shí)不同算法的吞吐量對(duì)比Fig.10 Throughput comparison among different algorithms when introducing dynamic mechanism 從圖10 可以看出,加入動(dòng)態(tài)機(jī)制對(duì)于DDBFT、DGPBFT 的吞吐量也具有一定影響,對(duì)DT-PBFT 吞吐量的影響程度并不明顯。因此,DT-PBFT 具有更強(qiáng)的穩(wěn)定性和靈活性。結(jié)合交易請(qǐng)求有效完成率可以看出,動(dòng)態(tài)機(jī)制的引入對(duì)于DT-PBFT 只產(chǎn)生了低程度的吞吐量降低,但在整體完成交易請(qǐng)求成功率、效率以及動(dòng)態(tài)特性上更能體現(xiàn)DT-PBFT 算法優(yōu)異的綜合性能。 本文對(duì)CPU 的使用率進(jìn)行仿真數(shù)據(jù)分析,為保證實(shí)驗(yàn)結(jié)果具有普遍性,該實(shí)驗(yàn)取多個(gè)時(shí)刻下不同算法的利用率進(jìn)行平均后取整。不同算法的CPU 使用率對(duì)比如圖11 所示。 圖11 不同算法的CPU 使用率對(duì)比Fig.11 CPU utilization comparison among different algorithms 從圖11 可以看出,CPU 的使用率隨著節(jié)點(diǎn)數(shù)的增加各算法會(huì)伴隨不同程度的信息交互量的提升。其中DT-PBFT 算法的上升趨勢(shì)較DDBFT、DGPBFT 算法平穩(wěn)。隨著節(jié)點(diǎn)數(shù)不斷增加,DT-PBFT 算法的CPU 使用率的增長(zhǎng)率越低,具有較優(yōu)的節(jié)能性。當(dāng)節(jié)點(diǎn)數(shù)設(shè)置為22時(shí),PBFT 和DDBFT 的CPU 使用率已經(jīng)達(dá)到了65%,且DGPBFT也高于60%,而DT-PBFT仍維持在50%左右。因此,DT-PBFT 具有較優(yōu)的節(jié)能性,在實(shí)際應(yīng)用過(guò)程中有效地節(jié)省了CPU 資源。 由于PBFT 算法中的節(jié)點(diǎn)存在無(wú)法隨時(shí)動(dòng)態(tài)地加入或退出網(wǎng)絡(luò)、主節(jié)點(diǎn)選取過(guò)于隨意且通信開銷大等問(wèn)題,因此本文提出一種實(shí)用拜占庭容錯(cuò)算法DT-PBFT,通過(guò)引入動(dòng)態(tài)加入或退出機(jī)制,使節(jié)點(diǎn)可以根據(jù)不同需求隨時(shí)加入或退出集群,從而提高網(wǎng)絡(luò)工作時(shí)的動(dòng)態(tài)性。設(shè)計(jì)信用積分機(jī)制,通過(guò)獎(jiǎng)懲機(jī)制對(duì)節(jié)點(diǎn)分?jǐn)?shù)進(jìn)行分段,以選擇集群內(nèi)信任度高的節(jié)點(diǎn)作為主節(jié)點(diǎn),有效降低拜占庭節(jié)點(diǎn)當(dāng)選主節(jié)點(diǎn)的概率,減少網(wǎng)絡(luò)開銷。同時(shí)通過(guò)動(dòng)態(tài)退出機(jī)制剔除信用值較低的作惡節(jié)點(diǎn),提高共識(shí)的成功率,將共識(shí)階段中的兩次全網(wǎng)廣播改為一次。在進(jìn)入正式共識(shí)前,通過(guò)對(duì)節(jié)點(diǎn)確認(rèn)后再更新視圖,減少無(wú)效的信息交互以及對(duì)帶寬的消耗。實(shí)驗(yàn)結(jié)果表明,本文所提DT-PBFT 算法在實(shí)際應(yīng)用過(guò)程更具靈活性且更加高效,在減少對(duì)網(wǎng)絡(luò)資源消耗的同時(shí)節(jié)能性也得以提升。下一步將優(yōu)化動(dòng)態(tài)機(jī)制,在弱網(wǎng)絡(luò)環(huán)境下改進(jìn)本文提出的DT-PBFT 算法,保證DT-PBFT 算法的交易請(qǐng)求有效完成率和共識(shí)安全性的前提下,提高共識(shí)效率且減少通信開銷。2.3 一致性協(xié)議優(yōu)化
3 仿真實(shí)驗(yàn)與結(jié)果分析
3.1 時(shí)延測(cè)試
3.2 交易請(qǐng)求有效完成率
3.3 吞吐量測(cè)試
3.4 CPU 的使用率
4 結(jié)束語(yǔ)