FISCO BCOS PBFT网络优化
Posted 软件工程小施同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FISCO BCOS PBFT网络优化相关的知识,希望对你有一定的参考价值。
FISCO BCOS v2.2.0优化了PBFT消息转发机制和Prepare包的结构,尽量减少网络中冗余的数据包,提升网络效率。
PBFT消息转发优化
为了保证节点断连情况下共识消息包能到达所有节点,FISCO BCOS PBFT共识模块采用了消息转发机制,
优化前的消息转发机制如下:
对于全连四节点区块链系统,系统TTL(Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量)设置为2时,每个共识消息包均会被转发三次,且节点规模越大、TTL值越大冗余的共识消息包越多。
且Leader广播的Prepare包内含有整个区块,多次转发同样的Prepare包会带来巨大的网络开销。
为了
- 在网络全连的情况下,避免冗余的共识消息包;
- 在网络断连情况下,共识消息包能尽量到达每个共识节点,
FISCO BCOS v2.2.0对PBFT消息转发机制进行了优化,优化后的PBFT消息转发流程如下:
下图展示了四节点区块链系统在节点断连情况下,PBFT消息包转发流程:
node0
向{node1, node2, node3}
发送PBFT消息,发现{node1, node3}
不在连接列表内,则将PBFT消息msg的forwardNodes
字段设置为{node1, node3}
,并将其转发给node2
;node2
收到node1
的PBFT消息后,判断forwardNodes
字段不为空,则遍历邻居节点列表{node1, node3}
,并将邻居节点从forwardNodes
中移除;node2
向node1
和node3
转发更新后的PBFT消息msg;node1
和node3
收到msg后,判断forwardNodes
字段为空,认为该消息已经到达了所有节点,不继续转发PBFT消息。
优化后的PBFT消息转发策略,源节点在PBFT消息包中加入了forwardNodes
字段记录断连节点信息,其他节点收到PBFT消息包后,将消息转发给forwardNodes
记录的可达节点,保障PBFT消息包尽量能到达所有节点的同时,减少了网络中冗余的PBFT消息,提升网络效率。
Prepare包结构优化
PBFT共识算法中,Leader向所有节点广播Prepare包,Prepare包内包含Leader节点从交易池打包的整个区块,由于同步模块会将交易同步到所有共识节点,因此Prepare包内区块的交易有很大概率在其他共识节点的交易池命中。
基于这点,FISCO BCOS 2.2.0优化了Prepare包结构,Prepare消息包内的区块仅包含交易哈希,其他节点收到Prepare包后,优先从本地交易池内获取命中交易,缺失的交易向Leader请求。
优化后的Prepare消息包内的区块结构如下:
Prepare包处理流程如下:
优化Prepare结构后,充分利用了交易池缓存的交易,进一步降低了Prepare消息包的大小,节省了网络流量。
以上是关于FISCO BCOS PBFT网络优化的主要内容,如果未能解决你的问题,请参考以下文章