区块链性能优化

手动搭建的应用一般需要进行调优的,这点相信大家都深有体会。比如搭建一个 MySQL应用,在高性能的场景,默认参数肯定是不够的,需要对一些关键参数做调整,以满足高要求的场景。比如调整MySQL的最大连接数、打开表缓存数量、客户服务线程缓存SIZE、InnoDB事务行锁超时时间等,以提高MySQL的服务性能。

自建的区块链底层也是一样的,需要对区块链底层做一些参数调优,以更好地服务现实业务。

区块链下,主要的调优参数我学习到的有以下几个:

  1. txpool.limit:限制交易池容量,为防止过多的交易堆积在交易池内占用太多内存,导致交易池服务瘫痪。根据硬件性能和交易需求,调整为合适数值。
  2. tx_gas_limit:交易花费gas的最大上限。联盟链环境下,也是有gas的,不过gas被封装打包了,与用户没有任何关系。在业务逻辑复杂的交易中,执行交易时gas可能不足,这时候就需要调大tx_gas_limit的值。
  3. tx_count_limit:设置每个区块容纳的交易数上限。此值越大,区块链的最大TPS越大。但在机器网络或CPU等硬件性能有限的条件下,应该调小这个值。或在降低业务压力的场景下,也应该调小这个值。
  4. min_seal_time:控制PBFT等共识打包的最短时间。这个时间不能超过出空块的时间。这个时间越小,出块越快,区块链的TPS越大。如果系统出块压力较大,建议调大这个值,降低系统压力。
  5. block_size:区块容量最大限制。如果区块链中的交易数容量超过这个值,打包区块可能会出现错误。建议根据区块交易数上限设置合适的区块SIZE值。
  6. consensus_timeout:PBFT等共识过程中,每个区块执行的超时时间。如果系统出块压力较大,建议调大这个值,降低系统压力。

首先配置合适的服务器性能,然后根据业务需求调优区块链性能参数,以实现高可用的区块链服务。另外,区块链的storage部分也有优化的空间,通过修改blockdb的一些配置,如provider、write_buffer_size、compaction_total_size等参数,也可以提高区块链的读写能力。