前言
本博客中代码仅针对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,注释以下内容即可。

所注释的内容应该只是一个输出语句,暂时没有发现注释上述内容对系统有影响。
2. 直接根据交易内容查询交易上链情况和上链时间
tendermint内置可以通过交易哈希查询交易上链情况,但是不能直接根据交易内容查询其上链情况和上链时间。
tendermint/tpc/core/routes.go中添加了两个函数来解决这个问题。这两个函数在tendermint/tpc/core/tx.go中实现。

tendermint/tpc/core/types/responses.go中定义了如下数据结构作为消息的返回值。

函数实现如下。



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

被折叠的 条评论
为什么被折叠?



