方燚飚,周創明,李 松,宋亞飛,高 娜,劉 唐
1.空軍工程大學 研究生院,西安 710038
2.空軍工程大學 防空反導學院,西安 710038
3.中國人民解放軍 31436部隊
2008年,一位化名為“中本聰”的學者提出了一種數字加密貨幣——比特幣[1],比特幣能夠有效解決傳統數字貨幣中的“雙花”問題[2]和拜占庭將軍問題[3],因而迅速引起了社會各界的廣泛關注。隨著數字加密貨幣的普及和發展,區塊鏈技術逐漸進入人們的視野。區塊鏈是一種以鏈式結構為基礎的分布式賬本[4],它是點對點網絡、密碼學、共識算法、智能合約等多種技術結合的產物,具有去中心化、不可篡改、安全可信、集體維護等特點。目前,區塊鏈技術的應用場景已由早期的金融領域拓展到醫療、物聯網、供應鏈、邊緣計算等非金融領域[5]。作為一種分布式系統,區塊鏈需要保證系統內的所有節點達成一致的狀態共識。因此,共識算法是區塊鏈技術的重要組成部分之一,直接影響到區塊鏈系統的性能和可拓展性[6]。根據部署模式的不同,區塊鏈可以分為公共鏈、聯盟鏈和私有鏈三種類型,公有鏈中的共識算法以X證明機制(proof of X,PoX)為主[7],如工作量證明機制(proof of work,PoW),該算法有效解決了區塊鏈系統中的共識問題,但需要消耗大量的網絡算力,整體效率不高[8];Quantum[9]提出了權益證明機制(proof of stake,PoS),在數學計算難度的基礎上加入了幣齡的概念,一定程度上減小了算力的消耗,提高了共識效率。聯盟鏈和私有鏈中節點需經過授權后才能夠加入區塊鏈網絡,因此也被稱為許可鏈[10]。許可鏈中使用的共識算法以分布式一致性算法為主,包括實用拜占庭容錯算法(practical Byzantine fault tolerance,PBFT)[11]及其優化算法、Paxos算法[12]和Raft算法[13]等。PBFT算法是一類狀態機拜占庭算法,能夠容忍一定數量的惡意節點的攻擊,并通過狀態機復制機制來提高系統的可靠性和可用性。PBFT算法能夠較好地解決分布式系統中面臨的拜占庭將軍問題,目前已成為許可鏈中主流的共識算法。
PBFT算法由拜占庭容錯算法(Byzantine fault tolerance,BFT)改進而來,它繼承了BFT算法的優點,大幅降低了算法執行的網絡開銷,使算法具有了實際應用價值。但PBFT算法在使用過程中還存在一些不足。首先PBFT算法無法動態感知系統節點數目的變化,由于算法采用C/S架構,系統必須通過重啟來添加新節點,這對系統的日常運作會造成較大的影響。其次PBFT算法中各節點按編號順序輪流擔任主節點,選取方式較為簡單且缺少節點資質審核,會對系統安全性帶來隱患。最后PBFT算法雖然將BFT算法的復雜度降到了多項式級別,但對分布式系統而言其帶來的通信壓力仍然較大,且隨著系統內節點數的增加,系統時延將大大增加,最終影響到系統運行效率。針對上述問題,研究人員希望通過優化PBFT算法的執行協議來提高算法性能,目前已經得到了T-PBFT[14]、Scalable BFT[15]和EPBFT[16]等PBFT的改進算法。
針對PBFT算法中存在的問題,結合聯盟鏈的特點,本文提出了一種改進的PBFT算法(score-based PBFT,S-PBFT)。首先,在原有PBFT算法中引入評分機制,根據各節點運行狀況對其進行打分,按評分高低將其分為共識節點、候選節點和預備節點三部分。其次,簡化了PBFT算法一致性協議中的確認階段,并將原本由所有節點共同參與的共識過程改為僅由共識節點參與,提高了共識效率,降低了算法的復雜度。最后,結合評分機制改進了主節點選舉方式,S-PBFT中的主節點由共識節點中評分最高且具有最大編號的節點擔任,最大程度上保證主節點的可靠性,減少觸發視圖更換協議的頻率,提高算法效率。
BFT算法最早由Lampor于20世紀80年代提出[17],主要用于解決分布式計算領域中的共識問題,但原始的BFT算法的運行復雜度較高,且會隨著系統節點數的增加而呈指數級上升,因而缺少實際的應用價值。結合BFT算法的特性及不足,研究人員開展了大量改進研究,目前針對BFT算法的優化主要有以下三個方向:狀態機拜占庭系統、結合可信部件的拜占庭系統和結合應用場景優化的拜占庭系統。
狀態機拜占庭系統要求所有節點都執行統一的操作,來維護系統狀態的一致性。現有的狀態機拜占庭系統大多由PBFT算法改進得到,包括通過hybrid quorum(HQ)減少序號分配過程的HQ算法[18],基于speculation技術的簡化了一致性協議的Zyzzyva算法[19],運用拜占庭鎖技術從而提高系統性能的Zzyzx算法[20]以及將一致性過程與請求執行過程分離的ZZ算法[21]和ODRC算法[22]等。
結合可信部件的拜占庭系統通過在系統中增加可信部件來提高系統可靠性、減少系統共識節點數、降低系統開銷。早期可信部件主要用于系統的檢測,如PRRW算法[23]中用于控制服務器修復過程的內部同步網絡和VM-FIT[24]中用于加快數據同步的虛擬化技術等。后期,研究人員利用可信部件來減少系統所需節點數,從而降低系統開銷。Miller等通過一種可信計數器(trusted incrementer)來降低系統的開銷[25]。
部分應用場景下,已有拜占庭協議無法滿足實際需求,這就需要結合實際應用場景對拜占庭協議進行優化。Li等[26]針對分布式網絡中可能出現的通信不穩定的問題,設計了一種改進的拜占庭算法Zeno。借助Zeno算法,系統能夠在最多1/3的節點出現網絡中斷的情況下保持一定的功能,且在網絡恢復后,可快速使所有節點達成一致狀態。區塊鏈平臺NEO所采用的DBFT算法針對大規模節點數下系統性能不足的問題,對拜占庭協議進行了優化。
PBFT算法是一類狀態機拜占庭系統,主節點、從節點、視圖是算法運行過程中的三個重要組成部分。主節點是算法執行過程的發起者,負責對請求進行排序;從節點接收并執行從主節點接收到的請求,保證算法的有效性;所有節點需要在統一視圖下執行請求,當主節點發生故障時,就會出現視圖更換機制改變當前主節點。在一具有f個拜占庭節點的系統中,節點總數N需大于3f+1才能使系統達成一致,即PBFT算法最多能夠容忍(N-1)/3個非法節點的破壞。
為保證系統中節點達成共識,PBFT算法運行在以下三種協議下:一致性協議、檢查點協議和視圖更換協議。其中一致性協議是PBFT算法的核心協議,原始的PBFT算法中一致性協議主要有請求(request)、預準備(pre-prepare)、交互(prepare)、確認(commit)和響應(reply)五個階段,如圖1所示。

