Fabric上搭建Hyperledger caliper进行性能测试

2023-10-26

Fabric介绍(推荐文章)

Hyperledger(超级账本)是Linux基金会旗下的项目,Fabric是Hyperledger项目里最早也是目前应用最广泛的区块链项目,最初由IBM开发,后来捐助给基金会。

  • 是一个开源的企业级需要许可的分布式账本技术平台
  • 是一个高度模块化和可配置架构(a,b,c)
  • 支持不同组件的可插拔实现
  • 智能合约支持多语言:go,java,node.js等

Hyperledger Caliper介绍(官方文档)

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

Caliper目前支持以下区块链平台:

  • Hyperledger Besu
  • Hyperledger Burrow
  • Ethereum
  • Hyperledger Fabric
  • FISCO BCOS
  • Hyperledger Iroha
  • Hyperledger Sawtooth

Caliper目前支持的性能指标包括:

  • 交易/读吞吐量
  • 交易/读延迟:最小、最大、平均、百分比
  • 资源消耗:CPU、内存、网络IO…

安装nodejs

本测试需要docker、docker-compose、go、nodejs的环境,这里不进行安装介绍,只是简单介绍一下nodejs的安装。

这里我用到了下面这几个版本的node,具体使用哪一个看报错信息。但是每次安装了新的之后要重新构建安装node-gyp构建自动化工具。去node的bin目录里面看是否有node-gyp命令即可。

在这里插入图片描述

wget https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.xz
tar -xvf node-v16.15.0-linux-x64.tar.xz 
sudo vim /etc/profile
export NODE_HOME=你自己的安装目录
export PATH=$NODE_HOME/bin:$PATH
source /etc/profile
node -v

#安装node-gyp构建自动化工具
sudo npm install -g node-gyp

搭建Hyperledger caliper(官网

测试之前是保证我们的区块链项目已经安装成功,前面的相关步骤已经完成。
大家也可以参照官网,较少的非常详细。

创建并初始化Fabric网络

cd test-network
./network.sh up createChannel

创建Caliper的工作区

在和network.sh同级的目录下创建caliper-workspace文件夹并创建三个子文件夹

mkdir -p caliper-workspace/{networks,benchmarks,workload}

初始化工作区
进入caliper-workspace目录执行命令

npm init -y

安装caliper-cli,这个会把用到的依赖下载到当前工作区的node_modules目录下

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

注意事项:
linux为了安全起见,root用户执行npm命令的时候会被换成一个nobody的用户,而这个用户基本上是没有任何权限的,所以执行这个命令的时候可以自己用其他的用户登录,然后赋予其他用户操作我们的fabric工作区的权限。(参考文章

#下面这个命令使这个文件夹所有用户都可以操作
chmod -R 777 /home/workspace/

绑定终端SDK

npx caliper bind --caliper-bind-sut fabric:2.1

构建测试文件

构建测试工作的负载模块。
在workload文件夹下创建createAsset.js文件,创建测试账户命令,随机生成账户id并进行初始化调用。

'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() {
            const randomId = Math.random();
            const assetID = `${this.roundArguments.prefix}_${randomId}`;
            console.log(`Creating asset ${assetID}`);
            const request = {
                contractId: this.roundArguments.contractId,
                contractFunction: 'CreateAsset',
                invokerIdentity: 'Admin@org1.example.com',
                contractArguments: [assetID,'blue','20','500','500'],
                readOnly: false
            };

            await this.sutAdapter.sendRequests(request);
    }
    
    async cleanupWorkloadModule() {
    }
}

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

module.exports.createWorkloadModule = createWorkloadModule;


在networks文件夹下创建一个名为networkConfig.json的文件.

这里说明一下,networkConfig.json的文件里面的path路径是自己的工程里面的文件对应的路径。
其他的名称和host里面的配置对应,要不修改的话都不进行修改。

