写点什么

Hyperledger Caliper:测量区块链性能的工具

  • 2018-10-20
  • 本文字数:5324 字

    阅读完需:约 17 分钟

导读:作者 Ashish,喜欢研究区块链、密码学和计算机网络。这次他给我们介绍了测量区块链性能的工具:Hyperleder Caliper。Caliper 项目最初于 2017 年 5 月启动,全球信息与通信技术公司华为积极参与了该项目的设计和开发。Hyperledger Caliper 是一个区块链基准测试工具,让项目可以不间断地跟踪不同区块链实现的性能特性。Hyperledger Caliper 初始版本的重点是每秒事务数(TPS)、延迟和资源利用率。

区块链技术日益受到人们的关注,但是,你在为业务问题创建解决方案之前,却无法测试各种可用区块链平台的性能。为了解决这一痛点,Hyperledger 社区提供了一个名为“Hyperledger Caliper”的工具,可用来测试区块链平台的性能。

Hyperledger Caliper

Caliper 是一个区块链性能基准测试框架,它允许用户使用预定义的用例测试不同的区块链解决方案,并获得一组性能测试结果。

目前支持的性能指标:

  • 成功率
  • 事务吞吐量
  • 事务延迟(最小值、最大值、平均值、百分比)
  • 资源消耗(CPU、内存、网络 IO 等)

架构

适配层

使用适配层将现有的区块链系统集成到 Caliper 框架中。每个适配器通过使用相应的区块链的原生 SDK 或 RESTful API 来实现区块链的 Caliper NBI。

接口和核心层

接口和核心层实现核心功能,并为上行应用程序(up-applications)提供了北向接口,共四种 NBI:

  1. 区块链操作接口:包含在后端区块链上部署智能合约、调用合约、从分类账查询状态等操作。
  2. 资源监控器:包含启动、停止监控器和获取后端区块链系统的资源消耗状态的操作,包括 CPU、内存、网络 IO 等。目前提供了两种监控器,一种是监控本地和远程 docker 容器,另一种是监控本地进程。
  3. 性能分析器:包含读取预定义性能统计数据(包括 TPS、延迟、成功率等)和打印基准测试结果的操作。在调用区块链 NBI 时记录关键指标,例如事务的创建时间和提交时间、事务结果等。
  4. 报告生成器:包含用于生成 HTML 格式测试报告的操作。

应用层

应用层包含针对典型区块链场景实现的测试。每个测试都有一个配置文件,用于定义后端区块链网络和测试参数。

内置了一个默认基准测试引擎,用来帮助开发人员理解框架,并快速实现自己的测试。开发人员可以在没有框架的情况下直接使用 NBI 来实现他们的测试。

基准测试引擎:

Master:

Master 实现了一个包含三个阶段的默认测试流:

  1. 准备阶段:在此阶段,Master 使用区块链配置文件创建并初始化内部区块链对象,按照配置中指定的方式部署智能合约,并启动监控器对象来监控后端区块链系统的资源消耗。
  2. 测试阶段: Master 根据基准测试配置文件启动一个循环测试、来执行测试。任务将根据定义的工作负载生成并分配给 Client。将存储客户的性能统计返回,以供以后分析。
  3. 报告阶段:分析每一轮测试的所有客户端统计数据,并自动生成 HTML 格式报告。

Client:

Local Client:

在这种模式下,Master 使用 Node.js 集群模块分叉多个 Local Client 来进行实际的测试工作。

Zookeeper Client:

在这种模式下,多个 Zookeeper Client 独立启动。Zookeeper 客户端将在启动后注册并监控测试任务。测试之后,将创建一个包含性能统计结果的 znode。

Caliper 示例报表格式:

配置文件:

使用两种配置文件。一个是基准测试配置文件,它定义了类似工作负载的基准测试。

另一个是区块链配置文件,它指定了有助与 SUT 交互的必要信息。

下面是一个基准测试配置文件示例:

先决条件:

  • 确保已经安装下列工具:
    • NodeJS 8.X
    • node-gyp
    • Docker
    • Docker-compose

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

要在本地安装依赖项,请在 caliper 文件夹中运行 npm install。

安装区块链 SDK:

Fabic

在根文件夹中运行:

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

Sawtooth

安装依赖项:

npm install protocol-buffers

使用存储库安装 sawtooth JavaScript SDK。

run npm install sawtooth-sdk in the root folder

在根文件夹中运行:

npm install sawtooth-sdk

Iroha

安装 Iroha 库

在 Caliper 的根文件夹中运行:

npm install -no-save iroha-lib@0.1.7

Composer

安装依赖项:

更新主 package.json 文件,包含所需的 Composer 和 Fabic 模块,然后运行 npm install 来安装。

运行基准测试:

在基准测试文件夹中,可以找到所有预定义的基准测试。

要开始基准测试,只需在根文件夹中运行它即可:

node benchmark/simple/main.js -c yourconfig.json -n yournetwork.json

参数 -c:指定基准测试的配置文件。如果不指定此参数,则 config.json 将用作默认值。

参数 -n:指定被测区块链网络的配置文件。如果不指定此参数,则在基准测试配置文件中指定文件地址。

注意:

  • 你还可以使用 npm 脚本来运行基准测试。

npm 运行列表:

复制代码
> caliper@0.1.0 list /home/hurf/caliper
> node ./scripts/list.js

可用基准测试:

复制代码
drm
simple

使用特定配置文件来运行基准测试:

npm test — — simple -c ./benchmark/simple/config.json -n ./benchmark/simple/fabric.json