圖1 PBFT算法一致性協議執行流程Fig.1 Implementation process of PBFT algorithm conformance protocol
(1)請求階段:客戶端C向主節點N0發送請求消息<RE QUEST,m,t,c>,其中m為客戶端請求的主要內容,t為時間戳,c為客戶端C的身份信息。
(2)預準備階段:主節點N0接收到請求消息m后,為接收到的m分配序號,并生成預準備消息<<PR EPREPARE,v,n,d>,m>,其中v為當前視圖編號,n為主節點對請求內容m分配的編號,d為請求內容m的消息摘要。生成完畢后,主節點將預準備消息發送至各個節點。
(3)交互階段:從節點接收到預準備消息后,需要與其余節點進行交互。從節點向其余節點發送交互消息<PREPARE,v,n,d,i>,其中i為發送消息的節點的編號。從節點接收到來自其余從節點的交互消息后,會將接收到的交互消息與來自主節點的預準備消息進行對比驗證,當有2f+1個來自不同從節點的交互消息與預準備消息一致時,即可進入下一階段。
(4)確認階段:節點完成交互階段后,即進入確認階段。在此階段中,包括主節點在內的所有節點向其余節點發送確認消息<COMMIT,v,n,D(m),i>,其中D(m)為節點對請求的簽名。節點接收到來自其余節點的確認消息后,對消息內容的準確性進行核驗。當有2f+1個確認消息通過驗證,則確認階段完成。
(5)回復階段:完成確認階段后,各節點向客戶端發送回復消息<REPLY,v,t,c,i,r>,其中r為客戶端請求的執行結果。若客戶端在接收到至少f+1個相同的回復消息,則請求執行成功。
PBFT算法是一類“狀態機”拜占庭系統,早期用于實現傳統分布式系統中各節點狀態的一致性,其首要任務是解決系統中可能出現的拜占庭問題,同時需要保證節點能夠按照既定順序執行客戶請求。在區塊鏈系統中,各個區塊的共識過程按照具有嚴格的順序進行,無需共識算法進行干預。另外,在聯盟鏈環境下,節點在進入系統時需要經過一定的身份認證機制,如基于角色的身份認證等,能夠有效地避免女巫攻擊等問題。因此,為使PBFT算法能夠更好地應用于聯盟鏈系統,結合聯盟鏈特點,針對經典PBFT算法中存在的不足,提出了以下優化思路:
(1)省略一致性協議中的請求和回復階段。PBFT算法中的請求和回復階段是系統節點與客戶端之間的交互,而在區塊鏈共識過程中數據區塊直接由主節點生成,無需專門的客戶端參與。
(2)引入評分機制,按節點積分進行分類。首先結合聯盟鏈身份認證的特點,根據節點處理能力大小為各節點分配初始積分(S ib)并記錄各節點初始積分的值,隨后根據節點積分(Si)大小將其分為共識節點、候選節點、預備節點三類。其中,共識節點負責完成系統共識過程,由PBFT算法一致性協議可知,當客戶端接受到超過f+1個來自合法節點的一致消息時,才可認定請求執行成功,因此共識節點的數量取為2f+1;候選節點只保存共識結果,而不參與系統共識過程,其數量不定;預備節點由初始積分較低的節點和共識節點中發生錯誤的節點組成,不參與共識但需保存共識結果,其數量不定。
(3)改進主節點選舉方式。主節點屬于共識節點的一部分,當主節點出現問題,該節點直接降為預備節點,隨后將余下共識節點中持有積分最高且初始積分較高的節點作為主節點。
(4)優化一致性協議,對確認階段進行簡化。在PBFT算法中,節點交互階段已經完成了共識過程,確認階段的作用主要是使各節點掌握其余節點的狀態。在傳統的分布式系統中,確認階段為系統提供了狀態確認的過程,使各節點能夠知曉其余節點的共識狀態,確認系統達成一致。在聯盟鏈系統中,每一個達成共識的區塊都可作為一個檢查點,在交互階段完成共識后,通過區塊同步即可使系統達成一致。相較于傳統的分布式系統,聯盟鏈中的節點具有更高的可靠性,系統環境更為穩定。同時,改進的主節點選舉方式和聯盟鏈的可追溯的特性也保證了區塊同步過程的合法性,因此在S-PBFT算法中對確認過程進行簡化。
S-PBFT算法將原本需要進行兩兩交互的確認過程簡化為直接由主節點對共識結果進行判定,從而減少了一次復雜度為O(N2)的交互過程,在一定程度上能夠降低系統通訊開銷,提高算法的共識效率。
(1)系統節點集合為N,由{1,2,…,i}表示,非法節點最大容忍數為f,N中節點數i不應小于3f+1個,考慮到系統共識效率,i通常取3f+1。
(2)共識節點集合為G,由{1,2,…,g]表示,為使算法能夠達成有效共識,結合拜占庭協議的共識原理,S-PBFT算法中共識節點的數量g不得小于2f+1;候選節點集合為H,由{1,2,…,h}表示;預備節點集合為Y,由{1,2,…,y}表示。候選節點數h與預備節點數y之和為f。
(3)初始狀態下,共識節點由積分在9及以上的節點組成;候選節點由積分在8~9之間的節點組成;預備節點由積分在8及以下的節點組成。
節點評分機制是S-PBFT算法改進思想的核心,為主節點選舉和一致性協議的優化奠定了基礎。S-PBFT算法的節點評分機制主要分為節點初始積分和積分調整規則兩部分,下面結合這兩部分來分析節點評分機制。
2.3.1 節點初始積分
S-PBFT算法中,節點初始積分的賦予主要有以下兩種情況:系統初始化時對系統內節點的評分、有新節點加入時對新節點的評分。
(1)系統初始化時節點的評分。本文提出的S-PBFT算法主要應用于聯盟鏈環境,聯盟鏈是由一定數量的具有共同訴求的節點構建,如針對銀行之間結算問題的銀行同業聯盟鏈。此類區塊鏈中,節點之間的綜合實力存在一定的差距,通常情況下節點綜合實力越強,節點具有的性能和功能優勢就越大,節點穩定性就越好。
結合以上分析,S-PBFT算法將節點綜合實力作為初始積分的評分依據。進行評分時,將所有節點按綜合實力大小進行排序,考慮到共識過程中對節點穩定性和性能的需求,將排好序的節點按2f+1、f2、f2的比例分為共識節點、候選節點和預備節點三部分,節點順序由所有節點投票得出。其中,共識節點部分節點評分需大于9,候選節點部分節點評分在8~9,預備節點部分節點評分小于8。
在實際應用過程中,可根據部署系統的需求,對候選節點和預備節點的比例進行調整,但共識節點的數量不得小于2f+1。
(2)新節點加入時節點的評分。聯盟鏈中,節點需要得到聯盟鏈的授權后才能夠加入到聯盟鏈網絡中,此時即需要對節點進行評分。節點積分大小同樣由授權節點投票得出,系統根據節點積分將新節點劃分到對應節點集合中。為維護系統穩定性,通常情況下,不將新節點直接劃為共識節點。
2.3.2 積分調整規則
S-PBFT算法中,節點具有三種不同狀態,不同狀態的節點之間能夠互相轉換,但具有一定的轉換條件,在此制定如下規則:
(1)加分規則:節點每成功完成一次共識過程,積分在9以上的節點積分加0.01,積分在8~9的節點積分加0.05,積分在8以下的節點積分加0.2。集合G中,節點積分最高為10,積分到達10后不再增加;集合H和Y中,節點積分增加無上限。有以下公式:

