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  的去中心化代币交易所, 用户可以以小费用交换不同类型的代币, 并通过提供流
                 动性来获得奖励. 工作负载包括提供流动性、取回流动性和交换代币的交易. 工作负载的大小、交易组合和到达
   246   247   248   249   250   251   252   253   254   255   256