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