區(qū)塊鏈底層平臺(tái)FISCO BCOS的網(wǎng)絡(luò)壓縮功能是怎樣的,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
目前創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、白云鄂網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
FISCO BCOS是完全開(kāi)源的聯(lián)盟區(qū)塊鏈底層技術(shù)平臺(tái),由金融區(qū)塊鏈合作聯(lián)盟(深圳)(簡(jiǎn)稱金鏈盟)成立開(kāi)源工作組通力打造。開(kāi)源工作組成員包括博彥科技、華為、深證通、神州數(shù)碼、四方精創(chuàng)、騰訊、微眾銀行、亦筆科技和越秀金科等金鏈盟成員機(jī)構(gòu)。
外網(wǎng)環(huán)境下,區(qū)塊鏈系統(tǒng)性能受限于網(wǎng)絡(luò)帶寬,為了盡量減少網(wǎng)絡(luò)帶寬對(duì)系統(tǒng)性能的影響,F(xiàn)ISCO BCOS從relase-2.0.0-rc2開(kāi)始支持網(wǎng)絡(luò)壓縮功能,該功能主要在發(fā)送端進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包壓縮,在接收端將解包數(shù)據(jù),并將解包后的數(shù)據(jù)傳遞給上層模塊。
下面講的就是FISCO BCOS的網(wǎng)絡(luò)壓縮功能,從FISCO BCOS的系統(tǒng)框架、核心實(shí)現(xiàn)、處理流程、測(cè)試結(jié)果等角度進(jìn)行了解析。
網(wǎng)絡(luò)壓縮主要在P2P網(wǎng)絡(luò)層實(shí)現(xiàn),系統(tǒng)框架如下:
網(wǎng)絡(luò)壓縮主要包括兩個(gè)過(guò)程:
發(fā)送端壓縮數(shù)據(jù)包:群組層通過(guò)P2P層發(fā)送數(shù)據(jù)時(shí),若數(shù)據(jù)包大小超過(guò)1KB,則壓縮數(shù)據(jù)包后,將其發(fā)送到目標(biāo)節(jié)點(diǎn);
接收端解壓數(shù)據(jù)包:節(jié)點(diǎn)收到數(shù)據(jù)包后,首先判斷收到的數(shù)據(jù)包是否被壓縮,若數(shù)據(jù)包是壓縮后的數(shù)據(jù)包,則將其解壓后傳遞給指定群組,否則直接將數(shù)據(jù)傳遞給對(duì)應(yīng)群組。
綜合考慮性能、壓縮效率等,我們選取了Snappy來(lái)實(shí)現(xiàn)數(shù)據(jù)包壓縮和解壓功能。
數(shù)據(jù)壓縮標(biāo)記位
FISCO BCOS的網(wǎng)絡(luò)數(shù)據(jù)包結(jié)構(gòu)如下圖:
網(wǎng)絡(luò)數(shù)據(jù)包主要包括包頭和數(shù)據(jù)兩部分,包頭占了16個(gè)字節(jié),各個(gè)字段含義如下:
Length: 數(shù)據(jù)包長(zhǎng)度
Version: 擴(kuò)展位,用于擴(kuò)展網(wǎng)絡(luò)模塊功能
ProtocolID: 存儲(chǔ)了數(shù)據(jù)包目的群組ID和模塊ID,用于多群組數(shù)據(jù)包路由,目前最多支持32767個(gè)群組
PaketType: 標(biāo)記了數(shù)據(jù)包類型
Seq: 數(shù)據(jù)包序列號(hào)
網(wǎng)絡(luò)壓縮模塊僅壓縮網(wǎng)絡(luò)數(shù)據(jù),不壓縮數(shù)據(jù)包頭。
考慮到壓縮、解壓小數(shù)據(jù)包無(wú)法節(jié)省數(shù)據(jù)空間,而且浪費(fèi)性能,在數(shù)據(jù)壓縮過(guò)程中,不壓縮過(guò)小的數(shù)據(jù)包,僅壓縮數(shù)據(jù)包大于c_compressThreshold的數(shù)據(jù)包.c_compressThreshold默認(rèn)是1024(1KB)。我們擴(kuò)展了Version的最高位,作為數(shù)據(jù)包壓縮標(biāo)志:
Version最高位為0,表明數(shù)據(jù)包對(duì)應(yīng)的數(shù)據(jù)Data是未壓縮的數(shù)據(jù);
Version最高位為1,表明數(shù)據(jù)包對(duì)應(yīng)的數(shù)據(jù)Data是壓縮后的數(shù)據(jù)。
下面以群組1的一個(gè)節(jié)點(diǎn)向群組內(nèi)其他節(jié)點(diǎn)發(fā)送網(wǎng)絡(luò)消息包packetA為例(比如發(fā)送交易、區(qū)塊、共識(shí)消息包等),詳細(xì)說(shuō)明網(wǎng)絡(luò)壓縮模塊的關(guān)鍵處理流程。
發(fā)送端處理流程:
群組1的群組模塊將packetA傳入到P2P層;
P2P判斷packetA的數(shù)據(jù)包大于c_compressThreshold,則調(diào)用壓縮接口,對(duì)packetA進(jìn)行壓縮,否則直接將packetA傳遞給編碼模塊;
編碼模塊給packetA加上包頭,附帶上數(shù)據(jù)壓縮信息,即:若packetA是壓縮后的數(shù)據(jù)包,將包頭Version的最高位置為1,否則置為0;
P2P將編碼后的數(shù)據(jù)包傳送到目的節(jié)點(diǎn)。
接收端處理流程:
目標(biāo)機(jī)器收到數(shù)據(jù)包后,解碼模塊分離出包頭,通過(guò)包頭Version字段的最高位是否為1,判斷網(wǎng)絡(luò)數(shù)據(jù)是否被壓縮;
若網(wǎng)絡(luò)數(shù)據(jù)包被壓縮過(guò),則調(diào)用解壓接口,對(duì)Data部分?jǐn)?shù)據(jù)進(jìn)行解壓,并根據(jù)數(shù)據(jù)包頭附帶的GID和PID,將解壓后的數(shù)據(jù)傳遞給指定群組的指定模塊;否則直接將數(shù)據(jù)包傳遞給上層模塊。
配置說(shuō)明
開(kāi)啟壓縮:2.0.0-rc2及其以上版本 支持網(wǎng)絡(luò)壓縮功能,配置 config.ini的[p2p].enable_compresss=true
關(guān)閉壓縮:config.ini的[p2p].enable_compresss=false
兼容性說(shuō)明
數(shù)據(jù)兼容:不涉及存儲(chǔ)數(shù)據(jù)的變更;
網(wǎng)絡(luò)兼容rc1:向前兼容,目前僅release-2.0.0-rc2及其以上版本有網(wǎng)絡(luò)壓縮功能。
為測(cè)試網(wǎng)絡(luò)壓縮效果,分別在內(nèi)網(wǎng)和外網(wǎng)環(huán)境下,以同樣的壓測(cè)程序和QPS壓測(cè)開(kāi)啟網(wǎng)絡(luò)壓縮和沒(méi)開(kāi)啟網(wǎng)絡(luò)壓縮的四節(jié)點(diǎn)區(qū)塊鏈,測(cè)試結(jié)果如下。
通過(guò)測(cè)試結(jié)果可看出:
內(nèi)網(wǎng)環(huán)境下:開(kāi)啟壓縮對(duì)區(qū)塊鏈系統(tǒng)性能影響不大,運(yùn)行串行solidity壓測(cè)合約時(shí),網(wǎng)絡(luò)帶寬消耗降低為未開(kāi)壓縮時(shí)的三分之二;運(yùn)行并行precompile壓測(cè)合約,網(wǎng)絡(luò)帶寬消耗降低到未開(kāi)壓縮時(shí)的三分之一;
外網(wǎng)環(huán)境下:開(kāi)啟壓縮可提升區(qū)塊鏈系統(tǒng)性能
圖一:帶寬對(duì)比(關(guān)閉壓縮和開(kāi)啟壓縮情況下,壓測(cè)并行solidity合約和串行Precompile合約)
通過(guò)圖一可看出,執(zhí)行串行solidity合約,開(kāi)啟壓縮可節(jié)省三分之一帶寬;執(zhí)行并行Precompile合約可節(jié)省三分 之二帶寬。
圖二:TPS對(duì)比(內(nèi)網(wǎng)和外網(wǎng)環(huán)境下,關(guān)閉壓縮和開(kāi)啟壓縮情況下TPS)
通過(guò)圖二可看出,內(nèi)網(wǎng)環(huán)境下,開(kāi)啟壓縮對(duì)區(qū)塊鏈系統(tǒng)性能影響不大;外網(wǎng)環(huán)境下,因?yàn)樵谟邢迬捪拗葡拢_(kāi)啟 壓縮可處理更多交易,區(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 |
壓測(cè)場(chǎng)景 | 壓縮前 | Snappy壓縮后 |
---|---|---|
四節(jié)點(diǎn),串行solidity合約(PerformanceOk) | 1125.8 | 1740 |
四節(jié)點(diǎn), 串行solidity合約(PerformanceOkD) | 低于1000 | 1407 |
關(guān)于區(qū)塊鏈底層平臺(tái)FISCO BCOS的網(wǎng)絡(luò)壓縮功能是怎樣的問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。