其中,S p為節點執行共識前的積分,S為節點執行共識后的積分。
(2)扣分規則:集合G與H中,節點在共識過程中出現錯誤,節點的積分直接降為8,且不論節點原本類型,均直接轉換為預備節點;集合Y中,節點出現錯誤,節點積分減0.5。
(3)節點轉換規則:若共識節點出現錯誤,則出錯節點轉換為預備節點,并將集合H中積分最高且初始積分較高的節點轉換為共識節點,節點積分變為9;若候選節點出現錯誤,則出錯節點轉換為預備節點,并將集合Y中積分最高且初始積分較高的節點轉換為候選節點,節點積分變為8。
在系統初始化或是主節點出現拜占庭錯誤后,需要進行主節點選舉。S-PBFT算法中,主節點選舉以節點積分作為主要參考,將持有積分最高且初始積分較高的節點作為主節點。較高的持有積分說明節點功能近期較為穩定,較高的初始積分則說明節點具有較好的性能,將此類節點作為主節點,能夠最大程度上保證主節點的穩定性,減少觸發視圖轉換的概率,提高系統效率。下面簡要說明主節點選舉的流程。
主節點選舉過程中,集合G內的各節點需要通過兩兩交互來確定主節點人選。交互過程中,將節點i編號(i)、持有積分值(S i)和初始積分值(Sib)組成一個數組(i,S i,S ib),作為選舉憑證(vote)。節點將自身的vote廣播至各個共識節點,各節點獎接受到的vote與自身vote進行比較后,保存條件更優的vote,可能的比較結果如下:
(1)若接收到的vote中的持有積分數據小于節點自身的持有積分數據,則保存自身vote。
(2)若接收到的vote中的持有積分數據等于節點自身的持有積分數據,則繼續比較初始積分。若接收vote的初始積分更高,則保存接收到的vote;否則保存自身vote。若兩者初始積分也相同,則保存節點編號更小的vote。
(3)若接收到的vote中的持有積分數據大于節點自身的持有積分數據,則保存自身vote。
當完成所有節點的比較后,各共識節點將自身簽名添加到最終結果(D(i),g,S g,S gb)中,其中D(i)為節點i的簽名,g為待定主節點的編號,隨后進行廣播。當有至少f+1個結果一致的憑證時,選舉完成,最終憑證中節點編號對應的節點作為主節點,選舉結束。選舉過程如圖2所示,圖中僅為節點1與其他節點的交互過程,其余節點間交互過程類似。時間間隔后,主節點將這些交易中的合法交易打包,生成一個數據區塊。隨后,進入一致性協議階段,對此交易區塊進行共識。

