隨著電商經濟的快速發展,社會對物流行業的依賴大幅增加。為了適應追求快速高效的新消費時代需求,許多物流貨運公司紛紛引進更科學高效的區塊鏈技術,來提升物流管理的效率[1]。其中共識算法作為區塊鏈技術的最重要的部分之一,許多研究者都通過優化共識算法的方法,來提高區塊鏈物流管理系統的性能[2]。例如陳佶將傳統PBFT共識算法與DPOS算法相結合,提出一種基于DDPBFT算法的區塊鏈模型,改進算法保留了傳統PBFT的后半部分,在前半部分則采取DPSO算法來選舉主節點,并通過排序算法排序,以改進網絡的初始化過程與減少節點的視圖切換,進而促進區塊鏈系統的整體性能提升[3];葉進等針對分布式能源交易中共識效率低、資源開銷大和交易時效率高等問題,則提出一種面向分布式電能交易的智簡拜占庭容錯算法,通過引入門限簽名機制,將復雜的通信簡單化,進而縮短共識時延[4]。以上研究雖然一定程度上提高了區塊鏈物流管理系統的性能,但由于拜占庭算法在共識過程中需要逐個驗證的特點,驗證耗時仍然較長,且其中一個節點出現錯誤就可以影響整個系統的共識,不安全性較高。在以上研究基礎上,引入并行驗證策略對傳統拜占庭共識進行改進,并結合IBFT共識算法,提出一種基于并行驗證的改進IBFT共識算法,在保障安全性與容錯率的前提下,優化共識過程的交易驗證速度,進而提升系統效率。
伊斯坦布爾拜占庭容錯(Istanbul Byzantine Fault Tolerant, IBFT)算法是啟發于實用拜占庭容錯(Practical Byzantine Fault Tolerance, PBFT)算法的一種修改共識算法[5]。相較于PBFT共識算法,IBFT具有更嚴格的驗證機制與更先進的加密算法,安全性更高,且可以在更短的時間內達成共識,大幅提高了交易的確認速度[6]。然而與傳統拜占庭共識算法相同,IBFT的驗證過程同樣是按照時間順序進行,每個驗證結束后下個驗證才會開始,這大大增加了系統的驗證時間。為了提高系統的吞吐量與執行效率,在IBFT中引入并行驗證策略,對其進行改進。
在區塊鏈的共識過程中,當一個提議者被選中時,需要向其他驗證者發送一個塊提議,再由其他節點對收到的塊提議進行驗證,以確保其符合既定的規則與約束[7]。常規的拜占庭共識通常只能按照順序一個一個對任務進行驗證,并行驗證策略則引入多線程的技術,通過在驗證時添加線程,由每個線程負責執行不同的指令塊,使節點可以同時驗證多個任務[8]。
基于并行驗證策略的共識過程整體可以分為四個階段:塊提議、并行驗證、塊承諾和塊提交[9]。由負責提出新塊的節點,即提議者首先生成新塊,并將塊發送給其他節點;其他節點在收到來自提議者的新塊時,通過多線程技術對其進行并行驗證。當塊驗證通過且達成共識后,其他節點將承諾該區塊成為區塊鏈的新區塊,并由提議者在區塊鏈中添加新區塊[10]。系統共識過程中,節點并行驗證策略如圖1所示:

研究采用任務分解與同步線程實現高效的并行驗證策略。其中任務分解是指將驗證任務分解為三個獨立的子任務,并通過單獨的線程對每個子任務進行處理。通過任務分解,確保了每個子任務都能被并行執行,從而最大程度地提高了驗證速度[11]。同步線程則是指在節點的信息驗證通過進入共識的下一階段,采用同步線程策略,通過條件變量來確保線程之間的安全通信與數據一致性,從而提高算法的性能。
基于線程池并發結構實現并發驗證邏輯。首先創建一個線程池,由線程池中的線程對任務進行管理。在節點收到塊提議后,將驗證任務分配給線程池里的線程,線程池的規模由系統資源和性能需求決定,每個線程需要獨立處理不同的驗證任務,任務包括查驗提議者身份、檢查新區塊的序列號和輪次等等[12]。
按照表1中的方法對數據結構和類型進行定義,以便系統在驗證過程中對各個實體訪問和操作[13]:
數據結構 |
儲存管理信息 |
Validator |
存儲驗證器的信息,包括節點的公鑰、私鑰、IP和地址 |
BlockProposal |
儲存塊提議的信息,包括提議者、區塊頭、序列號和輪次 |
ConsensusState |
儲存驗證器在共識過程中的狀態信息,包括PRE-PREPARE(準備)、PREPARED(確認)和COMMITTED(提交) |
Message |
儲存驗證器之間傳遞信息,包括發送者、消息類型、數據和接收者 |
按照表2中的方法實現共識過程中的消息處理與啟動定時器:
消息處理方法 |
任務 |
handle Message() |
負責處理接收到的消息。在節點收到提議時啟動定時器,并根據接收的消息類型選擇對應的驗證方法 |
generate Response Message() |
在節點完成驗證后,根據驗證結果生成響應消息,包括消息名稱、序列號、當前輪次、請求內容 |
handle Round Change() |
在節點輪超時的情形下,廣播帶有currentRound+1的ROUNDCHANGE消息 |
按照表3中的驗證方法,實現各種驗證任務的執行:
驗證方法 |
任務 |
verify Proposer() |
驗證提議者是否屬于驗證器集,以確定塊提議來源的有效性 |
verify Sequence and Round() |
驗證塊提議的輪次與序列號是否與驗證器的狀態匹配 |
verify Block Header() |
驗證區塊頭的簽名、散列及其他屬性,例如提議者和驗證區的簽名、固定數字的有效差異值和表示IBFT區塊的數字的有效散列 |
基于并行驗證的IBFT共識算法構建物流管理模型。在這個物流管理模型中,區塊鏈節點主要由生產商、原材料供應商、消費者和其他市場參與者構成[14]。具體流程如圖2所示:
其中驗證節點的選舉和調整通過既定規則和投票機制實現[13]。直到網絡中超過2/3的驗證節點達成共識,該區塊將被視為通過驗證,并添加至區塊鏈中。在公式過程中,由于IBFT公式算法強制將2/3的驗證節點通過請求作為達成共識的前提條件,避免了其中某個惡意節點對共識結果造成影響,從而為整個系統的安全運行提供保障。
隨著交易市場的擴大和參與者的增多,基于并行驗證的改進IBFT算法還可以根據實際需求調節驗證節點的數量,為算法提供良好的可擴展性[14]。并且共識的設計也使得物流管理模型在升級和更新時更為便利。算法可以通過調整共識參數、優化共識過程或引入新的驗證節點選舉規則,不斷提升自己,以適應不斷變化的物流交易市場。

本次實驗基于Quorum區塊鏈平臺搭建,使用Hyperledger Caliper區塊鏈評估框架作為基準測試工具,Docker為部署工具,并在Ubuntu18.01操作系統上運行。系統配置i5-9600K中央處理器,服務器內存為20 GB,硬盤儲存為100 GB。
Hyperledger Caliper區塊鏈評估框架通過使用一些預定義用途來衡量區塊鏈網絡的性能,它針對待檢測的系統生成工具負載并實時監控其響應,然后結合事務吞吐量、事務延遲等評估網絡性能的重要指標,生成該網絡的性能評估報告。仿真選擇8個節點的大小的驗證器集,在無惡意節點的前提下,對不同提交、事務量與不同大小事務的提交下的并行驗證的IBFT共識算法測試。為了進一步了解算法優越性,將所提算法的測試結果與Raft經典共識算法和未改進的IBFT算法的結果進行比較[15]。
測試系統使用基于P2P網絡的去中心化結構,節點之間允許并通過異步消息傳遞的方式進行通信。通信包括PRE-PREPARE、PREPARE、COMMIT、ROUNDCHANGE四種消息類型,其中PRE-PREPARE代表提議者將塊提議廣播給所有驗證者;PREPARE代表驗證者在驗證塊提議后,將消息轉發給其他驗證者,表明自己已進入“確認共識”狀態;COMMIT代表驗證者在收到足夠數目的來自其他驗證者的“確認共識”消息后,將此消息轉發給其他驗證者,表明自身已進入“提交共識”狀態。ROUNDCHANGE代表驗證者在超時后,將此消息發送給其他驗證者,表示進入下一輪。
采用區塊鏈系統關鍵指標事務吞吐量(Transactions Per Second, TPS)與事務延遲(Latency, L)作為所提改進共識算法的衡量指標。其中事務吞吐量是指以時間單位合并的事務總量,在區塊鏈系統中定義為區塊鏈網絡每秒成功處理的事務數;事務延遲也叫共識時延,指事務合并所需要的時間,在區塊鏈系統中定義為事務提交之間的時間間隔,以及區塊鏈網絡中每個正確節點上結果可用的時間點。事務吞吐量與事務時延的計算公式如式(1)(2)所示:
式中,T表示完成的事務數量;ti和tj分別表示第一個事務進入系統的時間與最后一個事務被處理完成的時間。tu和ts分別代表共識過程開始和達成的時間。
基于Quorum平臺分別對基于所提IBFT算法的能源交易系統在標準化工作負載下與高并發情況下的性能表現進行綜合評價,并將評價結果分別與基于Raft共識協議與基于未改進IBFT共識協議的能源交易系統的評價結果進行比較。
設置發送事務大小為2 kB,對系統在交易發送率在600、1 200、1 800和2 400情況下,事務吞吐量的變化進行觀察。經多次測試,三種共識算法的不同交易發送率下的平均事務吞吐量如圖3所示:

