转载区块链性能测试工具caliper

Posted 非功能之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转载区块链性能测试工具caliper相关的知识,希望对你有一定的参考价值。

Caliper是一个区块链性能测试框架,可用于测试不同的区块链实现。支持

  • fabric v1.0+

  • sawtooth 1.0+

  • Iroha 1.0

测试内容指标包括:

  • 交易成功率

  • 交易吞吐量TPS

  • 交易延迟

  • 资源消耗

准备

先安装NodeJS 8.X、node-gyp、Docker、Docker-compose。

git clone https://github.com/hyperledger/caliper.gitcd caliper

npm install


安装区块链SDK(以fabric为例)

# caliper项目目录下npm install grpc@1.10.1 fabric-ca-clientfabric-client


跑个测试

性能测试示例在benchmark目录下,用法如下:

node benchmark/simple/main.js -c yourconfig.json -nyournetwork.json

-c用于指定区块链的配置文件,不指定的话默认为config.json;

-n用于指定区块链网络配置文件,不指定的话由-c指定的配置文件定义。

跑一个smallbank的例子:

node benchmark/smallbank/main.js


生成的报告长这样(部分):

架构

在这个标准框架核心,是可以译解信息的“适配层”,让Caliper可以安装智能合约,触发合约,或者查询各种分布式账本的状态,从而更好地测量其有效性。

【转载】区块链性能测试工具caliper

适配层 Adaptation Layer

适配层用于将现有的区块链系统与Caliper框架集成。适配器使用了相应的链SDK和API实现了Caliper Blockchain NBIs。

接口&核心层

区块链操作接口:包含部署合约、调用合约、查询账本状态等操作;

资源监控:对docker容器、本地进程进行监控,包括CPU、内存、网络IO等的状态;

性能分析:读取预定义的性能数据(如TPS、延迟、成功率等)并打印报告。这些数据在调用NBI的时候会记录(如创建时间,交易提交时间,交易结果等);

生成html报告。

应用层

应用层来运行区块链测试场景。每一个测试场景由一个配置文件来定义,包含底层区块链网络的配置和测试参数。

项目内置一个默认的区块链引擎,当然开发人员也可以基于NBI来定义自己的区块链引擎。

区块链引擎

【转载】区块链性能测试工具caliper

配置文件

以benchmark/simple/config.json为例:

"blockchain": {

    "type": "fabric",

    "config": "benchmark/simple/fabric.json"

  },

  "command" : {

    "start": "docker-compose -fnetwork/fabric/simplenetwork/docker-compose.yaml up -d",

    "end" : "docker-compose -fnetwork/fabric/simplenetwork/docker-compose.yaml down;docker rm $(docker ps-aq);docker rmi $(docker images dev* -q)"

  },

  "test": {

    "name": "simple",

    "description" : "This is an example benchmark forcaliper, to test the backend DLT's performance with simple account opening& querying transactions",

    "clients": {

      "type": "local",

      "number": 5

    },

    "rounds": [{

        "label" : "open",

        "txNumber" : [1000, 1000, 1000],

        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 50}}, {"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 150}}],

        "arguments": { "money": 10000 },

        "callback" : "benchmark/simple/open.js"

      },

      {

        "label" : "query",

        "txNumber" : [5000, 5000],

        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 200}}],

        "callback" : "benchmark/simple/query.js"

      }]

  },

  "monitor": {

    "type": ["docker", "process"],

    "docker":{

      "name": ["all"]

    },

    "process": [

      {

        "command" : "node",

        "arguments" : "local-client.js",

        "multiOutput" : "avg"

      }

    ],

    "interval": 1

  }

}


blockchain定义被测试区块链类型,并给出具体配置文件;

command定义了测试开始和结束时的命令;

test定义了测试相关的信息;

monitor定义了对资源对象如何进行监控。

Master

master实现的测试流包含三个阶段:

准备阶段:创建和初始化区块链,部署智能合约,并启动监控;

测试阶段:启动一个循环测试,测试任务会被安排给client去执行,client会返回性能测试数据;

报告阶段:分析测试数据,并生成HTML格式的报告。
Order

Client

Local client

由于Node.js天生时单线程的,因此会fork多个local client子进程来充分利用多核,提高测试效率。每个子进程都运行有一个区块链客户端。

Zookeeper client

多个zoookeeper client是独立启动的,启动后会注册自己并待命测试任务,测试后会创建一个包含结果数据的znode。也是会fork多个子进程(local client)。

用户自定义的测试模块

其中定义有生成和提交交易的function(返回值都是promise):

  • init:会在每轮测试前被client调用;

  • run:定义如何执行交易。client会根据workload定义循环调用它;

  • end:每轮测试后被调用,通常定义一些清理工作。


撸一下源码

还是基于上边的架构图,这次从上往下捋。

首先是Benchmark Layer

从测试命令入手,以smallbank为例:

node benchmark/smallbank/main.js


测试用例位于benchmark/目录下。由测试人员编写,并配置到-c指定的配置文件的test.rounds[.callback]中。

在main.js中主要是加载两个配置文件,然后调用src/comm/bench-flow.js的run方法,将两个配置文件传进去:

const framework = require('../../src/comm/bench-flow.js');

framework.run(absConfigFile, absNetworkFile);

bench-flow.js可以认为是测试引擎,run方法定义了完整的测试流程。

下边是接口和核心层

接口即Blockchain NBIs,位于src/comm/blockchain-interface.js中的,其中的BlockchainInterface定义了区块链的基本操作:

【转载】区块链性能测试工具caliper

为了生成测试报告,首先必须有监控来收集数据,主要侧重于对Docker和Process的监控,代码文件包括monitor-interface.js和monitor-docker.js、monitor-process.js。从名字可以看出是接口和两个具体实现,看一下接口定义了些啥:

【转载】区块链性能测试工具caliper

除了启停操作,主要侧重于对CPU、内存和网络的监控。

数据统计和报告生成功能位于src/comm/report.js。

适配层

caliper支持对Fabric、Sawtooth等的测试,看架构图上还想对以太坊进行支持,但是目前还没有。

具体的适配代码分别位于src/fabric、src/sawtooth、src/iroha等目录下,比如fabric.js中的Fabric类就继承自BlockchainInterface,实现了初始化、安装/执行智能合约等功能。

这些功能内部自然就是调用了fabric-client,所以测试前需要先进行安装:

npm install grpc@1.10.1 fabric-ca-client fabric-client


以上是关于转载区块链性能测试工具caliper的主要内容,如果未能解决你的问题,请参考以下文章

华为推出首个区块链性能测试工具Caliper(卡钳)

华为:首款区块链测试工具Project Caliper上线!

Fabric网络性能测试-----caliper

[海豚区块链] 华为推出区块链性能测试工具 人民网上线“人民创投区块链”微信公众号

区块早报华为推出首个区块链性能测试工具 人民大学启动大数据区块链与监管科技实验室

发布 | 可信区块链性能基准测试工具