{
    "version" : "1.0",
    "name": "Caliper test",
    "caliper" : {
        "blockchain": "fabric"
    },
    "clients": {
        "Admin@org1.example.com": {
            "client": {
                "credentialStore": {
                    "path": "/tmp/org1",
                    "cryptoStore": {
                        "path": "/tmp/org1"
                    }
                },
                "organization": "Org1",
                "clientPrivateKey": {
                    "path": "/root/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk"
                },
                "clientSignedCert": {
                    "path": "/root/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
                },
                "connection": {
                    "timeout": {
                        "peer": {
                            "endorser": "3000"
                        }
                    }
                }

            }
        }
    },
    "channels": {
        "mychannel": {
            "created" : true,
	    "orderers":[
	       "orderer.example.com"
	    ],
	    "peers":{
                "peer0.org1.example.com": {}
	    },
            "contracts": [
                {
                    "id":"basic",
                    "version":"1.0"
                }
            ]
        }
    },
    "organizations":{
        "Org1": {
            "mspid": "Org1MSP",
            "peers": [
                "peer0.org1.example.com"
            ]
        }
    },
    "orderers":{
        "orderer.example.com": {
	   "url": "grpcs://orderer.example.com:7050",
	   "tlsCACerts": {
	       "path": "/root/fabric/scripts/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"

	   },
            "grpcOptions": {
                "ssl-target-name-override": "orderer.example.com"
            }
	}
    },

    "peers": {
        "peer0.org1.example.com": {
            "url": "grpcs://peer0.org1.example.com:7051",
            "tlsCACerts": {
		"path": "/root/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"    
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org1.example.com",
                "hostnameOverride": "peer0.org1.example.com"
            }
        }
    }
}


构建基准的测试的配置文件

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

基准配置文件定义基准轮次并引用定义的工作负载模块。它将指定生成负载时使用的测试工作人员的数量、测试轮次的数量、每轮的持续时间、每轮期间应用于事务负载的速率控制以及与监视器相关的选项。
在这个文件里面我们还可以配置测试的发送交易总量、发送的tps等信息。

  • tps:交易发送速率
  • txNumber:交易发送总量

在这里插入图片描述

test:
    #测试的名称
    name: basic-contract-benchmark
    #基本的描述信息
    description: test benchmark
    workers:
      type: local
      number: 5
    rounds:
      - label: createAsset-total20
        description: create asset benchmark
        #交易的发送总量
        txNumber: 20
        rateControl: 
          type: fixed-rate
          opts:
          	#交易发送的速率
            tps: 2
        workload:
        #这个配置我们刚才创建的js文件的路径
          module: workload/createAsset.js
          arguments:
            prefix: assetv1
            assets: 5
            contractId: basic
monitors:
  resource:
  - module: docker
    options:
      interval: 5 
      containers:
      - all


配置host文件

vim /etc/hosts

#加入以下域名解析
127.0.0.1 peer0.org1.example.com
127.0.0.1 peer0.org2.example.com
127.0.0.1 peer1.org1.example.com
127.0.0.1 peer1.org2.example.com
127.0.0.1 orderer.example.com


运行caplier进行性能测试

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

