李雪飛 嚴 悍 周亞茹 牛天勝
(南京理工大學計算機科學與工程學院 南京 210094)
隨著Fabric的不斷發展,應用形式也更加多元化[1],但區塊鏈的性能短板也不容忽視。區塊鏈的性能在一定程度上限制了其發展與應用,若要將基于Fabric區塊鏈的應用進一步推廣,務必要掌握其性能特性。raft共識協議是Fabric網絡中容錯性最強的共識協議之一[2~3]。因此對于使用raft共識協議的Fabric區塊鏈的性能探究具有非常重要的現實意義。
王旭等通過建立區塊鏈性能的數學模型,研究區塊大小、區塊生成速率以及網絡傳輸速率等因素與區塊鏈性能和安全性之間的定量關系[4]。Noah Weston等對移動網絡仿真中的以太坊區塊鏈進行了實驗,探索了移動網絡環境中區塊鏈技術的性能[5]。Mohamed El Ghazouani等提出了一種MultiAgent系統,以操縱重復數據刪除技術,該技術可以減少數據量,從而減少存儲開銷[6]。但現有的研究成果缺少針對分布式Fabric raft網絡性能影響因素的研究,其性能也表現得比較復雜。因此本文針對Hyperledger Fabric網絡架構,使用四臺主機構建分布式區塊鏈,采用raft共識協議,構建雙機構,四個peer節點,三個orderer節點,以每秒交易數、平均響應時間、區塊生成速率為性能指標進行測試,研究單用戶操作單信道的Fabric raft網絡性能。通過改變區塊大小、背書策略、代理orderer節點對區塊鏈的性能進行檢測與分析,探究不同性能影響因素對性能的影響并深入分析。
本文采用分布式Fabric raft區塊鏈[7~8]。在raft集群中有leader、follower、candidate三種角色。最初所有節點都是follower,當超時后開始選舉,所有節點變成candidate。在經過投票后,獲得大多數選票的candidate成為leader[9~10]。如 果leader故 障或在一定時間內沒有對follower節點發送心跳,將重新選舉產生leader。因此,raft的leader節點并不是固定的,而是動態的。
共使用四臺主機,在主機上的節點部署情況如表1。在主機A上運行測試程序。

表1 網絡節點分布
Fabric區塊鏈性能表現非常復雜[11~12]。比如執行1次交易的響應時間在2.1s~2.8s內,并發執行99次交易的響應時間也大致相同。但并發執行100次也許只需1.4s~1.37s。
本文中采用一種類似負載測試的方法,針對一個方法或函數,一次性加載500個并發調用,然后記錄每個調用的完成時間作為響應時間,以最后完成時間作為500個調用完成時間,以此來計算平均響應時間、每秒交易數、區塊生成速率等各項性能指標。一次負載測試可分三個階段。
1)加載、吞入階段。從開始到最后一個調用完成加載,并記錄開始時間與各調用的開始時間;
2)承載、消化階段。從加載完成到第1個調用完成,此階段網絡承載并發工作量;
3)減載、吐出階段。從第1個調用完成到最后1個調用完成,此階段負載逐步減少,記錄各調用完成時間。
本文中采用的測試性能指標主要為每秒交易數[13]、平均響應時間、區塊生成速率。
每秒交易數TPS(Transaction Per Second):每秒完成的交易數量。用完成的交易數量除以所需時間求得。記t0為開始提交交易的時刻(s),t1為所有交易均完成的時刻(s),n為完成的總交易數量(個)。

平均響應時間ART(Average Response Time):如下式所示,記RTi為第i個交易的響應時間(s),n為完成的交易總數量(個)。

區塊生成速率BLKPS(Block Per Second):每秒產生的區塊個數。記t0為開始提交交易的時刻(s),t1為所有交易均完成的時刻(s),b為在一次測試中產生的區塊個數(個)。