圖2 主節點選舉過程示意圖Fig.2 Process of master node election
(1)S-預準備階段(S-pre-prepare):主節點根據數據區塊內容生成S-預準備消息<<S-PRE-PREPARE,v,n,H(b)>,b>,其中H(b)為區塊的內容摘要即區塊哈希值,b為本次進行共識的區塊。隨后,主節點將S-預準備消息發送至所有節點,其中共識節點需對消息內容進行核驗,核驗通過則進入下一階段,否則進行視圖變更,更換主節點;候選節點和預備節點僅接收消息,不對消息內容進行反饋。
(2)S-交互階段(S-prepare):共識節點完成S-預準備消息核驗后,需生成S-交互消息<S-PREPARE,v,n,H()b,i>,其中i為發送節點的編號,將此S-交互消息廣播至所有共識節點。共識節點會對接收到的S-交互消息進行核驗,當有f+1個來自不同共識節點的一致的S-交互消息時,即可進行下一階段,否則中止共識過程,更換問題節點,重啟共識過程。
(3)S-確認階段(S-commit):完成S-交互消息的核驗后,進入即可進入S-確認階段。S-確認階段主要用于核驗各節點保存的區塊數據的正確性,因此包括候選節點和預備節點在內的所有節點均需要向主節點發送S-確認消息,以保證最終上鏈區塊的一致性。S-確認消息的內容為<S-COMMIT,v,n,H(b),D(b)i,i>,其中D(b)i為節點i對區塊b的簽名。當主節點接受到2f+1個來自不同節點的S-確認消息時,即完成共識,區塊b可保存到聯盟鏈中。
S-PBFT算法的流程如圖3所示。