运行完成之后会在目录下生成一个report.html文件
在这里插入图片描述
下按在这个report文件即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fabric上搭建Hyperledger caliper进行性能测试 的相关文章

  • 猫头虎博主的MySQL救援指南:轻松解决初始化问题(nysqld: Can create directort :mysgl mysg! 9-winx64 data errno such file o)

    博主猫头虎的技术世界 欢迎来到 猫头虎的博客 探索技术的无限可能 专栏链接 精选专栏 面试题大全 面试准备的宝典 IDEA开发秘籍 提升你的IDEA技能 100天精通Golang Go语言学习之旅 领域矩阵 猫头虎技术领域矩阵 深入探索各技
  • 小白成功搭建Elasticsearch 只需五步(包含配置xpack)

    ElasticSearch 安装成功后 是不需要使用用户名和密码就可以访问的 这也是在配置skywalking的apm过程中 连接es数据库无需设置用户名和密码的原因 启动es也非常的简单 在 bin 目录下运行elasticsearch
  • 盘点那些年我们一起玩过的网络安全工具

    大家好 我是IT共享者 这篇文章给大家盘点那些年 我们一起玩过的网络安全工具 一 反恶意代码软件 1 Malwarebytes 这是一个检测和删除恶意的软件 包括蠕虫 后门 流氓 拨号器 间谍软件等等 快如闪电的扫描速度 具有隔离功能 并让
  • 期权开户最低多少钱个人可以开?

    大家新年好 现在2024年龙年 很多想玩期权的小伙伴都知道期权开通需要50万的门槛 那么今天来给大家详细介绍下期权开户最低多少钱个人可以开 本文将对期权开户最低金额进行探讨 帮助投资者更好地了解期权交易的投资门槛 本文来自 期权酱 一 期权
  • nohup - 后台执行

    nohup no hang up 语法 nohup Command Arg 使用示例 nohup python a py 日志将被保留在 当前文件夹下的 nohup out 将日志放到文件 不输出到终端 echo hello gt 1 tx
  • Fabric + DigitalOcean:不可见的环境变量?

    我在 DigitalOcean 上有服务器 我使用 Fabric 来部署我的代码 我的代码依赖于环境变量 烧瓶配置 我今天遇到了一个奇怪的麻烦 在服务器上 root bashrc我已经添加了下一行 export CONFIG path to
  • 织物密码

    每次结构运行时 它都会要求输入 root 密码 是否可以将其与自动建议一起发送 fab staging test 我知道您已经询问过密码 但是配置系统以便您可以在没有密码的情况下进行结构 即 SSH 不是更好吗 为此 在本地计算机上执行以下
  • Linux终端常见用法总结

    熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率 笔者结合自身学习实践 总结以下终端用法供同行交流学习 常 见 用 法 1 快捷键 1 1 Alt 在光标位置插入上一次执行命令的最后一个参数 1 2 Ctrl R
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • Jenkins 插件下载速度慢、安装失败了!我教你怎么解决!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • messages,CentOS 7不收集日志或不存在 /var/log/messages

    var log message var log secure等都不记录了 并且都是空文件 重启机器 reboot 无效 重启日志 systemctl start rsyslog 无效 怀疑空间不足 删除 var log messages 重
  • 步骤详图 教你在linux搭建容器环境

    警告 切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker 1 准备工作 系统要求 要安装Docker CE 社区版 操作系统的最低要求是CentOS7 7以下版本都不被支持 卸载旧版本 Docker改版
  • Kubernetes (十一) 存储——Secret配置管理

    一 简介 从文件创建 echo n admin gt username txt echo n westos gt password txt kubectl create secret generic db user pass from fi
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 案例研究:YGG 如何通过 GAP 帮助 Pixels 扩大玩家群体

    在 Sky Mavis 联合创始人 Jeffrey Jihoz Zirlin 在 YGG Web3 游戏峰会 W3GS 上发表主题演讲时 他向在场的人们透露 MMO 农场游戏 Pixels 的日活跃用户数已经超过了 130 000 人 这使
  • Python - 如何验证与 Fabric 模块的 SSH 连接?

    我正在尝试使用 Fabric 模块通过以太网通过 SSH 连接到子网上的 Raspberry Pi 但我不知道如何验证连接 到目前为止我的代码如下 import fabric c fabric Connection host 192 168
  • Python导入错误:没有名为Fabric.api的模块?

    我收到以下错误 Traceback most recent call last File drayd py line 2 in
  • 有类似 Fabric for Perl 的东西吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我很喜欢Fabric http fabfile org 对于个人项目 但我的日常工作是在面向 Perl
  • 将 Fabric env.hosts 字符串作为变量传递在函数中不起作用

    将 Fabric env hosts 字符串作为变量传递在函数中不起作用 demo py usr bin env python from fabric api import env run def deploy hosts command

随机推荐