文章目录

目录

文章目录

前言

一、安装npm

二、创建Fabric测试网

三、Caliper创建工作区

四、构建网络配置文件

五、构建测试工作负载模块

六、构建基准测试配置文件

七、运行Caliper基准测试

总结

参考博客


前言

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

本人记录自己使用Caliper来测试Fabric2.3的性能。

本机环境:Centos7.9,Fabric2.3.3


一、安装npm

我用的是nvm来安装npm,因为nvm是node.js不同版本的管理器,允许通过命令来快速安装和使用不同版本的node。

1.查看git是否安装

# 查看git版本
git --version
# 如果没有安装git 执行 yum install git

2.安装Node.js版本管理工具nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

或者

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

运行上述任何一个命令都会下载一个脚本并且运行这个脚本,这个脚本是将nvm存储库克隆到~/.nvm,并且会将以下代码段中的源代码添加到配置文件(~/.bashrc)

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

可以查看~/.bashrc中写了什么

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

3.设置nvm自动运行

echo "source ~/.nvm/nvm.sh" >> ~/.bashrc
# 更新配置
source ~/.bashrc

4.检验是否安装

command -v nvm

5.使用nvm

# 查看node.js版本
nvm ls-remote
# 安装最新node.js版本
nvm install node
# 切换版本
nvm use x.x
# 查看更多指令
nvm --help

6.查看node版本

node -v
npm -v

二、创建Fabric测试网

# 进入自己的本地的test-network
cd /opt/fabric/fabric-samples/test-network
# 启动网络、创建通道、安装链码
./network.sh up createChannel
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

三、Caliper创建工作区

fabric-samples同级的目录下创建一个名为caliper-workspace的文件夹,然后在caliper-workspace文件夹内创建三个文件夹,分别命名为networksbenchmarksworkload

# 进入自己的fabric-samples同级目录下
cd /opt/fabric
# 创建工作区
mkdir caliper-workspace
cd caliper-workspace
mkdir networks && mkdir benchmarks && mkdir workload
# 或者这个指令 mkdir -p caliper-workspace/{networks,benchmarks,workload}

Caliper的安装和使用是基于本地npm来安装。在caliper-workspace目录中,使用以下终端命令初始化项目,可以发现文件夹内多了一个package.json。

npm init -y

使用以下终端命令安装Caliper CLI,执行完后,会将依赖下载到当前目录下的node_modules文件下。

# 版本要匹配,0.4对应fabric2.x,0.3对应fabric1.4
npm install --only=prod @hyperledger/caliper-cli@0.4.2

使用以下终端命令绑定 SDK:

npx caliper bind --caliper-bind-sut fabric:2.2

四、构建网络配置文件

网络配置文件是 Caliper 使用者可以在 Hyperledger Fabric 网络上提交和评估交易所需的文件。该文件可以是 YAML 或 JSON 格式,这里显示的是 YAML 格式。

networks文件夹下创建一个名为networkConfig.yaml的模板文件

cd networks
touch networkConfig.yaml

其模板内容如下:

name: Caliper test
version: "2.0.0"caliper:blockchain: fabricchannels:organizations:

name:配置的名称,本文中为“Caliper test”

version:正在使用的配置文件的版本,“2.0.0”确保使用新的结构连接器

caliper:向 Caliper 指示目标 SUT,以fabric网络为目标。

channels:描述 Hyperledger Fabric 通道和部署在这些通道上的智能合约以进行基准测试。需要提供通道名称和智能合约名称,因为fabric可以存在多个通道。

organizations:Hyperledger Fabric 组织的列表,其中包含与每个组织关联的身份和连接配置文件。在这里,我们需要添加mspid的信息如Org1MSP,我们还需要提供一个名称、关联的连接配置文件和至少1个身份,并且仔细查看并确保证书、私钥和连接配置文件路径是否正确。

填充模板,完整内容如下:

name: Calier test
version: "2.0.0"caliper:blockchain: fabricchannels:- channelName: mychannelcontracts:- id: basicorganizations:- mspid: Org1MSPidentities:certificates:- name: 'User1@org1.example.com'clientPrivateKey:path: '/opt/fabric/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk'clientSignedCert:path: '/opt/fabric/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem'connectionProfile:path: '/opt/fabric/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/connection-org1.yaml'discover: true

五、构建测试工作负载模块

workload文件夹中,创建一个名为readAsset.js的模板文件

cd workload
touch readAsset.js

其内容如下:

'use strict';const { WorkloadModuleBase } = require('@hyperledger/caliper-core');class MyWorkload extends WorkloadModuleBase {constructor() {super();}async initializeWorkloadModule(workerIndex, totalWorkers, roundIndex, roundArguments, sutAdapter, sutContext) {await super.initializeWorkloadModule(workerIndex, totalWorkers, roundIndex, roundArguments, sutAdapter, sutContext);}async submitTransaction() {// NOOP}async cleanupWorkloadModule() {// NOOP}
}function createWorkloadModule() {return new MyWorkload();
}module.exports.createWorkloadModule = createWorkloadModule;

工作负载模块在基准测试期间与部署的智能合约进行交互。主要有三个内容:

① initializeWorkloadModule - 用于初始化基本测试所需要的任何项目

② submitTransaction - 用于在基准的监控阶段与智能合约进行交互

③ createWorkloadModule - 用于在基准测试完成后进行清理

完整内容如下:

'use strict';const { WorkloadModuleBase } = require('@hyperledger/caliper-core');class MyWorkload extends WorkloadModuleBase {constructor() {super();}async initializeWorkloadModule(workerIndex, totalWorkers, roundIndex, roundArguments, sutAdapter, sutContext) {await super.initializeWorkloadModule(workerIndex, totalWorkers, roundIndex, roundArguments, sutAdapter, sutContext);for (let i=0; i<this.roundArguments.assets; i++) {const assetID = `${this.workerIndex}_${i}`;console.log(`Worker ${this.workerIndex}: Creating asset ${assetID}`);const request = {contractId: this.roundArguments.contractId,contractFunction: 'CreateAsset',invokerIdentity: 'User1@org1.example.com',contractArguments: [assetID,'blue','20','penguin','500'],readOnly: false};await this.sutAdapter.sendRequests(request);}}async submitTransaction() {const randomId = Math.floor(Math.random()*this.roundArguments.assets);const myArgs = {contractId: this.roundArguments.contractId,contractFunction: 'ReadAsset',invokerIdentity: 'User1@org1.example.com',contractArguments: [`${this.workerIndex}_${randomId}`],readOnly: true};await this.sutAdapter.sendRequests(myArgs);}async cleanupWorkloadModule() {for (let i=0; i<this.roundArguments.assets; i++) {const assetID = `${this.workerIndex}_${i}`;console.log(`Worker ${this.workerIndex}: Deleting asset ${assetID}`);const request = {contractId: this.roundArguments.contractId,contractFunction: 'DeleteAsset',invokerIdentity: 'User1@org1.example.com',contractArguments: [assetID],readOnly: false};await this.sutAdapter.sendRequests(request);}}
}function createWorkloadModule() {return new MyWorkload();
}module.exports.createWorkloadModule = createWorkloadModule;

六、构建基准测试配置文件

benchmarks文件夹下创建一个名为myAssetBenchmark.yaml

cd benchmarks
touch myAssetBenchmark.yaml

基准配置文件定义基准轮次并引用定义的工作负载模块。它将指定生成负载时使用的测试工作人员的数量、测试轮次的数量、每轮的持续时间、每轮期间应用于事务负载的速率控制以及与监视器相关的选项。

完整内容如下:

test:name: basic-contract-benchmarkdescription: test benchmarkworkers:type: localnumber: 2rounds:- label: readAssetdescription: Read asset benchmarktxDuration: 60rateControl: type: fixed-loadopts:transactionLoad: 50startingTps: 100workload:module: workload/readAsset.jsarguments:assets: 10contractId: basic
monitors:resource:- module: dockeroptions:interval: 5 containers:- all

七、运行Caliper基准测试

npx caliper launch manager --caliper-workspace ./ --caliper-networkconfig networks/networkConfig.yaml --caliper-benchconfig benchmarks/myAssetBenchmark.yaml --caliper-flow-only-test --caliper-fabric-gateway-enabled

总结

Caliper还有很多详细内容我没有叙述,可以查看官方文档。

 官方配置详解:https://hyperledger.github.io/caliper/vNext/fabric-tutorial/tutorials-fabric-existing/


参考博客

CentOS7下安装nvm_李胜步的博客-CSDN博客_centos7 安装nvm

Fabric 2.2.0上搭建Hyperledger caliper进行性能测试_Famidlistimo的博客-CSDN博客

Centos7 安装Caliper 测试 Fabric2.3相关推荐

  1. Centos7安装RocketMQ及配置测试

    环境 Centos7 RocketMQ 3.2.6 安装位置 /usr/local/alibaba-rockermq 外网ip 182.254.145.66 内网ip 10.105.23.114 安装 ...

  2. Centos7安装ab(Apache Benchmark)测试工具及使用

    Centos7安装ab(Apache Benchmark)测试工具及使用 Apache Benchmark简称AB 一.安装 yum install -y httpd-tools 二.创建Post请求 ...

  3. centos7 nginx配置php7,centos7安装并配置nginx+php,centos7nginx

    centos7安装并配置nginx+php,centos7nginx centos7安装并配置nginx+php 安装nginx yum install nginx 设置nginx开启起动 syste ...

  4. centos7 安装mysql php_Centos7安装mysql与php的方法

    本文主要和大家分享Centos7安装mysql与php的方法,希望能帮助到大家. 相关mysql视频教程推荐:<mysql教程> 官网下载安装mysql-server 依次使用下面三个命令 ...

  5. Centos7安装Apache和PHP,包含配置过程

    本文主要讲的是本人在迁移php网站相关软件的安装和配置过程,以及一下问题的解决步骤.通过阅读本文能够知道如何迁移php网站,如何配置httpd服务使得它能够解析php文件以及如何解决迁移过程中的异常问 ...

  6. linux tomcat7怎么安装,centos7安装Tomcat7,

    centos7安装Tomcat7, 一.环境 centos7 linux apache-tomcat-7.0.92.tar.gz:链接:https://pan.baidu.com/s/1-clhIjD ...

  7. python3.6.5安装教程-Centos7 安装Python3.6.5

    一.centos7 安装 Python3.6.5教程 1.在安装Python之前,需要先安装一些后面遇到的依赖问题(如果有依赖问题,按照提示安装): yum -y install zlib-devel ...

  8. python3.6.5安装教程-Centos7 安装Python3.6.

    一.centos7 安装 Python3.6.5教程 1.在安装Python之前,需要先安装一些后面遇到的依赖问题(如果有依赖问题,按照提示安装): yum -y install zlib-devel ...

  9. centos安装mysql5.7.19_Linux下Centos7安装Mysql5.7.19的详细教程

    1.下载mysql 2.选择源码包,通用版点击下载 直接下载就可以了,不用登录 3.解压编译 tar -zxvf mysql-5.7.19.tar.gz cd mysql-5.7.19.tar.gz ...

最新文章

  1. 凡夫怎么可能揣度圣者的境界
  2. 找出现实中符合这三种模式的互联网产品
  3. python中backward_pytorch的梯度计算以及backward方法详解
  4. 余承东:华为6G研发还需10年;库克“iPhone 11势头强劲”;TensorFlow 2.0正式版发布​ | 极客头条...
  5. Android测试总结
  6. 菜鸟教程php在线编程器,菜鸟教程在线工具
  7. Windows系统常用设置
  8. 基于SpringBoot+Vue前后端分离的在线教育平台项目
  9. 名帖155 王献之 行书《行书帖选》
  10. 52道常见Python面试题,你都能答对吗?
  11. java经纬度工具类
  12. Bugzilla 使用教程
  13. 类模板中的友元,友元类
  14. Debian之安装完成后找不到命令解决办法
  15. 今天的码农女孩做了关于svg画图和canvas画图 2022/1/18
  16. 浅谈数据清洗的一些要素
  17. 美国2020年攻破艾滋病_2020年美国和欧洲的游戏状况
  18. 微信小程序input框输入值校验
  19. iOS 面试题--转自唐巧
  20. 校园英语调频台在江西陶瓷工艺美术职业技术学院的应用

热门文章

  1. 【Python】抓取基金数据,这简直太爱了
  2. 2021年应届生的就业形势怎么样呢?
  3. 基于荔枝派Lichee Nano(全志f1c100s)的kernel移植(二)
  4. springmvc如何拦截html页面,springmvc登录拦截jsp页面
  5. Motoman机器人离线编程——Visio Studio环境配置
  6. 【AD封装】三极管,MOS管,部分LDO(TO,SOT系列)(带3D)
  7. Python写图片格式批量处理工具!你还一张一张转格式吗?
  8. 【三维重建】相机标定:张正友标定法
  9. [See How]全栈Node TS框架TSRPC实践教程(一)
  10. 跨平台应用开发进阶(四十六)webview方式嵌套H5应用加载慢解决方案