如圖3所示,隨著交易發送率的增加,三種共識算法的平均事務吞吐量都呈現上升趨勢。三種算法中,表現最差的是原始IBFT共識算法,雖然吞吐量隨著交易發送率增加而增加,但在三種算法中始終最低,對事物的處理有限。而所提算法雖然一開始略低于Raft共識算法,當交易發送率超過1 600 Tx/s后,開始出現反超。綜合來看,所提算法相較于原始IBFT共識算法與Raft共識算法能夠更有效地處理大量事務,共識性能更加優越。
設置固定交易發送率為1 600 Tx/s, 對系統在發送事務大小分別為5 kB、12 kB和50 kB情況下,事務吞吐量的變化進行觀察。經多次測試,三種共識算法在不同發送事務大小下的平均事務吞吐量如圖4所示:

如圖4所示,隨著發送事務大小增加,三種共識算法的平均事務吞吐量都呈現下降趨勢,且都逐漸趨于同一水平。三種算法中,所提算法在發送較小事務時,較Raft共識算法平均事務吞吐量略高,遠遠好于未改進的IBFT算法,性能表現在三種算法中最佳。綜上,說明所提基于并行驗證的IBFT共識方法有效提高了原始IBFT算法的性能,在處理不同大小事務時都具有較好的性能表現,綜合性能最優。
設置發送事務大小為2 kB,對系統在交易發送率在600、1 200、1 800和2 400情況下,事務延遲的性能變化進行觀察。經多組測試,三種共識算法在不同交易發送率下平均事務延遲情況如圖5所示:

如圖5所示,相較于原始IBFT共識算法,所提算法在處理不同發送率下的事務,速度有了明顯提升,平均事務延遲耗時更短,處理效率更高。但是與Raft共識算法比較,所提改進算法的事務延遲時間仍然略高,這可能與Raft共識中的非完全去中心化機制有關,它使算法在事務延遲性能在一定程度上比拜占庭共識機制更具優勢。綜上,所提算法使系統在整體共識過程的速度上得到了優化,但相較于Raft算法仍有提升空間。
設置固定事務輸入率為1 600 Tx/s, 對系統在發送事務大小分別為5 kB、12 kB和50 kB情況下,事務延遲性能的變化進行觀察。經多次測試,三種共識算法在不同發送事務大小下的平均事務延時如圖6所示:

如圖6所示,隨著發送事務大小的增加,三種共識算法的事務延遲都呈現上升趨勢。當系統處理事務大小為50 kB時,所提算法在平均事務延遲上的速度最快,相較于未改進的IBFT共識算法與Raft共識算法時延性能更優越,表明所提算法在處理較大事務時完成效率更高。
綜上,提出一種基于并行驗證的改進IBFT共識算法,算法在傳統拜占庭基礎上引入共識策略,并結合IBFT算法,保障共識過程的快速性、安全性和高容錯率。測試結果表明,事務吞吐量指標上,在固定發送事務大小為2 kB的情況下,隨著交易發送率的增加,所提算法的事務吞吐量也在不斷提高,在交易發送率到達1 600Tx/s后時反超Raft共識算法,遠遠高于未改進IBFT共識算法;在固定交易發送率為1 600 Tx/s的情況下,隨著事務大小的增加共識算法的平均事務吞吐量都呈下降趨勢并逐漸趨同,而所提算法在發送較小事務時,略高于Raft共識算法,在三種比較共識算法中最佳。事務延遲指標上,所提算法相較于原始IBFT算法在處理不同發送率下的事務中,效率有了明顯提升,雖然略低于Raft共識算法,但是結果相近,說明算法具有較好的共識效率;隨著發送事務大小的增加,共識算法下的系統在處理事務上都有了更長的延遲時間。當處理事務大小為50 kB時,所提算法在事務上的平均處理速度最快。綜上,所提算法在處理較大事務上具有更快的事務吞吐量與完成效率,總體性能最佳,滿足基于區塊鏈的物流管理系統高性能要求。但是通過與Raft共識算法的比較可以發現,算法在事務處理效率上還有進一步的提升空間,并且并行驗證方法在更大規模與更復雜網絡中的性能表現尚未得到驗證。因此,下一步研究將針對以上問題,在維持拜占庭共識容錯能力的條件下,對所提算法進行更高效的優化,以滿足更多物流場景下的應用需求。