Page 251 - 《软件学报》2025年第7期
P. 251
3172 软件学报 2025 年第 36 卷第 7 期
工作负载, 但以数据更改的负载为主, 对负载静态和动态特征的规定也存在不同程度的缺失, 如表 8 所示. 另一方
面, 现有区块链测试基准采用了不同的负载生成方式: 一是借鉴和利用数据库测试基准的负载生成方式; 二是从区
块链的实际应用中, 抽象出操作集合作为负载; 三是使用简单的负载生成器产生负载. 下面详细介绍.
表 8 区块链基准负载对比
负载类型 负载特征
测试基准
数据更改 数据查询 静态 动态
BlockBench [39] ✓ ✓ ✓ ✓
BlockMeter [48] ✓ - ✓ -
Klenik等人 [50] ✓ - ✓ -
Touloupou等人 [99] ✓ - ✓ -
BBSF [88] ✓ - ✓ ✓
Diablo [42] ✓ - ✓ ✓
DAGBENCH [46] ✓ ✓ ✓ -
Gromit [43] ✓ - ✓ -
BCTMark [45] ✓ - ✓ -
BCadvisor [44] ✓ - ✓ -
xBCBench [47] ✓ - ✓ -
5.3.1 数据更改负载
(1) 移植数据库负载
BlockBench [39] 中通过智能合约形式将两个数据库的基准 YCSB 和 Small Bank 移植到私有区块链中.
xBCBench [47] 中设计了一个智能合约, 将 Small Bank 工作负载移植到 Sawtooth 中, 其中包括交易储蓄、存款支票、
发送付款、写支票和合并操作. 两者均未对智能合约的设计做详细描述. Klenik 等人 [50] 将 TPC-C 的负载移植到
Hyperledger 中, 开发了 TPC-C 的负载产生器并与 Hyperledger Caliper 进行集成, 实现负载调度和执行, 负载的产
生速率可以通过参数进行控制. 上述基准都描述了负载的频率, 但对数据大小、并发数量、负载类型变化等介绍
较少.
(2) 根据实际应用产生
大部分区块链测试基准根据某个应用场景来构造负载. BlockBench [39] 使用了 3 个流行以太坊的智能合约
EtherId、Doubler 以及 WavesPresale 作为工作负载, 并通过修改键值的方式, 将这 3 种智能合约引入到 Hyperledger
中. 负载的分布和发送速率通过参数设置.
Diablo [42] 中设计了实现 5 个去中心化应用程序的智能合约, 每个合约中定义了一些方法函数来实现相应的业
务逻辑, 并将其作为工作负载. 交易所 DApp 通过 ExchangeContractGafam 智能合约实现, 包含 CheckStock、
BuyGoogle、BuyApple、BuyFacebook、BuyAmazon、BuyMicrosoft 等函数. 视频分享 DApp 通过 Decentralized-
YouTube 智能合约实现, 其中包含一个上传函数, 该函数将一些视频数据作为参数. 游戏 DApp 通过 DecentralizedDota
智能合约实现, 其中, Update 函数实现了 10 个玩家在 250×250 地图的 x 轴和 y 轴上移动. FIFA Web 服务 DApp 通
过一个简单的 Counter 智能合约实现, 其中包含一个 add 函数, 该函数会随着 FIFA 网站请求数量的增加而递增.
移动服务 DApp 通过 ContractUber 智能合约实现, 其中包含 CheckDistance 函数, 用于计算顾客 (请求者) 与一个区
域 (一个二维网格) 中的 10 000 名司机之间的距离, 以便将最近的司机与顾客匹配. Diablo [42] 中每一种工作负载的
大小和随时间的分布与真实业务场景相符合. 负载的组合类型、比例和时间分布在基准配置文件中定义.
BBSF [100] 中定义了去中心化代币交易所、NFT 市场、NFT 铸造、体育博彩网站这 4 个工作负载. 这 4 个工作
负载的智能合约按照 Web2 等价物的历史需求, 裁剪冗余功能, 仅保留完成任务所需的核心功能实现. 去中心化代
币交易所: 一个基于 Uniswap-V2 的去中心化代币交易所, 用户可以以小费用交换不同类型的代币, 并通过提供流
动性来获得奖励. 工作负载包括提供流动性、取回流动性和交换代币的交易. 工作负载的大小、交易组合和到达

