孫 棟,王 彪,徐 云*
(1.中國科學(xué)技術(shù)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,合肥 230027;2.安徽省高性能計算重點實驗室(中國科學(xué)技術(shù)大學(xué)),合肥 230027)
區(qū)塊鏈?zhǔn)且粋€分布式賬本,以區(qū)塊的形式維護已完成交易,并使用前一個區(qū)塊哈希來進行鏈接,記錄已完成交易的順序,系統(tǒng)中的節(jié)點通過共識機制保證分布式賬本的一致性。近年來,隨著區(qū)塊鏈數(shù)據(jù)量和業(yè)務(wù)請求率的增加,對區(qū)塊鏈系統(tǒng)可擴展性的要求越來越高。為此,區(qū)塊鏈的性能分析和共識機制得到了廣泛的研究,早期的基于Proof of Work共識機制的區(qū)塊鏈,如比特幣[1]、以太坊[2]等,需要大量的計算資源進行哈希計算,導(dǎo)致區(qū)塊鏈系統(tǒng)的交易吞吐量低、出塊間隔時間長。由于在共識機制研究[3-5]上的投入,區(qū)塊鏈系統(tǒng)的出塊間隔時間已經(jīng)從數(shù)分鐘減少到秒[6],甚至是毫秒級別。在出塊速度得到極大提升的情況下,區(qū)塊鏈網(wǎng)絡(luò)節(jié)點間區(qū)塊傳輸?shù)难舆t逐漸成為區(qū)塊鏈可擴展性提升的瓶頸。
在區(qū)塊鏈系統(tǒng)中,節(jié)點生成一個區(qū)塊之后,需要將其傳輸給網(wǎng)絡(luò)中的其他節(jié)點,從而讓這個區(qū)塊得到全網(wǎng)共識。根據(jù)Bonneau 等[7]的研究,在節(jié)點發(fā)現(xiàn)塊和所有其他節(jié)點接收塊之間的任何延遲都會增加臨時分叉的可能性,當(dāng)分叉過多或分叉無法解決時,區(qū)塊鏈系統(tǒng)就會變得不穩(wěn)定,所以降低區(qū)塊傳輸延遲是提高區(qū)塊鏈系統(tǒng)可擴展性的重要一環(huán)。盡管近年來研究者為降低區(qū)塊傳輸延遲付出了大量的努力,但是傳統(tǒng)的區(qū)塊傳輸方案是基于TCP(Transmission Control Protocol)技術(shù)來設(shè)計的,而TCP 協(xié)議棧在接收、發(fā)送報文時,內(nèi)核需要做多次上下文切換,還需要至少三次的數(shù)據(jù)拷貝并依賴CPU 進行協(xié)議封裝,使得基于TCP 的區(qū)塊傳輸機制在降低延遲上難以取得較好的效果。
與此同時,新興的先進硬件技術(shù)遠(yuǎn)程直接內(nèi)存訪問(Remote Direct Memory Access,RDMA)[8]為數(shù)據(jù)密集型應(yīng)用的高性能數(shù)據(jù)傳輸提供了新的機會。RDMA 是一種新的直接內(nèi)存訪問技術(shù),讓應(yīng)用程序可以直接存取遠(yuǎn)程計算機的內(nèi)存,無需對方處理器參與,通過零拷貝和內(nèi)核繞過技術(shù)實現(xiàn)了高帶寬和低延遲。隨著InfiniBand 等新硬件的成本下降以及RoCE(RDMA over Converged Ethernet)技術(shù)的成熟,基于RDMA 構(gòu)建的高性能系統(tǒng)逐漸顯現(xiàn)出優(yōu)勢,如FaRM(Fast Remote Memory)[9]、DrTM[10],同時,基于RDMA 的區(qū)塊鏈系統(tǒng)通信優(yōu)化研究已經(jīng)漸漸展開,如BAASH(Blockchain-As-AService for HPC)[11]。
本文通過RDMA 為區(qū)塊鏈系統(tǒng)提供高性能通信,設(shè)計并實現(xiàn)了基于RDMA 的低延遲區(qū)塊傳輸機制。首先分析了其不同通信原語的特點,并結(jié)合區(qū)塊鏈的區(qū)塊傳輸場景,選擇了適合的通信原語;然后基于選擇的通信原語的特性,設(shè)計了用于區(qū)塊信息共享的區(qū)塊目錄結(jié)構(gòu);結(jié)合單邊原語和區(qū)塊目錄結(jié)構(gòu),設(shè)計并實現(xiàn)了基本的區(qū)塊傳輸過程;最后分別在真實環(huán)境和模擬環(huán)境中對傳輸機制的性能進行了分析,結(jié)果表明本文方案能夠有效地降低現(xiàn)有區(qū)塊傳輸機制的延遲,提高現(xiàn)有區(qū)塊鏈系統(tǒng)的可擴展性。
在區(qū)塊鏈網(wǎng)絡(luò)中,每當(dāng)節(jié)點產(chǎn)生了一個新區(qū)塊或接收到一個由其他節(jié)點產(chǎn)生的新區(qū)塊,首先需要對這個區(qū)塊進行驗證,再將區(qū)塊傳輸給它的鄰居節(jié)點,通過共識機制完成區(qū)塊鏈賬本的一致性維護,整個過程中存在大量的數(shù)據(jù)通信,其中就包含區(qū)塊傳輸?,F(xiàn)有的區(qū)塊鏈系統(tǒng)的通信機制根據(jù)其依賴的底層通信技術(shù)不同可以分為基于TCP 的通信機制和基于RDMA 的通信機制兩類。傳統(tǒng)的基于TCP 的通信機制發(fā)展時間較長,得到了廣泛研究,經(jīng)過大量的優(yōu)化性能已經(jīng)得到了較大提升。近年來,隨著在高性能計算機上RDMA 技術(shù)的應(yīng)用與研究的展開,利用RDMA 技術(shù)構(gòu)建高性能區(qū)塊鏈系統(tǒng)的研究也逐漸興起。
Bi 等[12]提出了一種通過選擇最近的鄰居作為對等體來加速塊傳播的方案,其中最近的鄰居由傳輸延遲決定,使得總體的區(qū)塊廣播延遲得到降低;Ayinala 等[13]為區(qū)塊鏈網(wǎng)絡(luò)提出了一種名為PiChu 的區(qū)塊傳輸方案,該方案通過驗證區(qū)塊報頭的一致性,并在P2P(Peer-to-Peer)網(wǎng)絡(luò)上通過小塊增量轉(zhuǎn)發(fā)塊體,來加速塊的傳播;Zhao 等[14]提出了用交易哈希來替換整個交易的輕量區(qū)塊結(jié)構(gòu)用于區(qū)塊傳輸,并且通過對交易丟失進行預(yù)測,降低用于傳輸交易信息的額外通信次數(shù),從而到達降低網(wǎng)絡(luò)傳輸數(shù)據(jù)量的目的。上述的研究為降低區(qū)塊鏈系統(tǒng)的通信數(shù)據(jù)量、通信延遲做出了一定的貢獻,但仍是基于TCP 方案來設(shè)計實現(xiàn)的,受到底層網(wǎng)絡(luò)協(xié)議棧的限制,所以對于通信延遲的優(yōu)化相對有限。
Huang 等[6]為EOS(Enterprise Operation System)區(qū)塊鏈設(shè)計了基于RDMA 原語的底層通信過程,用雙邊原語來實現(xiàn)原有系統(tǒng)的各類消息,并通過預(yù)注冊內(nèi)存池等方案實現(xiàn)了低延遲、低CPU 占用的EOS 節(jié)點啟動過程,使啟動過程區(qū)塊同步用時降低20%。Rüsch 等[15]提出了用于BFT(Byzantine Fault Tolerance)協(xié)議的基于RDMA 的通信框架,該框架模擬了多路復(fù)用技術(shù),使一個線程可以處理多個連接,使得BFT 協(xié)議的通信延遲能夠極大降低。Wang 等[16]實現(xiàn)了基于RDMA 的Paxos 協(xié)議,利用單邊原語使得共識協(xié)議的延遲最多為傳統(tǒng)共識協(xié)議的1/32。以上研究充分說明了RDMA 技術(shù)在區(qū)塊鏈系統(tǒng)的通信優(yōu)化上存在的優(yōu)勢,也為進一步的研究提供了良好的基礎(chǔ)。
傳統(tǒng)的基于TCP 的區(qū)塊傳輸方案對區(qū)塊傳輸?shù)难舆t的優(yōu)化上限較低,且現(xiàn)有優(yōu)化方案不具有普適性,在某些情況下甚至?xí)档屯ㄐ判阅??;赗DMA 技術(shù)的區(qū)塊鏈系統(tǒng)優(yōu)化研究目前還處于起步階段,雖然在降低區(qū)塊鏈系統(tǒng)中的區(qū)塊傳輸延遲的研究上已經(jīng)取得了一定的成果,但是現(xiàn)有研究缺乏對區(qū)塊傳輸過程與RDMA 原語的針對性分析與設(shè)計,未能充分發(fā)揮RDMA 原語的在區(qū)塊傳輸上的優(yōu)勢。本文分析了區(qū)塊傳輸過程的特點,并依據(jù)其特點選擇了合適的通信原語,充分利用單邊原語的特點來進行數(shù)據(jù)傳輸機制的設(shè)計,能夠穩(wěn)定地提升現(xiàn)有區(qū)塊鏈系統(tǒng)的性能。
本文方法的總體框架如圖1 所示,傳統(tǒng)的區(qū)塊鏈框架分為區(qū)塊鏈管理層和傳輸層兩個部分,由于現(xiàn)有的區(qū)塊鏈傳輸層的TCP 技術(shù)限制了區(qū)塊傳輸?shù)男阅?,本文設(shè)計了基于RDMA 技術(shù)的傳輸層來進行替換。每當(dāng)區(qū)塊鏈系統(tǒng)中產(chǎn)生了一個新的區(qū)塊,就通過傳輸層的內(nèi)存管理將區(qū)塊存儲到注冊內(nèi)存中,并將此內(nèi)存的信息通過RDMA 原語發(fā)送給其他鄰居節(jié)點;鄰居節(jié)點得到區(qū)塊的信息,若需要此區(qū)塊則可以再次通過RDMA 原語從相應(yīng)的注冊內(nèi)存中遠(yuǎn)程讀取此區(qū)塊,從而完成區(qū)塊的傳輸。
圖1 本文方法的總體框架Fig.1 Overall framework of the proposed method
如圖2(a)所示,基于TCP 的區(qū)塊傳輸方案中,當(dāng)節(jié)點A收到一個新的區(qū)塊,將此區(qū)塊傳輸給節(jié)點B 的基本傳輸過程由三次通信組成:A 得到新的區(qū)塊,發(fā)送一個包含區(qū)塊的id、hash 的消息給所有鄰接點;B 收到消息之后根據(jù)id、hash 判斷是否需要這個區(qū)塊,若需要則向A 發(fā)送消息獲取區(qū)塊;A 收到消息之后,再將消息中指定的區(qū)塊發(fā)送給B。如圖2(b)所示,基于RDMA 的區(qū)塊傳輸方案相較于傳統(tǒng)的基于TCP 的區(qū)塊傳輸方案,將區(qū)塊傳輸過程中的三次TCP 通信優(yōu)化為通過兩次RDMA 原語通信即可完成,同時RDMA 原語的單次通信延遲也低于TCP 消息的延遲。所以從理論上分析,基于RDMA 的區(qū)塊傳輸方案能夠大幅降低區(qū)塊鏈系統(tǒng)中區(qū)塊傳輸?shù)难舆t。
圖2 兩種區(qū)塊傳輸方案的基本過程Fig.2 Basic processes of two block transmission schemes
RDMA 網(wǎng)絡(luò)傳輸主要有兩類通信原語:send/receive 雙邊原語和read/write 單邊原語,兩種原語在通信模式、效率及使用場景上存在一定的差別。兩類原語所需要的內(nèi)存管理方式存在一定差異,其中,send/receive 雙邊原語采用內(nèi)存復(fù)制方式,read/write 單邊原語采用內(nèi)存注冊方式。同時兩種內(nèi)存機制在時間開銷上存在一定的差異,采用內(nèi)存復(fù)制方式,在傳輸過程中數(shù)據(jù)復(fù)制時間開銷主要與復(fù)制的內(nèi)存空間大小相關(guān),而在采用內(nèi)存注冊方式時,調(diào)用內(nèi)存注冊接口同樣會帶來一定的時間開銷,此時間開銷主要與內(nèi)存注冊接口在內(nèi)核態(tài)的效率相關(guān)。
為了對比不同數(shù)據(jù)量下兩者的性能,本文對不同數(shù)據(jù)量下兩種內(nèi)存操作的耗時進行了測試。通過測試分析,隨著操作內(nèi)存空間大小的增加,內(nèi)存復(fù)制操作的耗時增速遠(yuǎn)超內(nèi)存注冊操作的耗時。進一步說明了內(nèi)存注冊和read/write 原語相對于內(nèi)存復(fù)制和其對應(yīng)的send/receive 原語更適合于數(shù)據(jù)量更大的傳輸過程,同時在區(qū)塊鏈系統(tǒng)中,區(qū)塊普遍為100 KB~ 1 MB 大小,如比特幣中區(qū)塊平均大小為1 MB,所以read/write 方式更適合于區(qū)塊鏈系統(tǒng)中的區(qū)塊傳輸過程。
此外,這兩種通信原語的區(qū)別還在于read/write 原語是單邊操作,這意味著采用這種方式來進行通信時,當(dāng)A 節(jié)點將區(qū)塊信息通過write 原語寫到B 內(nèi)存中時,這個操作不需要B 節(jié)點參與,而read 原語完成后,A 節(jié)點的CPU 就不需要再參與之后的通信過程,之后B 節(jié)點可以直接繞過A 節(jié)點的CPU完成數(shù)據(jù)的讀取。這樣的特性是send/receive 原語所不具備的,而降低區(qū)塊傳輸過程中對CPU 的占用同樣能夠為區(qū)塊鏈系統(tǒng)帶來性能上的提升。
綜合以上兩個因素,在基于RDMA 進行區(qū)塊傳輸機制設(shè)計時,read/write 單邊原語相較于send/receive 雙邊原語具有更大的優(yōu)勢,所以接下來的區(qū)塊傳輸過程的設(shè)計將圍繞read/write 單邊原語的特性來展開。
在基于read/write 原語進行區(qū)塊傳輸機制的設(shè)計時,當(dāng)A節(jié)點新產(chǎn)生一個區(qū)塊,需要通過RDMA 網(wǎng)卡注冊一塊內(nèi)存用于存儲這個區(qū)塊,得到這塊內(nèi)存的地址、空間大小以及鑰匙,再將這些信息與區(qū)塊id、區(qū)塊hash 一起通過write 原語寫到B節(jié)點的內(nèi)存中。write 原語能夠成功執(zhí)行的前提是需要有一塊在B 節(jié)點上的注冊內(nèi)存,且A 節(jié)點需要知道此內(nèi)存的虛擬地址以及訪問鑰匙。所以每次需要向B 節(jié)點的內(nèi)存寫入信息時,必須先注冊內(nèi)存,B 節(jié)點再發(fā)送消息通知A 節(jié)點這塊內(nèi)存的地址等信息,然后A 節(jié)點通過write 原語寫入數(shù)據(jù),如前所述,內(nèi)存注冊同樣存在時間開銷,頻繁的內(nèi)存注冊會降低整個傳輸過程的效率。
為此,本文采用了預(yù)注冊內(nèi)存的方式,設(shè)計了可復(fù)用區(qū)塊目錄結(jié)構(gòu),用于讓鄰居節(jié)點寫入最新的區(qū)塊信息。在區(qū)塊鏈系統(tǒng)中,區(qū)塊在相鄰節(jié)點之間的傳輸所需要的時間是遠(yuǎn)小于區(qū)塊的產(chǎn)生時間間隔的,且一個區(qū)塊在產(chǎn)生的一段時間之后就不需要再存儲在內(nèi)存中,所以節(jié)點中用于write 原語寫入?yún)^(qū)塊信息的注冊內(nèi)存是可以復(fù)用的。若節(jié)點在開始通信之前預(yù)注冊N塊內(nèi)存,用于讓鄰居節(jié)點寫入新產(chǎn)生區(qū)塊的信息,并且將內(nèi)存的信息先發(fā)送給鄰居節(jié)點,同時記錄每一塊內(nèi)存的信息是否過期就可以重復(fù)利用這N塊內(nèi)存,同時也避免了在每一次通信前注冊內(nèi)存帶來的時間消耗,這N塊內(nèi)存即組成了用于在節(jié)點間共享區(qū)塊信息區(qū)塊目錄。預(yù)注冊的可復(fù)用區(qū)塊目錄一方面降低內(nèi)存注冊的時間代價,另一方面內(nèi)存的復(fù)用簡化了對注冊內(nèi)存的管理。
如上所述,每個節(jié)點需要為鄰居節(jié)點需要注冊N塊內(nèi)存mem1,mem2,…,memN,用于讓鄰居更新區(qū)塊的信息。每塊內(nèi)存中存儲的信息都有6 個字段,鄰居節(jié)點可以根據(jù)自己產(chǎn)生或接收新區(qū)塊的情況更新這N塊注冊內(nèi)存中存儲的信息,字段的內(nèi)容及意義如表1 所示。
表1 區(qū)塊目錄存儲的字段Tab.1 Fields stored in block catalogue
如圖3 所示,每個節(jié)點需要為所有的鄰居預(yù)注冊N塊注冊內(nèi)存,構(gòu)成用于共享區(qū)塊信息的區(qū)塊目錄,將N塊內(nèi)存的寫入權(quán)限開放給鄰居節(jié)點,鄰居節(jié)點可以通過write 原語遠(yuǎn)程更新區(qū)塊目錄,同時每個節(jié)點可以根據(jù)內(nèi)存中的區(qū)塊目錄存儲的信息查看需要哪些區(qū)塊,并通過read 原語遠(yuǎn)程讀取區(qū)塊數(shù)據(jù)。
圖3 區(qū)塊信息共享Fig.3 Block information sharing
在為鄰居節(jié)點預(yù)注冊N塊用于存儲區(qū)塊信息的內(nèi)存后,節(jié)點需要將這N塊內(nèi)存的地址等信息發(fā)送給鄰居節(jié)點,鄰居節(jié)點可以將數(shù)據(jù)遠(yuǎn)程寫入這N塊內(nèi)存。在之后的通信中,鄰居節(jié)點在產(chǎn)生新的區(qū)塊時,可以直接根據(jù)這N塊注冊內(nèi)存的注冊信息通過write 原語將新區(qū)塊的id、hash、addr、length、key信息寫入其中一塊注冊內(nèi)存,并標(biāo)記此區(qū)塊數(shù)據(jù)為已被更新的,更新區(qū)塊目錄的具體過程如圖4 所示。
圖4 基于單邊原語的區(qū)塊目錄更新過程Fig.4 Updating process of block catalogue based on one-side primitives
節(jié)點在得到其鄰居節(jié)點更新的區(qū)塊目錄信息后,便可以根據(jù)區(qū)塊目錄信息判定是否需要這些區(qū)塊,若需要區(qū)塊則可以根據(jù)區(qū)塊目錄中的信息通過read 原語到相應(yīng)的鄰居節(jié)點的內(nèi)存中讀取區(qū)塊,從而完成了一個區(qū)塊從產(chǎn)生到傳輸?shù)饺W(wǎng)所有節(jié)點的過程。區(qū)塊傳輸?shù)木唧w過程如圖5 所示。
圖5 基于單邊原語的區(qū)塊傳輸過程Fig.5 Block transmission process based on one-side primitives
本章將通過實驗分析兩種內(nèi)存操作的性能作為兩類RDMA 原語對比的依據(jù),并評估基于RDMA 的區(qū)塊傳輸機制對于現(xiàn)有區(qū)塊鏈系統(tǒng)的性能的影響,并與現(xiàn)有的區(qū)塊傳輸機制進行對比。為此,分別對兩種方案在真實環(huán)境中測試了點到點的區(qū)塊傳輸延遲,在模擬環(huán)境中測試了多到多區(qū)塊傳輸?shù)难舆t以及區(qū)塊鏈產(chǎn)生臨時分叉的個數(shù)。
為了針對區(qū)塊鏈系統(tǒng)的區(qū)塊傳輸過程選擇更適合的RDMA 數(shù)據(jù)傳輸方式,需要對send/receive 方式中的內(nèi)存復(fù)制操作和read/write 方式中的內(nèi)存注冊操作在不同數(shù)據(jù)量下的耗時進行測試,分析得到更適合于大數(shù)據(jù)量的數(shù)據(jù)傳輸方式。為此,本實驗分別測試了兩種操作在從1 KB 至1 MB 的內(nèi)存大小的情況下的平均耗時。
實驗結(jié)果如圖6 所示,從圖6 的測試結(jié)果可以看出,隨著操作內(nèi)存空間的大小的增加,內(nèi)存復(fù)制操作的耗時增加的幅度較大;相反,內(nèi)存注冊操作的耗時,只是隨著內(nèi)存空間大小的增大緩慢增加。該測試結(jié)果說明,與兩種內(nèi)存管理方式相應(yīng)的兩種通信原語中,send/receive 原語更適用于小塊數(shù)據(jù)的傳輸,而read/write 原語更適合大塊數(shù)據(jù)。
圖6 不同數(shù)據(jù)量時的復(fù)制與注冊操作耗時對比Fig.6 Comparison of time consumed by copy and register operations under different data sizes
真實環(huán)境中的實驗在兩臺配置有RDMA 網(wǎng)卡的服務(wù)器上進行,兩臺服務(wù)器配置相同,具體配置如表2 所示。
表2 實驗環(huán)境配置Tab.2 Experimental environment configuration
比特幣中的區(qū)塊傳輸機制是基于TCP 的區(qū)塊傳輸機制的經(jīng)典實現(xiàn),因此為了比較基于RDMA 的區(qū)塊傳輸機制與基于TCP 的區(qū)塊傳輸機制的性能,并分析所提出的區(qū)塊傳輸機制對現(xiàn)有區(qū)塊鏈系統(tǒng)的影響,實驗將對本文所提出區(qū)塊傳輸機制與比特幣系統(tǒng)中的區(qū)塊傳輸過程的性能進行對比。首先模擬了比特幣中的區(qū)塊結(jié)構(gòu),并生成隨機的區(qū)塊作為實驗過程傳輸?shù)膮^(qū)塊數(shù)據(jù),用于測試區(qū)塊傳輸機制的性能;再復(fù)現(xiàn)了比特幣系統(tǒng)中的區(qū)塊傳輸模塊,用于與基于RDMA 的區(qū)塊傳輸機制進行對比。兩種區(qū)塊傳輸機制將對相同的模擬區(qū)塊進行傳輸,從而得到兩者在性能上的差別。
兩臺服務(wù)器分別視為區(qū)塊鏈網(wǎng)絡(luò)中的A 節(jié)點和B 節(jié)點,在實驗中,A 節(jié)點將以一定的時間間隔產(chǎn)生新的區(qū)塊,在產(chǎn)生新的區(qū)塊后,分別通過基于RDMA 的區(qū)塊傳輸方案和基于TCP 的區(qū)塊傳輸方案(比特幣的區(qū)塊傳輸方案)將區(qū)塊傳輸給B 節(jié)點,A 節(jié)點在發(fā)送區(qū)塊之前記錄時間T1,B 節(jié)點完成區(qū)塊接收時記錄時間T2,從而得到節(jié)點間區(qū)塊傳輸?shù)难舆tT2-T1。在實驗中,將隨機生成1 000 個區(qū)塊,測試1 000 個區(qū)塊傳輸?shù)钠骄舆t,并且通過改變區(qū)塊大小,分別測試了0.1 MB、0.3 MB、0.5 MB、1 MB 大小的區(qū)塊的傳輸延遲。
如表3 所示,基于RDMA 的區(qū)塊傳輸方案相較于傳統(tǒng)的基于TCP 的方案,在兩節(jié)點間的區(qū)塊傳輸延遲得到了降低,在1 MB 大小的區(qū)塊上能夠使得節(jié)點間傳輸延遲降低44%。這是因為基于RDMA 的區(qū)塊傳輸方案中將三次TCP 通信優(yōu)化為兩次RDMA 原語通信,并且單次RDMA 原語通信的延遲也低于TCP 通信,從而大幅降低了在兩節(jié)點間傳輸區(qū)塊的延遲。
表3 節(jié)點間的傳輸延遲對比 單位:μsTab.3 Comparison of transmission latency between nodes unit:μs
為了測試區(qū)塊傳輸方案對區(qū)塊鏈系統(tǒng)整體的影響,需要測試在區(qū)塊鏈網(wǎng)絡(luò)中區(qū)塊全網(wǎng)傳播的延遲,但是在真實的區(qū)塊鏈網(wǎng)絡(luò)上測試改進是幾乎不可能的,因為這需要更新所有網(wǎng)絡(luò)節(jié)點的軟件。SimBlock[17]是一個開源的區(qū)塊鏈網(wǎng)絡(luò)模擬器,能模擬比特幣、以太坊等區(qū)塊鏈系統(tǒng)的參數(shù),如區(qū)塊鏈網(wǎng)絡(luò)大小、區(qū)塊生成間隔和網(wǎng)絡(luò)通信狀況,研究人員可以通過修改SimBlock 系統(tǒng)來模擬得到研究方案對于區(qū)塊鏈系統(tǒng)產(chǎn)生的影響。
在實驗中,通過SimBlock 模擬了5 000 個節(jié)點的區(qū)塊鏈網(wǎng)絡(luò),依據(jù)真實環(huán)境下節(jié)點間傳輸實驗中得到的兩種方案在不同區(qū)塊大小的情況下的延遲,作為SimBlock 系統(tǒng)中兩個節(jié)點間區(qū)塊傳輸延遲參數(shù),再分別在SimBlock 系統(tǒng)中模擬生成1 000 個區(qū)塊,記錄這1 000 個區(qū)塊從產(chǎn)生到傳輸?shù)饺W(wǎng)所有節(jié)點所需要的時間,從而比較兩種方案的全網(wǎng)絡(luò)區(qū)塊傳輸延遲。
如表4 所示,在SimBlock 模擬環(huán)境中,基于RDMA 的區(qū)塊傳輸方案相較于基于TCP 的方案,在1 MB 大小的區(qū)塊上,能夠?qū)⑷W(wǎng)絡(luò)傳輸延遲降低24.4%,這個結(jié)果相較于點到點傳輸實驗的結(jié)果有所下降,這是因為區(qū)塊在全網(wǎng)傳輸?shù)倪^程中,延遲不僅包括網(wǎng)絡(luò)傳輸過程,還有節(jié)點對區(qū)塊的驗證時間,而區(qū)塊驗證時間并沒有因為區(qū)塊傳輸機制而改變。
表4 模擬環(huán)境下全網(wǎng)絡(luò)傳輸延遲對比 單位:μsTab.4 Comparison of transmission latency among whole network in simulated environment unit:μs
在此實驗中,同樣通過區(qū)塊點到點傳輸實驗可以得到RDMA 和TCP 方案點到點之間1 MB 大小的區(qū)塊傳輸?shù)难舆t,設(shè)定SimBlock 模擬系統(tǒng)中節(jié)點之間進行區(qū)塊傳輸?shù)膫鬏斞舆t,在2 000、5 000、10 000 個節(jié)點三種不同網(wǎng)絡(luò)規(guī)模下分別生成2 000 個區(qū)塊。SimBlock 模擬系統(tǒng)能夠模擬區(qū)塊生成和區(qū)塊在網(wǎng)絡(luò)中所有節(jié)點之間傳輸?shù)倪^程,并且會輸出每一個區(qū)塊的信息,包括區(qū)塊的高度、區(qū)塊生成時間、區(qū)塊被傳輸?shù)矫總€節(jié)點上的時間以及區(qū)塊是否在主鏈上等,從輸出的區(qū)塊信息中可以統(tǒng)計出不在主鏈上的區(qū)塊數(shù),從而得到此次模擬實驗過程中RDMA 和TCP 方案中區(qū)塊鏈發(fā)生臨時分叉的個數(shù)。
如表5 所示,在SimBlock 模擬環(huán)境中,基于RDMA 的區(qū)塊傳輸方案,在10 000 節(jié)點規(guī)模的區(qū)塊鏈上,使得系統(tǒng)產(chǎn)生臨時分叉的數(shù)量下降了22.6%。這是因為本文所提方案降低了區(qū)塊傳輸?shù)难舆t,而區(qū)塊傳輸延遲降低能夠使得區(qū)塊鏈系統(tǒng)中的區(qū)塊在產(chǎn)生后能夠快速得到全網(wǎng)其他節(jié)點同步,盡量降低各節(jié)點之間區(qū)塊鏈狀態(tài)的不一致性,從而達到降低臨時分叉數(shù)量的效果。
表5 模擬環(huán)境下臨時分叉數(shù)量對比Tab.5 Comparison of temporary fork numbers in simulated environment
總而言之,本文所提基于RDMA 技術(shù)區(qū)塊傳輸機制能夠在一定程度上降低現(xiàn)有的區(qū)塊鏈系統(tǒng)的區(qū)塊傳輸延遲,從而提高系統(tǒng)的可擴展性。
高性能區(qū)塊傳輸是實現(xiàn)具有高可擴展性的區(qū)塊鏈系統(tǒng)的重要部分。本文設(shè)計了一種基于RDMA 技術(shù)的區(qū)塊傳輸機制,能夠降低現(xiàn)有系統(tǒng)的區(qū)塊傳輸延遲,實現(xiàn)高性能區(qū)塊鏈系統(tǒng)。基于RDMA 提供的原語,本文設(shè)計了區(qū)塊鏈中區(qū)塊傳輸過程的兩次單邊操作,以實線低延遲、低負(fù)載的特性;并結(jié)合原語的特性,設(shè)計了預(yù)注冊的可復(fù)用區(qū)塊目錄結(jié)構(gòu),進一步降低了內(nèi)存注冊的時間消耗。相較于傳統(tǒng)的基于TCP的區(qū)塊傳輸機制,本文所提方案能夠使得區(qū)塊全網(wǎng)同步的延遲降低24.4%,同時RDMA 單邊原語的引入也降低了傳輸過程CPU 資源的占用。本文主要的目的是設(shè)計高效的區(qū)塊傳輸機制,而忽視了區(qū)塊鏈系統(tǒng)中其他數(shù)據(jù)的傳輸?shù)牡脱舆t需求。下一步的工作是在當(dāng)前工作的基礎(chǔ)上,進一步完成對區(qū)塊鏈系統(tǒng)的通信模塊的整體設(shè)計,實現(xiàn)低延遲的共識過程。