Hyperledger Caliper手册

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

主进程与工作进程

Caliper将可伸缩性视为其最重要的目标之一(其他目标还包括:可扩展性、灵活性)。 利用单一机器生成的工作负载很快就会达到机器的资源上限。如果我们希望工作负载 速率可以匹配被评估系统的伸缩性和性能特点,那么我们就需要一个分布式的解决方案。

因此Caliper作为一个框架,主要包含两种不同类型的服务服务/进程:一个主进程 以及若干工作进程:

  • 主进程初始化待测试系统并协调基准测试的运行(例如:调度配置好的测试轮次) 并负责基于观测的交易统计数据生成性能报告
  • 工作进程执行具体的工作负载生成任务,彼此相互独立。即使一个工作进程达到了 宿主机器的上限,也可以使用更多的机器、更多的工作进程来进一步提升Caliper的 工作负载率。因此工作进程是Caliper可伸缩性的骨干。

在下图中进一步展示了主进程和工作进程的关系:

Caliper主进程

Caliper的主进程是整个基准测试运行的编排者。它包含若干个预定义的阶段,参见下图 说明:

1、在第一个阶段,Caliper执行网络配置文件中指定的启动脚本。这个步骤主要用于 本地的Caliper和待测试系统部署,因为它提供了一种方便的手段可以一步启动待测试网络和Caliper 2、在第二个阶段,Caliper初始化待测试系统。这里执行的任务高度依赖于待测试系统所提供的 能力以及待测系统适配器。例如,Hyperledger Fabric适配器使用这一阶段来创建/加入通道 以及注册/等级新用户。 3、在第三个阶段,Caliper部署智能合约到待测试系统 —— 如果待测试系统以及适配器支持这一操作的话 —— 例如Hyperledger Fabric适配器 4、在第四个阶段,Caliper调度并通过工作进程执行配置好的测试轮次。这也是生成工作负载的阶段。 5、在最后一个阶段,当执行测试轮次并生成报告后,Caliper执行网络配置文件中的清理脚本。这一步 主要对本地部署的Caliper和待测试系统有用,因为它提供了一个方面的手段来拆除网络以及任何临时性 的资料。

如果你的待测试系统已经部署并且初始化,那么只需要Caliper执行测试轮次。幸运的是,你可以 逐个配置每一个阶段是否执行,详细办法可以查看flow control settings

Caliper工作进程

站在用户的角度来看,在工作进程内会发生一些有趣的事情。当受到主进程发来的消息后, 一个工作进程启动它的任务。工作进程的核心组件如下图所示:

工作进程的时间主要消耗在工作负载生成循环上。该循环包含两个重要的步骤:

1、等待速率控制器启用下一次交易发送。可以将速率控制器视为一种延迟电路。 基于所使用的速率控制器,它会在启用下次交易之前,延迟或停止工作进程的执行。 例如,如果配置了一个每秒50个交易(TPS)的速率,那么速率控制器将在两个交易 之间暂停20ms。 2、一旦速率控制器启用下一个交易,那么工作进程将控制权交还给工作负载模块。 工作负载模块组装交易参数并调用待测系统适配器的API,从而将交易请求发送 给待测系统。

在工作负载循环中,工作进程会向主进程发送进度更新。通过使用不同的观察者, 有多个方法来通知工作进程,详细信息可参考Monitors and Observers