Fabirc性能测试工具之Caliper介绍

Caliper介绍

Caliper是区块链性能测试框架,用户可以在定义好测试集的情况下针对自己的区块链网络进行性能测试,获取一系列的测试结果并生成测试报告。

当前支持的区块链解决方案

当前支持的性能指标

  • 交易成功率
  • 交易吞吐量TPS
  • 交易延迟
  • 资源消耗(CPU/内存/网络IO)

架构

参见 Architecture introduction.

image.png

Adaptation Layer 适配器层

Adaptation Layer 将现有的区块链系统集成到Caliper框架中来,每一个适配器都通过相应的区块链的SDK或者RESTful API实现了对应的'Caliper Blockchain NBIs'

Interface&Core Layer 接口和核心层

Interface&Core Layer 实现了核心功能并提供了北向接口,包括了四种NBIs:

  • 区块链操作接口:包括部署、调用智能合约,查询账本信息等。
  • 资源监控:包括对监控的启停、获取后台区块链系统的资源消耗状态,包括CPU、内存、网络IO等等。目前有提供的有两种监控,一种是监控本地和远程的docker镜像,另一种是监控本地进程。
  • 性能分析器::包括读取预定义的性能统计定义(包括TPS、延迟、成功率等)并打印出结果。执行交易时将会记录关键指标,比如创建时间、提交时间、交易结果等。
  • 报告生成器: 生成HTML格式的测试报告。

Benchmark Engine 基准引擎

image.png

Configuration File 配置文件

主要有两种配置文件,一种是测试基准配置文件,一种是区块链网络拓扑配置文件。
示例:

{
  "blockchain": {
    "type": "fabric",
    "config": "./fabric.json"
  },
  "command" : {
    "start": "docker-compose -f ../../network/fabric/simplenetwork/docker-compose.yaml up -d",
    "end" : "docker-compose -f ../../network/fabric/simplenetwork/docker-compose.yaml down;docker rm $(docker ps -aq)"
  },
  "test": {
    "name": "simple",
    "description" : "This is an example benchmark for caliper",
    "clients": {
      "type": "local",
      "number": 5
    },
    "rounds": [{
        "label" : "open",
        "txNumber" : [5000, 5000, 5000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 200}}, {"type": "fixed-rate", "opts": {"tps" : 300}}],
        "arguments": {  "money": 10000 },
        "callback" : "benchmark/simple/open.js"
      },
      {
        "label" : "query",
        "txNumber" : [5000, 5000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 300}}, {"type": "fixed-rate", "opts": {"tps" : 400}}],
        "callback" : "benchmark/simple/query.js"
      }]
  },
  "monitor": {
    "type": ["docker", "process"],
    "docker":{
      "name": ["peer0.org1.example.com", "http://192.168.1.100:2375/orderer.example.com"]
    },
    "process": [
      {
        "command" : "node",
        "arguments" : "local-client.js",
        "multiOutput" : "avg"
      }
    ],
    "interval": 1
  }
}
  • blockchain - 定义了使用什么区块链网络,并且指明使用的配置文件。
  • command - 定义了在何时执行的操作。
    start: 测试开始时执行
    end: 测试完成后执行
  • test - 定义测试元数据。
    name&description: 测试名称和简介,生成报告时使用。
    clients:定义测试客户端类型,目前有'local' 和'zookeeper'两种。'local' 模式采用本地进程来模拟客户端请求。'zookeeper'模式则客户端会分布在不同的机器上,通过zookeeper的协调来获取测试任务。
    hint:提示。主要用在报告生成中,表示调用的是什么链码。
    txNumber:每一轮的测试交易次数。
    txDuration:每一轮的测试时间。
    rateControl:客户端请求的速率,未定义则默认为1TPS。
    trim:修剪测试统计结果,用于消除启动和停止时测试的不准确性。比如trim设置为30,如果是按次数设置交易,则测试周期的前后30个交易数据不会被统计。如果是按照时间设置,则测试周期的前后30s的数据不会被统计。
    arguments:用户定义的参数,直接透传。
    callback:定义本轮测试中所调用的模块。
  • monitor - 定义监控的是本地进程还是docker镜像。

Master

定义了三个默认的测试阶段

  • 准备阶段 - 根据区块链配置文件生成创建并实例化一个区块链,安装智能合约并启动监控器。
  • 测试阶段 - master根据基准测试配置文件启动循环测试。client会获取测试任务开始执行测试,并存储测试结果以备后续分析。
  • 报告阶段 - 每一轮测试结果会收集起来进行分析并自动生成HTML格式的测试报告。报告样式如下:


    image.png

Clients

  • Local clients 会通过Node.js 启动多个进程来进行测试,由于node.js是单进程的,测试会启动多个子进程来工作,每个子进程相当于一个client。负载将会均匀的划分到每个client中。
  • Zookeeper clients 多个zookeeper clients将会独立启动,并且监听测试信息,测试完毕以后会创建一个znode来记录测试结果。每一个zookeeper client也会本地创建多个字进程来执行实际的测试工作。具体可以参考Zookeper Client Design.

User defined test module

定义了测试函数和以及提交交易,用户可以在这里自定义测试逻辑。
需要定义三个函数:

  • init - 在客户端的每一轮测试之前调用,获取区块链数据以及用户的配置信息,用户也可以定义一些其他的初始化信息。
  • run - 使用API创建和提交实际的交易信息。客户端会周期性的调用此函数,建议一次只调用一个交易,采用异步模式。如果一次调用多个交易的话,实际的测试测试负载情况会跟配置文件里定义的不同。
  • end - 会在每轮测试完成之后调用。用户可以自己定义一些清理工作。

环境准备

  • NodeJS 8.X
  • node-gyp
  • Docker
  • Docker-compose
git clone https://github.com/hyperledger/caliper.git
cd caliper
npm install
npm install grpc@1.10.1 fabric-ca-client@1.1.0 fabric-client@1.1.0

执行测试

node ./benchmark/simple/main.js -c ./config.json -n ./fabric.json

-c : 基准测试配置文件, 如果不设置,默认使用 config.json .
-n : 账本网络的配置文件. 如果不设置, 默认使用 config.json中设置的 blockchain config值.
注:以上都是基于fabric v1.1版本
跑一个自带的2org4peer的测试例子:

node benchmark/smallbank/main.js

成功生成报告则表明环境OK。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容