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

这篇具有很好参考价值的文章主要介绍了Fabric网络性能测试-----caliper。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

Hyperledger Caliper是Fabric的一个性能测试框架,本质上是通过Node SDK,不断向Fabric网络发送请求,获得相应,从而计算Fabric网络的性能。性能测试实验是基于已经存在并运行的Fabric网络的,因此在使用caliper模块做测试之前,需要搭建好网络。

下面以caliper提供的官网教程为例,讲解测试过程。

一、Fabric网络启动


1、环境搭建

网络启动之前,需要进行环境搭建。本实验环境配置如下:

系统:Ubuntu 18.04
go:1.15
node.js: v16.16.0
npm: 8.11.0
docker: 20.10.17
docker-compose:1.26.2

go 安装

下载解压

sudo wget -P /usr/local https://studygolang.com/dl/golang/go1.15.linux-amd64.tar.gz #下载
cd /usr/local #转换目录
sudo tar -zxvf go1.15.linux-amd64.tar.gz #解压

添加环境变量

sudo vim /etc/profile  #环境变量配置文件

将以下内容复制到profile文件中,按I插入,插入完成后按ESC退出插入,输出:wq!保存退出:

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/go
# 开启go mod,并换源
export GO111MODULE=on
export GOPROXY=https://mirrors.aliyun.com/goproxy/ 

更新环境变量

source /etc/profile
2、启动网络

首先按照下面命令启动Fabric官方测试网络

# Pull down the 2.2.5 hyperledger fabric images/binaries and the fabric-samples checked out at tag v2.2.5
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.2.5 1.5.2
cd fabric-samples
# Switch to a release-2.2 git branch that has a fix for asset-transfer-basic chaincode
git checkout c3a0e814f1609eda2b2f4403b38e33b8b4a16675
# Start up the test-network
cd test-network/
./network.sh up createChannel
# 官方教程使用的是javascript代码,切换go也行,测试过程与链码使用的语言没有关系
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-javascript -ccl javascript

二、创建caliper工作区


在与fabric-samples同级的目录下,创建caliper工作区,命名为caliper-workspace

mkdir caliper-workspace

在caliper-workspace目录下创建三个名为networks、benchmarks和workload的文件夹。这三个文件夹分别用于存放网络配置文件、基准测试配置文件、工作负载文件网络配置文件记录了Fabric网络连接配置信息,工作负载中的模块会使用该文件提供的信息来与Fabric网络交互;基准测试配置文件定义了测试参数;工作负载文件则是具体的测试代码实现。

cd caliper-workspace
mkdir networks benchmarks workload
1、构建网络配置文件

进入network目录,创建一个名为networkConfig.yaml的文件

cd networks
touch networkConfig.yaml

将以下内容写进networkConfig.yaml

# 该文件本质上是一个网络连接配置,SDK使用该文件连接到Fabric网络
name: Calier test
version: "2.0.0"

caliper:
  blockchain: fabric

channels:
  - channelName: mychannel
    contracts:
    - id: basic

organizations:
  - mspid: Org1MSP
    identities:
      certificates:
      - name: 'User1'
        clientPrivateKey:
          path: '../fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk'
        clientSignedCert:
          path: '../fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem'
    connectionProfile:
      path: '../fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/connection-org1.yaml'
      discover: true
2、构建工作负载模块

工作负载模块负责与链码交互,完成性能测试。该模块继承来自caliper-core模块的Caliper类——WorkloadModuleBase. 工作负载模块重写了三个方法:

  • initializeWorkloadModule 该方法用来初始化测试需要用到的一些数据。
  • submitTransaction 该方法用来与链码交互,在监控测试期间。
  • cleanupWorkloadModule 该方法用来清理测试后的环境,方便下次测试。

进入workload目录,创建一个名为readAsset.js的文件

cd workload
touch readAsset.js

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);

        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',
                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',
            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',
                contractArguments: [assetID],
                readOnly: false
            };

            await this.sutAdapter.sendRequests(request);
        }
    }
}

function createWorkloadModule() {
    return new MyWorkload();
}

module.exports.createWorkloadModule = createWorkloadModule;
  1. 构建基准测试文件

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

cd benchmarks
touch myAssetBenchmark.yaml

myAssetBenchmark.yaml内容如下:

test:
    # 基准测试的名称
    name: basic-contract-benchmark
    # 基准测试详细描述
    description: test benchmark
    workers:
      # 指定用于执行工作负载的进程数
      number: 2
    # 描述每一个测试回合的设置
    rounds:
      # 测试标签,一般为测试链码的名称
      - label: readAsset
        description: Read asset benchmark
        # caliper提交交易的时间
        txDuration: 30
        # 提交交易的速度控制
        rateControl:
          # 速度控制类型,有fixed-rate、fixed-load等,解释可参见https://hyperledger.github.io/caliper/v0.5.0/rate-controllers/
          type: fixed-load
          opts:
            transactionLoad: 2
        workload:
          # 描述需要测试的工作负载文件路径
          module: workload/readAsset.js
          # 需要传递给工作负责文件的参数
          arguments:
            assets: 10
            contractId: basic

三、测试


安装依赖

npm install --only=prod @hyperledger/caliper-cli@0.5.0

绑定SDK

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

测试

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

