Page 254 - 《软件学报》2025年第7期
P. 254
张孝 等: 区块链测试基准综述 3175
Gromit、BBSF 等, 是通过利用 RPC 接口与区块链进行交互, 从而获取区块中的交易数量和提交时间等关键信息,
进一步通过计算来得出性能指标数据. 另一方面, 有些测试基准, 如 BCTMark 等, 是通过使用外部插件工具来收集
区块链的性能指标数据. 还有一些测试基准借助 Prometheus 和 Grafana 等开源工具对指标数据进行存储和可视
化. 下面对常见的区块链基准中指标的获取关键过程进行描述.
Diablo [42] 将发送事务前记录提交时间, 通过轮询区块链节点, 检查最新区块是否包含已发送的事务, 当检测到
时, 记录为事务的确认时间. 测试完成后通过记录的数据来计算指标. Gromit [43] 通过两种方式获取事务的确认时
间, 一是查询区块中时间戳, 二是定期轮询区块链系统, 以确定事务是否已经确认. BlockBench [39] 中将事务提交后
返回的交易 ID 存储到本地队列中, 利用 GetLatestBlock(h) 方法获取区块链上完成的交易列表, 并与本地队列做比
较, 删掉匹配的交易. 通过该方法可以获取一定时间完成的交易总数. BBSF 使用 RPC 与区块链交互, 并监视区块
获取完成的交易数量, 根据交易数量、当前区块的时间戳以及第 1 个交易的调用时间, 计算吞吐量和延迟.
Touloupou 等人 [99] 的研究中使用 XRPL 中提供的 rippled 进程来捕获性能数据, 使用 Prometheus 来获取资源
利用率数据, 并将这些指标数据存储到 InfluxDB 中.
BCadvisor [44] 中的数据解析器模块可通过 RPC 与区块链模块进行交互, 获取资源利用情况和最新的账本状态,
获取所需数据后, 根据公式计算各个指标的值. 计算出来的结果使用 Prometheus 和 Grafana 进行存储和可视化.
BlockMeter [48] 中通过一个性能监控器收集区块链测试过程中的数据, 包括事务的开始时间、结束时间以及容
器的资源状态数据等. 该性能监控器使用 NodeJS 和 Express 搭建, 通过 API 网关与底层区块链进行交互, 获取性
能和资源状态数据.
Caliper 和 xBCBench 的核心层通过实现不同功能的北向接口获取资源状态数据和交易过程数据. 其中资源监
控模块可以获取区块链系统的资源效率数据, 包括 CPU 利用率、内存利用率、网络使用等. 性能分析器模块在执
行交易的过程中记录关键指标数据, 例如交易创建时间、交易提交时间、交易返回结果等. 这些数据用于生成最
终的指标数据, 并汇总成测试报告.
BCTMark 使用 Telegraf 的 HTTP 插件通过以太坊的 HTTPAPI 收集区块链节点的指标数据和服务器 (CPU、
内存消耗、硬盘使用等) 的数据, 并使用 InfluxDB 和 Grafana 进行存储和展示.
Klenik 等人 [50] 的研究中使用了开源的 Elasticstack, 处理来自 Fabric 节点和 Caliper 工作服务的日志.
(2) 日记收集. 通过区块查询获取指标数据的方式会对区块链节点产生一定的性能开销, 这可能会影响性能指
标结果的准确性. 文献 [51] 提出了一个基于日志的区块链分析工具. 该工具为每个区块链验证节点配置了一个分
析器, 通过监控区块链节点的运行, 解析日记, 提取统一的动作, 并将其记录在固定格式的元组中. 该工具能够通过
日记分析获取区块链系统不同阶段的详细信息, 并基于解析节点运行日记中的统计数据评估实时性能. 与基于
RPC 的区块查询的方法相比, 该方法具有更低的开销, 更加适合实时监控. 然而, 由于不同的区块链遵循不同的日
志格式, 这个方法无法扩展到所有的区块链.
5.4.3 指标总结
目前的测试基准都包含指标的定义, 但是对于指标的选择、指标获取等方面存在一些差异.
● 大多数基准中考虑了性能指标和资源效率指标, 对于安全性和可扩展性指标考虑的比较少, 只有 BBSF 和
BlockBench 定义了安全指标.
● 目前的基准中对指标的定义公式各不相同, 有基准中甚至缺少了指标的定义公式, 例如 BlockMeter、C2B2
和 Gromit 等.
● 测试基准中对于指标的获取方式也不统一, 目前绝大多数采用区块查询的方式获取指标, 这其中有的基准
采用自研的性能分析函数, 有的借助一些外部插件工具, 不同的方式对于结果的影响不同.
● 大多数的基准中对指标的获取过程进行了描述, 但是有些基准中没有明确指标的获取方式, 例如 DAGBENCH.
5.5 执行规则
区块链执行规则分为测试配置和测试流程, 其中测试配置进一步分为系统配置和攻击配置. 本节从系统配置、

