mempool 模块处理交易瓶颈
两核4G的虚拟机运行 chain33,mempool 模块处理交易的速度大概为 每秒1000多笔
测试方案:
- 使用 solo 共识,benchMode 设置为 true
- 使用发交易工具向节点发送交易,统计从构造交易并发送到回显交易哈希的时间
- 在不同于chain33运行的节点上(机器配置相同),启动一个进程发送交易,发送1万笔交易统计时间为 10 秒左右,solo 共识打包时间间隔也为 10 秒
- 在两个节点上分别启动进程发交易,发送1万笔交易统计时间均为 20 秒左右,solo 共识打包时间间隔为 10 秒
- 多个节点进行实验,结果也一致
交易处理速度跟 rpc 和 mempool 模块都有关系,推测瓶颈位于 mempool 模块
单节点mempool发交易之前已经测试过的,主要耗时在于签名和验签,其他流程没发现明显问题
测试对比
小米笔记本,solo模式,测试向mempool发送交易性能,以10s为统计时间
内部接口发送交易 (直接调用client相关接口 发送)
107515 135601 ns/op 28139 B/op 398 allocs/op
grpc 发送交易
84864 167136 ns/op 38344 B/op 583 allocs/op
json rpc 发送交易
51940 274422 ns/op 903478 B/op 587 allocs/op
内部接口发送交易 + 屏蔽签名验签
794376 25171 ns/op 13051 B/op 189 allocs/op
grpc 发送交易 + 屏蔽签名验签
352542 52363 ns/op 22693 B/op 372 allocs/op
json rpc发送交易 + 屏蔽签名验签
95557 171202 ns/op 885980 B/op 373 allocs/op
结论
json rpc和grpc均未做针对性优化,可见json rpc效率较低,大规模建议使用grpc发送交易
2核4G的配置, 使用jsonrpc发交易的TPS在2500笔左右, 使用grpc发交易的TPS在3200笔左右。 稍有提升。