在实际使用Caliper测试自己搭建的网络过程中,则需要更改相应的网络配置文件以及基准测试文件。因此明白两个配置文件各个字段的含义是关键。工作负载模块中最核心的是submitTransaction方法,重写该方法只需要更改发送请求的相关参数即可,包括:链码名称、函数名称、函数参数等。另外,仓库地址:https://github.com/hyperledger/caliper-benchmarks ;该项目中的代码可以参考,帮助重写工作负载模块,测试自己搭建的网络。文章来源地址https://www.toymoban.com/news/detail-406229.html

到了这里,关于Fabric网络性能测试-----caliper的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Fabric测试网络部署(2.2)

    fabric-github地址:https://github.com/hyperledger/fabric 示例网址:https://github.com/hyperledger/fabric-samples 合约地址:https://github.com/hyperledger/fabric-samples/blob/release-2.2/asset-transfer-basic/chaincode-java/src/main/java/org/hyperledger/fabric/samples/assettransfer/AssetTransfer.java java-sdk地址:https://github.com/hyperledger

    2024年01月25日
    浏览(28)
  • Fabric 搭建测试网络并部署智能合约

    1. 搭建网络: 详见博客 2. 对Test Network的创建和关闭 3. Starting a chaincode on the channel: 智能合约(Smart Contract): 包含管理区块链账本上assets的逻辑。 在Fabric上智能合约就是链码的形式存在. 当网络运行后,链码会被部署到网络中节点和通道上. 应用(Application): 由区块链系统的成员执行

    2024年02月03日
    浏览(34)
  • Hyperledger Fabric 安装部署及测试网络汇总

    入门 — hyperledger-fabricdocs master 文档 环境搭建大部分可参考下篇文章 搭建Hyperledger Fabric环境 的详细步骤,超级详细_FAFU_kyp的博客-CSDN博客 但要注意的是:文章中的go语言版本比较老,有可能会出问题,所以可以自行去官网查看最新版本在去改一下命令即可!(目前最新版本为

    2024年02月03日
    浏览(31)
  • Hyperledger Fabric测试网络的准备和基本使用

    相关安装 npm、node、git、docker、docker-compose。docker保证一直运行 2.安装Java、maven环境 https://blog.csdn.net/qq_41829594/article/details/122408706 https://www.oracle.com/java/technologies/downloads/ https://maven.apache.org/download.cgi 在/etc/profile配置环境变量,之后source文件使其生效,检查是否安装成功 3.安装

    2024年02月16日
    浏览(28)
  • Hyperledger Fabric测试网络运行官方Java链码[简约版]

    启动测试网络 network.sh的脚本语法是: network.sh mode [flag] 在java源码路径下 回到test-network路径下 使用peer CLI测试链码 设置环境变量 作为Org1操作peer CLI: 调用链码 初始化账本 查询账本 修改账本

    2024年02月16日
    浏览(35)
  • FISCO BCOS入门(九)使用Caliper进行压力测试

    Caliper是一个用于区块链性能测试和基准测试的工具,使用Caliper进行基准测试可以提供关于区块链系统性能的重要指标,本文章Caliper 测试工具通过调用 Helloorld 合约来进行区块链系统进行压力测试并设置交易数量txNumber=10,交易速率tps=1。 配置基本环境,安装nodejs,安装Docker

    2024年02月08日
    浏览(35)
  • fabric测试网络启动警告解决:Local fabric binaries and docker images are out of sync. This may cause problems.

    警告信息: Local fabric binaries and docker images are out of sync. This may cause problems. 原因:fabric二进制文件和镜像版本不一致。 本人fabric二进制文件版本:2.4.1 镜像版本:2.4.2 解决方案: 降低镜像版本为fabric二进制文件版本 1、首先将当前的所有fabric镜像删除 进入 test-network 目录下,

    2024年02月02日
    浏览(34)
  • Fabric 超级账本学习【2】Fabric2.4网络环境下部署自己编写的go语言链码并实例化测试(手把手教学,步骤超详细)

    搭建部署 Fabric2.4网络的具体教程可见我写的这篇博客: Fabric 超级账本学习【4】Ububtu环境下部署搭建 Hyperledger Fabric2.4 (2.X)区块链网络 1、前提是搭建好了Fabric 2.4(Fabric2.x)版本的区块链网络,并在以此环境下部署自己编写的链码,如下图先进入 test-network 文件夹目录下 2、

    2023年04月16日
    浏览(40)
  • FISCO BCOS 六、通过Caliper进行压力测试程序(及常见问题)

    目录 1. 环境要求 第一步. 配置基本环境(这里我使用的是Ubuntu20.04) 第二步. 安装NodeJS 第三步. 部署Docker 第四步. 安装Docker Compose 2. Caliper部署 第一步. 部署 第二步. 绑定 第三步. 快速体验FISCO BCOS基准测试 3.常见问题 问题1:dial unix /var/run/docker.sock: connect: permission denied​编辑

    2024年02月08日
    浏览(28)
  • 【FISCO-BCOS】十四、使用Caliper进行压力测试fisco-bcos

            前言:根据操作系统版本不同,部署环境不同,一些细节差别可能造成测试失败等问题,此文仅做参考,应以实际应用为主。         参考官方文档:压力测试指南 — FISCO BCOS v2.9.0 文档 部署Caliper的计算机需要有外网权限; 操作系统版本需要满足以下要求:Ub

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包