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

Posted XianHuaKuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ;该项目中的代码可以参考,帮助重写工作负载模块,测试自己搭建的网络。

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



华为推出首款区块链测试工具Project Caliper


嘻哈财经获悉,经过近一年悄咪咪的幕后工作后,华为这家市值达到75亿美元的科技巨头终于推出了一款旨在测试主要区块链性能工具

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

据了解,他们准备正式提交给Linux Foundation领导的超级账本(Hyperledger)区块链联盟。


该开源科技项目被称为"Project Caliper(卡钳项目)",目前已经可以为Hyperleger Fabric, Hylerledger Sawtooth和Hyperledger Iroha提供分析支持,预计会在今年年底加入更多区块链网络。


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


华为工程师Haojun Zhou负责了该项目绝大多数代码工作,他表示该区块链工具主要专注于分析技术,帮助开发人员和企业对他们的技术做出更自信的决策。Haojun Zhou说道:"我们认为,这是目前区块链领域里缺失的一块,所以希望帮助开发它。"


然而,考虑到区块链领域的竞争利益,这种工具的使用有多广泛,目前尚不清楚。


IBM和英特尔等其他贡献者所开辟的道路之后,就连
华为也在通过专利保护其他区块链工作。


 

华为区块链布局之路,生态版图进一步拓展

根据国家知识产权局周二发布的最新专利申请中表示,华为公司申请了一项专利发明,据称能够利用区块链技术,支持P2P内容分发网络的验证功能。

这件专利是在2016年8月首次提交的,当各方通过对等网络发起下载请求时,系统就会将他们的私钥、或是用于访问内容的许可证与验证信息进行匹配。

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

其实早在2016年5 月的时候,华为就已经加入了金融区块链合作联盟,探索专为金融机构服务的的联盟区块链,以及应用场景。


同年10月,华为又加入了Linux基金会下的Hyperledger(又称“超级账本”)项目,(是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目),该项目加入成员包括:荷兰银行、埃森哲等十几个不同利益体,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程。

在Hyperledger的Fabric项目中,华为对Chaincode升级等多项功能特性进行了开发和修改,获得社区一致认可并予以采纳。


今年2月,华为还发布了区块链服务BCS产品,为企业及开发者提供公有云区块链服务。


华为云区块链服务BCS,是基于华为在分布式并行计算、PaaS、数据管理、安全加密等核心技术领域多年积累上研发的云服务产品。


BCS的发布,则是华为云PaaS服务的一次升级,也标志着华为云服务的生态版图进一步拓展。

 

华为云区块链服务,实现“X+区块链”的技术形态


华为云认为区块链是以多方参与、多中心,依靠可追溯、防篡改的特点与具体的企业应用、行业场景相结合才能真正产生价值,是一种:“X+区块链”的技术形态。


华为云区块链服务主要可用于数据应用、IOT、金融等领域,具体场景如:数据交易、身份认证、房产、学历等信息证明、远程医疗、食品溯源、车联网、IoT设备管理、精准扶贫、供应链金融等。


有消息称,华为目前推出的首款区块链测试工具Project Caliper只是更大的战略的一部分,言外之意,华为继续在开发其他区块链项目。我们期待华为会有更大的动作。

 



以上是关于Fabric网络性能测试-----caliper的主要内容,如果未能解决你的问题,请参考以下文章

hyperledger fabric 性能测试 随笔

Hyperledger Fabric 的性能测试

Fabric链码测试方法(go语言单元测试/性能测试)

Hyperledger Fabric 2.x 生产环境的分布式部署性能测试与应用

Hyperledger Fabric 环境搭建及Fabric 测试网络使用(区块链联盟链)

超级账本 Hyperledger Fabric v2.3.3 Test network测试网络踩坑