使用Tendermint进行负载测试的一些修改方案

本文介绍了对Tendermintv0.34.24的RPC模块进行的修改,包括解决tm-load-test的批量WSJSONRPC消息输出问题,增加根据交易内容查询交易状态的功能,以及计算区块范围内交易吞吐量的接口。此外,还提供了一个web-demo工具,用于测试吞吐量、峰值吞吐量和事务确认延迟。

前言

本博客中代码仅针对Tendermint v0.34.24分支,其它分支中rpc模块略有不同,不可以直接替换文件,只能在理解所添加的代码的基础上移植需要用到的函数。

一、替换代码

使用百度云下载如下文件夹
链接:tendermint-add文件夹
提取码:xxxx
将文件夹中所有代码复制到对应的目录下;如果目录不存在就新建一个目录,如果文件重复,则覆盖原文件。

二、代码解析

本节对上一节中替换代码所作的修改进行解释。

1. 解决tm-load-test作负载测试时,批量WSJSONRPC消息刷屏的问题

出现上述问题的原因是tm-load-test使用jsonrpc建立持久的链接,以提高事务广播的效率,但是tendermint在接受到jsonrpc广播的消息后,会在终端中输出一则消息。
找到文件 tendermint/rpc/jsonrpc/server/ws_handler.go,注释以下内容即可。
WSJSONRPC
所注释的内容应该只是一个输出语句,暂时没有发现注释上述内容对系统有影响。

2. 直接根据交易内容查询交易上链情况和上链时间

tendermint内置可以通过交易哈希查询交易上链情况,但是不能直接根据交易内容查询其上链情况和上链时间。
tendermint/tpc/core/routes.go中添加了两个函数来解决这个问题。这两个函数在tendermint/tpc/core/tx.go中实现。
所添加的函数
tendermint/tpc/core/types/responses.go中定义了如下数据结构作为消息的返回值。
所添加的数据结构
函数实现如下。
searchTx

3. 查询一定区块范围内交易的吞吐量

routes.go文件中分别以以下两个接口实现平均吞吐量和峰值吞吐量的计算。
在这里插入图片描述
函数输入是两个int64类型的数字,返回的消息仅为包含一个浮点数的数据结构。为了网络传输,函数使用strconv包进行数字与字符串的转化,在设计前端时,尽量使用相同的方法转换数字与字符串。
在这里插入图片描述
代码实现如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. web-demo的使用

web-demo文件夹是新加的文件夹,主要实现了对新加的rpc接口的访问。
主要有三个功能:吞吐量查询、峰值吞吐量查询、事务确认延迟测试。

(1)编译

cd tendermint/web-demo
go build

(2)吞吐量测试

./web-demo tps:20-30 yourIP:yourPort
上述命令实现了通过IP为yourIP,RPC监听端口为yourPort的节点查询高度范围为20-30的区块平均吞吐量,吞吐量在命令行中打印。可以输入多个IP和端口,web-demo会从这些端口中随机选择一个。
一点建议,每次使用tm-load-test进行负载测试时,如果开始区块高度为20,终止区块高度为45,建议查询平均吞吐量的范围为25-40,即最开始的几个区块和最末几个区块不要查询吞吐量,其一是因为第一个区块的生成时间包含阻塞等待新交易的时间,其二是因为始末位置的网络不稳定。

(3)峰值吞吐量测试

./web-demo tpsm:20-30 yourIP:yourPort
与吞吐量测试基本一致,只是查询的结果是峰值吞吐量,值会略大于吞吐量测试结果。

(4)事务确认延迟测试

./web-demo latency yourIP:yourPort
该命令测试的是事务确认延迟,不是区块延迟
事务平均确认延迟就是事务从广播到上链的时间差。
可以在tendermint/web-demo/vars.go中调整延迟测试参数。
在这里插入图片描述
延迟测试前,可以使用tm-load-test提前配置一个负载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值