Page 256 - 《软件学报》2025年第7期
P. 256

张孝 等: 区块链测试基准综述                                                                 3177


                 中将区块链抽象为       (E, R, I) 的元组, 其中  E  代表区块链的节点集合, R    代表了资源状态的结合, 例如账户余额、智
                 能合约状态等, I 代表了交易类型, 例如转账、合约调用等. 新的区块链加入需要实现至少                          1  种交易类型和   4  个具
                 体的区块链执行函数. 这些函数包括创建客户端、创建资源、编码交互和触发交互发送到区块链. 上述两个基准
                 中虽然提供了统一的适配接口, 但是各区块链系统需要通过自己的部署脚本进行部署适配.
                    BCadvisor [44] 是一个面向资源的区块链测试基准, 它采用了模块化架构, 包括               3  个协作模块: 区块链模块、数
                 据解析器和指标可视化器. 其中, 区块链模块采用              Docker 技术进行部署管理, 保证了新区块链协议的兼容性. 研究
                 中没有针对    Docker 部署的方式进行详细的描述. DAGBENCH          [46] 中配置文件包含网络、负载、环境的配置, 通过
                 读取配置文件, 可以完成       DAG  实例的初始化. 但是研究中缺少针对部署管理的详细描述.

                 5.5.2    攻击配置
                    区块链系统的安全性是其成功应用和广泛采用的关键因素之一, 也是其区别于数据库技术的显著特征, 因此
                 攻击配置是区块链基准的要素之一. 根据第              4  节的分析, 可以通过模拟节点故障、网络分区和恶意攻击等常见故
                 障及攻击来测试系统的安全性. 目前的基准中仅有                BlockBench、BBSF、Diablo  和  BCadvisor 考虑了攻击配置, 但
                 是前三者均没有考虑恶意攻击的情况. C2B2            和  BCTMark  提供了网络仿真的功能, 能够通过配置文件的描述实现
                 对各种网络故障的模拟, 但是二者均缺少了实验分析.
                    BlockBench [39] 在压测过程中通过关闭服务器来模拟节点故障, 评估了各系统应对系统崩溃故障的能力. 通过
                 模拟导致网络分区的攻击, 评估了区块链系统抵御双重支付或自私挖矿攻击的能力. Diablo                          [42] 通过注入高工作负
                 载, 测试区块链的性能, 以此来评估区块链系统抵御拒绝服务攻击的能力. BBSF                     [88] 在一个  32  节点的区块链上运行
                 工作负载, 通过分别设置       0、4  和  8  个节点返回空值和随机值来模拟崩溃故障和恶意攻击, 测量和分析不同故障情
                 况下的性能变化, 从而评估系统在面对安全攻击时的性能影响程度.
                    BCTMark [45] 中提供了网络仿真功能, 通过配置文件的描述, 可模拟数据包丢失率、网络延迟和网络速率                           (带
                 宽) 等网络特性, 这个功能可用于研究网络故障、延迟对区块链性能的影响. 但是研究中没有针对网络故障进行测
                 试. C2B2  集成了  Kubernetes 的云原生混沌工程库    ChaosMesh, 并扩展了其网络仿真能力, 支持多个目标网络配置.
                 用户可以使用简单的高级描述文件描述目标网络环境和网络故障                       (例如网络性能损失、节点崩溃、分区等). 该研
                 究中利用该功能评估了地理分布对性能的影响, 但缺少了对网络故障等条件下区块链系统性能的分析.
                    文献  [47] 中给出了故障负载      (Faultload) 的定义, 是指当出现磁盘故障、网络超载或故意攻击等情况时, 区块
                 链系统应能够保证账本的不可变性, 并在不崩溃的情况下正常运行. 但是该文献在实验设计中没有对区块链进行
                 攻击配置.
                    BCadvisor [44,87] 模拟了两种常见的攻击: DDoS  攻击和  Sybil 攻击. 评估了这两类攻击对系统性能的影响情况.

                 5.5.3    测试流程
                    在现有的区块链测试基准中, 超过一半的基准都对测试流程进行了详细的描述. 虽然各个基准的工具实现方
                 式不同, 其基准测试的流程也存在差异, 但大多数都包括了环境准备、测试执行和测试报告这                             3  个部分. 以下进行
                 详细对比分析.
                    DAGBENCH   定义了基准测试的步骤, 包括初始化区块链环境、部署负载、执行负载、产生报告和环境清理
                 等. BCTMark [45] 定义基准测试的基本流程包括申请资源、部署测试环境、执行测试、备份结果和环境清理等.
                    xBCBench  的工作流程包括     3  个阶段: 准备阶段、测试阶段和报告阶段, 其中准备阶段包括环境部署、合约
                 部署和监控组件的启动. 测试阶段是按照预定的测试计划执行负载, 并收集进度信息. 报告阶段的主要工作是收集
                 资源效率数据和性能数据, 并汇集成可视化报告.
                    BlockMeter [48] 的工作流程主要包括用户创建、负载创建、流量/负载生成、事务请求、请求预处理、性能监
                 控和事务响应等环节. 在测试过程中, 它利用             JMeter 生成  HTTP  请求, 并将其发送至   API 网关. API 网关在接收到
                 HTTP  请求后, 会创建实例并初始化性能矩阵. 请求随后被转发至事务处理程序, 进行预处理并发送至区块链平台.
                 当事务准备提交至区块链时, 性能监控器开始记录性能矩阵以及                      Docker 容器/实例的使用情况. 一旦区块链完成
                 事务处理, 它会向框架发送响应, 此时性能矩阵被最终确定, 并向                   JMeter 返回成功的状态码. 性能数据, 包括事务
   251   252   253   254   255   256   257   258   259   260   261