Fabric網絡是一個分布式多節點密切協作的復雜系統[14~15],影響交易性能的因素非常多。在本文中選取區塊大小、背書策略、代理orderer節點作為性能影響因素進行分析。
3.2.1 區塊大小
區塊大小指每個區塊中能夠包含的最大交易數目。當至少滿足以下三個條件之一時,便會產生一個區塊。
1)該區塊中從首個交易到達開始,等待時間超過2s;
2)該區塊中已接收的交易個數達到區塊大小
3)該區塊中字節大小達到512KB。
實驗結果預測假設:
針對不同大小的區塊,在相同并發數量的情況下,生成的區塊數目不同。以并發數為100為例。當區塊大小為10時,將生成10個區塊;區塊大小為50時,將產生兩個區塊。因此預測,隨著區塊大小的增大,每秒交易數增大,平均響應時間降低,區塊生成速率降低,并且都將趨于穩定。
3.2.2 背書策略
節點通過背書策略來確定一個交易是否被正確背書。本文網絡中含有兩個機構,org1與org2。對于雙機構網絡,背書策略可選取單背書OR,雙背書AND。
1)單背書OR:org1或org2中任何一個peer節點背書成功即可。
2)雙背書AND:org1與org2機構中均至少一個peer節點背書成功。
實驗結果預測假設:
背書策略為AND時與背書策略是OR時相比較,安全性更強,但需要的背書節點也更多。因此預測,每秒交易數降低,平均響應時間增大,區塊生成速率降低。
3.2.3 代理orderer節點
代理orderer節點是raft網絡中的接受請求節點,raft網絡的leader節點是處理請求的節點,如果兩者不是同一節點,代理orderer節點需要將請求轉發至raft的leader節點進行處理,如果二者是同一節點,則無需轉發,可直接處理。
實驗結果預測假設:
代理orderer節點是raft網絡中的follower節點時與是leader節點時相比較,需要一個交易轉發的過程。因此預測,每秒交易數降低,平均響應時間增大,區塊生成速率降低。
首先進行基準性能實驗,計算每秒交易數、平均響應時間、區塊生成速率。相關參數配置如表2。設置并發數為500,進行3次測試取平均值作為結果。最終得到的基準性能測試數據為每秒交易數為118.24,平均響應時間2.68s,區塊生成速率為2.36塊每秒。

表2 基準性能實驗參數
后續實驗相較于基準性能測試,將每次改動一種參數,得到新的實驗結果并進行比較分析。
對比基準測試,只更改區塊大小。分別測試區塊大小為5、20、50(基準測試)、100、150、200、250、300、350、400、450、500時的性能,得到的測試結果如下圖所示。
區塊生成速率隨區塊大小的變化曲線如圖1,平均響應時間和每秒交易數隨區塊大小的變化曲線如圖2。根據圖中的曲線變化,隨著區塊大小的增加,區塊生成速率逐步下降,當區塊大小達到200后,趨于穩定,并在0.85塊每秒上下波動。平均響應時間也逐步下降,并在區塊數量達到50后趨于穩定,在2.5s左右波動。隨著區塊大小的增加,每秒交易數逐步增大,在區塊大小達到200后,在135個每秒左右波動。在跟蹤區塊數據后發現,當區塊大小大于等于200后,500次交易均產生3個區塊,分別含有183、183、134個交易,這是由于當等待時間超過2s或未封裝的交易總大小達到區塊能容納的數據大小(512KB)時,也會產生區塊。由于測試數據大小較小,總大小不可能超出512KB,因此,網絡中從區塊中首個交易到達開始,等待時間(2s)內最多接收的交易為183個,當區塊大小超過183個交易時,增加區塊大小對于提升Fabric網絡性能已無意義。綜上,提出超時前最大交易次數這一性質,并定義如下。

圖1 BLKPS隨著區塊大小的變化