圖3 S-PBFT算法執行流程Fig.3 Execution flow of S-PBFT algorithm
完成主節點選舉后,各節點需通過狀態同步,使視圖號、區塊高度、前區塊哈希值等數據達成一致。隨后,即可對新的數據區塊進行共識,即執行一致性協議。S-PBFT中引入了評分機制,通過對節點類型分類、改進主節點選舉方式,實現了對共識節點的多重篩選,最大程度上保證了共識節點的可靠性。改進的一致性協議執行流程如下:
當聯盟鏈中的交易量達到一定數量或是達到一定
通過實驗從共識時延、通信開銷和吞吐量三個方面對S-PBFT算法和PBFT算法進行測試、分析,比較兩種算法的性能。本實驗在實驗室內部局域網中搭建了聯盟鏈環境,通過docker容器設置若干個配置相同的虛擬節點作為系統節點,實驗具體配置信息如表1所示。

表1 實驗配置信息Table 1 Experiment configuration information
區塊鏈系統中,共識時延是指由節點提交交易請求到系統完成共識所需要的時間,是評價共識算法性能的一個重要參數,降低共識時延能夠提高系統運行效率和實用性。本實驗將系統節點總數作為實驗變量,節點數由10遞增至40,步長為6,在不同節點數下分別進行多次交易,取不同狀態下的平均值作為該狀態共識時延的最終值,實驗結果如圖4所示。

圖4 共識時延對比結果Fig.4 Results of consensus delay comparison
由實驗結果可知,不同節點數下,S-PBFT算法由于簡化了一致性協議中的確認節點,在共識時延上的表現要優于PBFT算法,且隨著節點數的增加,S-PBFT算法的共識時延增長率更小,穩定性更好。
S-PBFT算法的主要思想是通過簡化PBFT算法中的一致性協議來降低算法復雜度,提高算法效率。因此設計了算法通信開銷對比實驗,來比較分析兩種算法在通信開銷方面的性能。本文將通信開銷設定為系統完成一次一致性協議節點間需進行的平均通信次數。假設系統視圖變更概率為p。
(1)PBFT算法通信開銷
根據1.2節中對PBFT算法的分析,一致性協議中節點間的通信次數為6f(3f+1,f)為系統能夠容忍的拜占庭節點的最大個數。
試圖轉換階段中,從節點需要通過兩兩交互來傳遞視圖轉換信息,此時通信次數為9f2。完成視圖變更后,主節點需要向從節點發送視圖確認消息,此時通信次數為3f。結合視圖變更概率p,得PBFT算法的平均總通信次數為:

(2)S-PBFT算法通信開銷
一致性協議中,S-PBFT算法僅進行3階段的交互。在S-預準備階段和S-確認階段通信次數均為3f,在S-交互階段主節點之外的共識節點需要向其他共識節點廣播區塊信息,通信次數為4f2,因此一致性協議階段總通信次數為4f2+6f。
主節點選舉階段,首先共識節點需要將選舉憑證廣播至自身以外的共識節點,通信次數為2f(2f+1)。各共識節點選出待定主節點后,將選舉結果廣播至各共識節點進行確認,此過程中同樣進行了2f(2f+1)次交互。最后,新的主節點向所有共識節點發送確認信息,通信次數為2f。
因此,S-PBFT算法的平均總通信次數為:

由此可得,S-PBFT算法與PBFT算法的通信次數的比值Q為:

