您好,登錄后才能下訂單哦!
區塊鏈底層平臺FISCO BCOS的網絡壓縮功能是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
FISCO BCOS是完全開源的聯盟區塊鏈底層技術平臺,由金融區塊鏈合作聯盟(深圳)(簡稱金鏈盟)成立開源工作組通力打造。開源工作組成員包括博彥科技、華為、深證通、神州數碼、四方精創、騰訊、微眾銀行、亦筆科技和越秀金科等金鏈盟成員機構。
外網環境下,區塊鏈系統性能受限于網絡帶寬,為了盡量減少網絡帶寬對系統性能的影響,FISCO BCOS從relase-2.0.0-rc2開始支持網絡壓縮功能,該功能主要在發送端進行網絡數據包壓縮,在接收端將解包數據,并將解包后的數據傳遞給上層模塊。
下面講的就是FISCO BCOS的網絡壓縮功能,從FISCO BCOS的系統框架、核心實現、處理流程、測試結果等角度進行了解析。
網絡壓縮主要在P2P網絡層實現,系統框架如下:
網絡壓縮主要包括兩個過程:
發送端壓縮數據包:群組層通過P2P層發送數據時,若數據包大小超過1KB,則壓縮數據包后,將其發送到目標節點;
接收端解壓數據包:節點收到數據包后,首先判斷收到的數據包是否被壓縮,若數據包是壓縮后的數據包,則將其解壓后傳遞給指定群組,否則直接將數據傳遞給對應群組。
綜合考慮性能、壓縮效率等,我們選取了Snappy來實現數據包壓縮和解壓功能。
數據壓縮標記位
FISCO BCOS的網絡數據包結構如下圖:
網絡數據包主要包括包頭和數據兩部分,包頭占了16個字節,各個字段含義如下:
Length: 數據包長度
Version: 擴展位,用于擴展網絡模塊功能
ProtocolID: 存儲了數據包目的群組ID和模塊ID,用于多群組數據包路由,目前最多支持32767個群組
PaketType: 標記了數據包類型
Seq: 數據包序列號
網絡壓縮模塊僅壓縮網絡數據,不壓縮數據包頭。
考慮到壓縮、解壓小數據包無法節省數據空間,而且浪費性能,在數據壓縮過程中,不壓縮過小的數據包,僅壓縮數據包大于c_compressThreshold的數據包.c_compressThreshold默認是1024(1KB)。我們擴展了Version的最高位,作為數據包壓縮標志:
Version最高位為0,表明數據包對應的數據Data是未壓縮的數據;
Version最高位為1,表明數據包對應的數據Data是壓縮后的數據。
下面以群組1的一個節點向群組內其他節點發送網絡消息包packetA為例(比如發送交易、區塊、共識消息包等),詳細說明網絡壓縮模塊的關鍵處理流程。
發送端處理流程:
群組1的群組模塊將packetA傳入到P2P層;
P2P判斷packetA的數據包大于c_compressThreshold,則調用壓縮接口,對packetA進行壓縮,否則直接將packetA傳遞給編碼模塊;
編碼模塊給packetA加上包頭,附帶上數據壓縮信息,即:若packetA是壓縮后的數據包,將包頭Version的最高位置為1,否則置為0;
P2P將編碼后的數據包傳送到目的節點。
接收端處理流程:
目標機器收到數據包后,解碼模塊分離出包頭,通過包頭Version字段的最高位是否為1,判斷網絡數據是否被壓縮;
若網絡數據包被壓縮過,則調用解壓接口,對Data部分數據進行解壓,并根據數據包頭附帶的GID和PID,將解壓后的數據傳遞給指定群組的指定模塊;否則直接將數據包傳遞給上層模塊。
配置說明
開啟壓縮:2.0.0-rc2及其以上版本 支持網絡壓縮功能,配置 config.ini的[p2p].enable_compresss=true
關閉壓縮:config.ini的[p2p].enable_compresss=false
兼容性說明
數據兼容:不涉及存儲數據的變更;
網絡兼容rc1:向前兼容,目前僅release-2.0.0-rc2及其以上版本有網絡壓縮功能。
為測試網絡壓縮效果,分別在內網和外網環境下,以同樣的壓測程序和QPS壓測開啟網絡壓縮和沒開啟網絡壓縮的四節點區塊鏈,測試結果如下。
通過測試結果可看出:
內網環境下:開啟壓縮對區塊鏈系統性能影響不大,運行串行solidity壓測合約時,網絡帶寬消耗降低為未開壓縮時的三分之二;運行并行precompile壓測合約,網絡帶寬消耗降低到未開壓縮時的三分之一;
外網環境下:開啟壓縮可提升區塊鏈系統性能
圖一:帶寬對比(關閉壓縮和開啟壓縮情況下,壓測并行solidity合約和串行Precompile合約)
通過圖一可看出,執行串行solidity合約,開啟壓縮可節省三分之一帶寬;執行并行Precompile合約可節省三分 之二帶寬。
圖二:TPS對比(內網和外網環境下,關閉壓縮和開啟壓縮情況下TPS)
通過圖二可看出,內網環境下,開啟壓縮對區塊鏈系統性能影響不大;外網環境下,因為在有限帶寬限制下,開啟 壓縮可處理更多交易,區塊鏈性能提升了約三分之一。
串行solidity合約(PerformanceOk) | 壓縮前 | Snappy壓縮后 |
---|---|---|
TPS | 1961.5 | 1939.4 |
入帶寬 | 10.88MBit/s | 6.93MBit/s |
出帶寬 | 9.08MBit/s | 5.70MBit/s |
并行Precompile合約(PerformanceDT) | 壓縮前 | Snappy壓縮后 |
---|---|---|
TPS | 9725 | 9741 |
入帶寬 | 76.06MBit/s | 22.72MBit/s |
出帶寬 | 80.48MBit/s | 24.17MBit/s |
壓測場景 | 壓縮前 | Snappy壓縮后 |
---|---|---|
四節點,串行solidity合約(PerformanceOk) | 1125.8 | 1740 |
四節點, 串行solidity合約(PerformanceOkD) | 低于1000 | 1407 |
關于區塊鏈底層平臺FISCO BCOS的網絡壓縮功能是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。