圖2 TPS與ART隨著區塊大小的變化
超時前最大交易次數MaxTBT(Maximum transactions before TImeout):在區塊中字節數不超過區塊最大字節數的前提下,未超時的時間內能完成的最大交易數目。
實驗中當區塊大小達到200后網絡雖有波動,但整體性能趨于穩定。符合3.2.1小節提出的假設,但當區塊大小為150時,出現假設之外的情況。圖2中可觀察到當區塊大小設置為150時,數據波動較大。在查看具體區塊后發現,實驗中的500個并發交易共產生四個區塊,每個區塊內的交易數量分別為150、150、150、50個。最后一個區塊只有50個交易,同時區塊內數據量不會超過512KB,此時只有等待時間超過2s時,才會產生區塊,即等待時間需達到2s,所以當區塊大小設置為150時,產生較大波動。觀察表3,可看出生成的4個區塊中,前三個區塊交易的平均響應時間增長率穩定在17%上下,但第四個區塊相比于第三個區塊的增長率為27.71%,增長率提高了63%,與推論一致。

表3 區塊大小為150時所生成區塊的ART
當區塊大小達到未超時最大交易次數時,再增大區塊大小也不會增加區塊內的實際交易數量,性能趨于穩定。但當區塊大小小于未超時最大交易次數時,隨著區塊大小的增加,每秒交易數增加,平均響應時間減少,區塊生成速率降低,同時也會受到負載并發數的影響。若并發負載數不是區塊大小的整數倍,最后一個區塊內的實際交易數量將小于設置的區塊大小,因此需要等待時間達到2s,才能產生區塊。
對比基準測試,只更改背書策略為AND。比較背書策略為OR時(基準測試)與背書策略為AND時網絡性能的不同,得到結果如表4。

表4 應用不同背書策略時的性能
從表4中數據可以得出,背書策略為AND時與背書策略為OR時比較,平均響應時間延長了20%,區塊生成速率降低約10%,每秒交易數降低約10%。
由實驗結果可知,當背書策略為OR時性能總體優于背書策略為AND的性能,這也是背書策略為AND高安全性的代價。實驗結果符合3.2.2小節中提出的假設。
對比基準測試,將代理orderer節點更改為raft網絡中的leader節點。比較代理orderer節點是raft網絡中的follower節點時(基準測試)與代理orderer節點是raft網絡中的leader節點時網絡性能的不同,得到結果如表5所示。

表5 應用不同代理orderer節點時的性能
從表5中可以得出,代理orderer節點是raft網絡中的follower節點時與代理節點是raft網絡中的leader節點時比較,平均響應時間延長了約16%,區塊生成速率與每秒交易數均降低了約7%。
由實驗結果可知,當代理orderer節點是raft網絡的leader節點時,性能優于代理orderer節點是raft網絡的follower節點時的網絡性能。但raft的leader節點是動態的,根據選舉選出,所以很難實時跟蹤leader節點。實驗結果符合3.2.3小節中提出的假設。
本文對Fabric的raft網絡進行性能測試,主要以性能指標中的每秒交易數、區塊生成速率和平均響應時間作為主要測試指標,分析基本性能。然后針對區塊大小、背書策略、代理orderer節點三種性能因素設計實驗,測試對比并進行了原因分析。對于測試過程中出現的異常現象也給出了合理的分析解釋。
本研究結果發現,當區塊內的最大交易數量已經超過未超時最大交易數時,區塊鏈性能將趨于穩定。當小于區塊分割等待時間所能完成的最大交易數量時,網絡性能受到區塊大小與并發負載量的影響,區塊大小越大,并發負載量是區塊大小的整數倍時網絡性能越好。背書策略為AND時與背書策略為OR時比較,平均響應時間延長20%,區塊生成速率縮短到原有的90%,每秒交易數降低約10%。當代理orderer節點為變量實驗時代理orderer節點是raft網絡中的follower節點時時,平均響應時間延長了約16%,區塊生成速率與每秒交易數均降低約7%。
本研究對于單用戶單信道的Fabric raft網絡性能的深入探究,有助于進一步開發高性能的區塊鏈網絡。在后續區塊鏈實際應用的開發以及推廣中,其性能問題必然是有待進一步解決的重點難點。希望本文中對于分布式區塊鏈的性能影響因素研究可以為后續的優化提供一定的理論指導和參考。