通過MATLAB得出此公式的可視化圖形,如圖5所示。其中p的取值為0到1,步長為0.1,f的取值為3到23,步長為2。

圖5 S-PBFT算法與PBFT算法通信次數比值三維曲面圖Fig.5 Three dimensional surface graph of algorithm communication times ratio
由圖5可知,在給定范圍內,無論p和f的取值如何變化,Q值始終小于1,即S-PBFT算法的通信次數始終小于PBFT算法的通信次數。隨著節點數的增加Q值逐漸減小,說明在多節點環境下,S-PBFT算法的通信開銷表現仍優于PBFT算法。另外,S-PBFT算法引入了評分機制,對節點進行多次篩選,能夠降低了視圖轉換發生的概率,因此在實際過程中,S-PBFT算法在通信開銷上會有更好的表現。
吞吐量指單位時間內系統能夠處理的事件量,本實驗將每秒事件處理數(TPS)作為表示系統吞吐量,系統TPS可由以下公式表示:

其中,TradeΔt為出塊間隔內系統處理的事件數,Δt為出塊間隔。
實驗將節點總數作為變量,節點數由10遞增至70,步長為6,在不同節點數下進行20次重復實驗,每次實驗的事件量設置為1 000,最終取實驗結果的平均值作為不同節點數下吞吐量的值,實驗結果如圖6所示。

圖6 S-PBFT算法與PBFT算法吞吐量對比Fig.6 Throughput comparison between S-PBFT algorithm and PBFT algorithm
由實驗結果可知,節點數較小時,隨著節點數的增加,兩種算法的吞吐量均呈上升趨勢。隨后PBFT算法與S-PBFT算法的吞吐量先后達到峰值,其中S-PBFT算法吞吐量的峰值更大、到達峰值時的節點數更多,且在整個過程中,S-PBFT算法的吞吐量始終大于PBFT算法的吞吐量,因此S-PBFT算法具有更好的吞吐性能。
共識節點是S-PBFT算法共識過程的執行節點,共識節點的可靠性直接決定了系統共識的達成,因此S-PBFT算法中,共識節點的可靠性具有十分重要的意義。
由前文分析可知,S-PBFT算法以節點初始積分和節點實際積分為共識節點選取依據來選取共識節點。節點初始積分是節點綜合實力的體現,節點實際積分則是一段時間內節點在共識過程中表現的綜合評價,能夠在一定程度上反映節點執行共識的穩定性。因此,理論上,相較于隨機的節點選取方式,由以上方法得到的共識節點能夠具有更好的可靠性和穩定性。
下面通過對比實驗來對共識節點的可靠性進行測試。實驗以S-PBFT算法為基礎,設置A、B兩組對照組:A組的共識節點由節點積分規則選出,B組的共識節點在所有節點中隨機挑選。實驗通過比較相同節點數下,算法的共識成功率來分析。
實驗中,總節點數由10遞增至70,步長為6,在不同節點數下進行多次實驗,得到該節點數下算法的共識成功率。兩組實驗中節點的算力、帶寬等資源按相同原則隨機分配。實驗結果如圖7所示。

圖7 節點可靠性實驗結果Fig.7 Results of node reliability experiment
由實驗結果可知,隨著節點數的增加,實驗組A的共識成功率始終保持在98.5%左右,實驗組B的共識成功率隨著節點數的增加整體上呈下降趨勢。實驗組A中,共識節點根據節點積分和節點初始積分選出,始終能夠保證具有更高算力、更大帶寬、更穩定的節點作為共識節點。而實驗組B中共識節點間的性能差距較大且由于系統資源有限,隨著節點數的增加,節點分配到的資源越來越少,導致了共識成功率的下降。可見,通過對節點的動態調整,能夠提高共識節點的可靠性。
隨著區塊鏈的不斷發展,共識算法的改進研究越來越得到科研人員的重視,共識算法的優劣直接影響到區塊鏈的性能和安全性。本文在PBFT算法的基礎上,設計了一種改進的S-PBFT算法。S-PBFT算法將節點分為共識節點、候選節點和預備節點三類,通過評分機制最大程度保證共識節點的可靠性。此外,S-PBFT算法還優化了一致性協議及其執行過程,在保證算法功能性的同時降低了算法復雜度,提供了運行效率。但S-PBFT算法仍存在一些不足,在后續工作中將結合具體應用場景進一步細化節點評分機制,構建動態網絡結構,增強系統靈活性,提高系統實用性。