复制代码
> caliper@0.1.0 test /home/hurf/caliper
> node ./scripts/test.js "simple" "-c" "./benchmark/simple/config.json" "-n" "./benchmark/simple/fabric.json"
......

使用去中心化 Client 进行基准测试:

1. 启动 ZooKeeper 服务;

2. 通过运行节点./src/comm/client/zoo-client.js zookeeper-server 或 npm run startclient — — zookeeper-server 分别在目标计算机上启动 Client。

例如:

$ npm run startclient — 10.229.42.159:2181

复制代码
> caliper@0.1.0 startclient /home/hurf/caliper
> node ./src/comm/client/zoo-client.js "10.229.42.159:2181"
Connected to ZooKeeper
Created client node:/caliper/clients/client_1514532063571_0000000006
Created receiving queue at:/caliper/client_1514532063571_0000000006_in
Created sending queue at:/caliper/client_1514532063571_0000000006_out
Waiting for messages at:/caliper/client_1514532063571_0000000006_in......

3. 将配置文件中的 Client 类型设置修改为 zookeeper。

例如: 

复制代码
"clients": {
"type": "zookeeper",
"zoo" : {
"server": "10.229.42.159:2181",
"clientsPerHost": 5
}
}

4. 像往常一样,在任何机器上启动基准测试。

注意:

  • Zookeeper 用于注册 Client 和交换信息。启动的 Client 将在 /caliper/clients/ 下添加新的 znode。基准测试检查目录以了解有多少 Client,并根据工作负载为每个 Client 分配任务。
  • Client 之间没有自动时间同步。你应该手动同步目标计算机之间的时间,例如使用“ntpdate”命令。
  • 区块链配置文件必须存在于运行 Client 的计算机上,且文件的相对路径(相对于 caliper 文件夹)必须相同。配置中的所有引用文件也必须存在。

编写你自己的基准测试

Caliper 提供了一组 nodejs NBI(北向接口),供应用程序与后端区块链系统交互。查看src/comm/blockchain.js来了解 NBI。多重适配器实现将 NBI 转换为不同的区块链协议。因此,开发人员可以编写一次基准测试,并在不同的区块链系统中运行它。

一般来说,要编写一个新的 caliper 基准测试,你需要:

  • 为想要测试的系统编写智能合约
  • 使用 caliper NBI 编写一个测试流。Caliper 提供了一个默认的基准测试引擎,它可以插拔并可配置,可以轻松地集成新的测试。有关更多的详细信息,请参阅基准测试引擎。
  • 编写配置文件来定义后端网络和基准测试参数。

参考: https://github.com/hyperledger/caliper

原文链接: https://medium.com/@kotsbtechcdac/tool-to-measure-blockchain-performance-hyperledger-caliper-f192adfba52

感谢杜小芳对本文的审校。

2018-10-20 15:5013819
用户头像

发布了 376 篇内容, 共 200.6 次阅读, 收获喜欢 949 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

流媒体:依托于声网的连麦解决方案

声网

音视频 流媒体

GraphQL 快速入门【1】简介

码语者

Rest graphql

坍缩的企业

涛哥 数字产品和业务架构

企业架构

【网络安全】Spring框架漏洞总结(一)

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

区块链技术解决信任问题

CECBC

联想新IT引擎引领智能化变革,助力“中国力量”更加强大

科技范儿

【SoCC2018论文】DAGOR:微信「大规模微服务过载控制系统」

OpenIM

北鲲云超算平台凝聚技术实力,赋能高算力需求行业加速发展

北鲲云

测试九剑之-破箭式

薛飞

自动化测试 测试管理

MySQL五个常见的高可用方案

hanaper

网卡修改网速和buffer

耳东@Erdong

9月日更 网卡

Elasticsearch 原理解析(介绍)

ZzC🍖

搜索引擎 elasticsearch

上线半天下载量破100W!美团大佬的Java性能调优实战手册,超详细

Java 编程 面试 性能调优

低代码时代来临,织信Informat携手低码星球探讨「企业数字化转型之路」

优秀

低代码

Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—4)

不脱发的程序猿

Python qt GUI设计 PyQt5

Python——内置函数----让你偷懒的工具

在即

9月日更

如何给技术部员工做考核?

石云升

团队管理 管理 引航计划 内容合集 9月日更

如何从数据到资产

奔向架构师

数据治理 9月日更

自定义aop实现Cacheable注解(零拷贝), CacheItemGet,CacheMapGet,CacheMapPut

张音乐

Java 缓存 注解 9月日更

ebay支付账务系统架构解析之“读”一无二

贾奇 (Jacky)

支付系统 CQRS 读写分离

【得物技术】浅谈重复http请求的取消

得物技术

方法 HTTP 场景 crud 请求

kube-ovn 组网结构

Geek_f24c45

k8s Kube-OVN cni

数字化助力能源高效利用

CECBC

用诸葛孔明的智慧,读懂新型数据中心的“四新”机遇与产业逻辑

脑极体

大厂敲门砖!P9技术官级别的顶级并发编程宝典,献给想去大厂的你

Java 编程 面试 程序人生 p9

从零到MySQL架构师学习内容整理

hanaper

京东云金秋上云特惠进行中!扫码参与活动

京东科技开发者

云计算 云主机 大促

面对面小程序开源

OpenIM

分分合合分分,谷歌医疗走向大败退

脑极体

spine动画文件转dragonbones骨骼文件

风翱

9月日更 dragonbones

java拼团小程序源码(毕设)

清风

毕业设计

Hyperledger Caliper:测量区块链性能的工具_语言 & 开发_Ashish_InfoQ精选文章