FISCO BCOS的网络压缩功能如何?

发布时间:2020-11-06 来源:本站


作者:陈宇杰|FISCO BCOS核心开发者


作者语


外网环境下,区块链系统性能受限于网络带宽,为了尽量减少网络带宽对系统性能的影响,FISCO BCOS从relase-2.0.0-rc2开始支持网络压缩功能,该功能主要在发送端进行网络数据包压缩,在接收端将解包数据,并将解包后的数据传递给上层模块。


本期文章讲的就是FISCO BCOS的网络压缩功能,作者从FISCO BCOS的系统框架、核心实现、处理流程、测试结果等角度进行了解析。


系统框架


网络压缩主要在P2P网络层实现,系统框架如下:


网络压缩主要包括两个过程:

  • 发送端压缩数据包:群组层通过P2P层发送数据时,若数据包大小超过1KB,则压缩数据包后,将其发送到目标节点;

  • 接收端解压数据包:节点收到数据包后,首先判断收到的数据包是否被压缩,若数据包是压缩后的数据包,则将其解压后传递给指定群组,否则直接将数据传递给对应群组。


核心实现

综合考虑性能、压缩效率等,我们选取了Snappy来实现数据包压缩和解压功能。


数据压缩标记位


FISCO BCOS的网络数据包结构如下图:



网络数据包主要包括包头和数据两部分,包头占了16个字节,各个字段含义如下:


网络压缩模块仅压缩网络数据,不压缩数据包头。

考虑到压缩、解压小数据包无法节省数据空间,而且浪费性能,在数据压缩过程中,不压缩过小的数据包,仅压缩数据包大于c_compressThreshold的数据包.c_compressThreshold默认是1024(1KB)。我们扩展了Version的最高位,作为数据包压缩标志:



处理流程


下面以群组1的一个节点向群组内其他节点发送网络消息包packetA为例(比如发送交易、区块、共识消息包等),详细说明网络压缩模块的关键处理流程。


发送端处理流程:


接收端处理流程:


配置与兼容


配置说明


兼容性说明


测试结果


为测试网络压缩效果,分别在内网和外网环境下,以同样的压测程序和QPS压测开启网络压缩和没开启网络压缩的四节点区块链,测试结果如下。

通过测试结果可看出:


图一:带宽对比(关闭压缩和开启压缩情况下,压测并行solidity合约和串行Precompile合约)



通过图一可看出,执行串行solidity合约,开启压缩可节省三分之一带宽;执行并行Precompile合约可节省三分 之二带宽。


图二:TPS对比(内网和外网环境下,关闭压缩和开启压缩情况下TPS)



通过图二可看出,内网环境下,开启压缩对区块链系统性能影响不大;外网环境下,因为在有限带宽限制下,开启 压缩可处理更多交易,区块链性能提升了约三分之一。


图三:详细数据



内网环境测试结果



外网环境测试结果


分享至: