有的没的
前不久在做一个有关Hyperledger Fabric的项目,不可避免地要使用Hyperledger Caliper来做性能测试,发现网上的教程不多,版本大都也比较低,花了我不少时间。所以将过程中遇到的坑和参考资料记录下来。
正文
首先我的搭建步骤基本依照这篇文章在现有Fabric 2.2.0 网络上设置和运行Caliper性能测试 实战,搭建测试网络部分依照官方文档。接下来把遇到的问题按照博客中的顺序一一列出。
环境准备
整体来说需要准备docker、docker-compose、Node.js、Git、cURL、pip3(这个忘记哪里会用到,不过确实在我的清单里)。这些都是常见的工具,如果有问题,给出了对应的链接。接下来会给出一些问题的解决方案。PS:本文的环境是CentOS7。
启动docker时ssh掉线&镜像获取速度慢
docker0可能会占用接口,某些环境下会导致这个问题,需要我们编辑/etc/docker/daemon.json文件(文件不存在可以自己新建一个)。其中registry-mirrors,是阿里云镜像加速地址,可以自行获取。 1
2
3
4
5
6
7
8
9
10{
"registry-mirrors": [""],
"debug" : true,
"default-address-pools" : [
{
"base" : "10.50.0.0/16",
"size" : 24
}
]
}
git卡在卡在clone into
报错RPC failed; result=35, HTTP code = 0,可能是因为缓存设置的不够大。可以尝试以下命令(参考链接)。 1
git config --global http.postBuffer 50M
编译出错
使用gcc编译时可能会报错warning: ‘deprecated’ attribute directive ignored [-Wattributes]可以通过升级gcc解决(参考链接)。
Node.js安装
Node.js安装不推荐使用博客中的方式,推荐使用nvm管理版本,因为Caliper以及链码安装可能会对npm和node有版本要求,安装nvm参考链接。
部署测试网络
这部分主要参考官方文档。同样接下来会给出一些问题的解决方案。
Fabric版本
由于Caliper支持版本问题(官方说支持最新,不过好像有些问题),推荐在安装Fabric使用指定版本(比如Fabric v2.2.0 和 Fabric CA v1.4.7 )。
无法获取官方脚本
如果curl -sSL https://bit.ly/2ysbOFE | bash -s命令报错,基本是网络原因。如果无法科学上网,可以访问未缩写的 URL并且将其复制下来,命名为bootstrap.sh文件并通过bash命令执行。
bootstrap.sh脚本运行错误
有可能是在获取二进制文件时出错,同样一般是因为网络问题。我的解决方案是在可以科学上网的设备上将二进制文件下载下来后复制到fabric-sample目录的子目录 bin中,然后将脚本中的pullBinaries方法删除。至于下载地址,可以查看脚本中的pullBinaries方法,也可以在删除pullBinaries方法前直接运行脚本观察输出即可找到地址(因为它会先输出地址然后卡在那一步)。
运行测试网络错误(链码安装失败)
由于我们指定了Fabric的版本,但是在测试网络的配置中拉取的镜像是最新的,因此会造成一些问题需要手动调整。将/root/fabric-samples/test-network/docker路径下的文件中的镜像版本改成你所指定的版本。例如: 1
2
3
4orderer.example.com:
container_name: orderer.example.com
image: hyperledger/fabric-orderer:2.2.0
environment:
运行Calpier
这一部分依照在现有Fabric 2.2.0 网络上设置和运行Caliper性能测试 实战。同样接下来会给出一些问题的解决方案。
npm权限不足
这好像是一种保护机制,可以在运行命令时在结尾加上--unsafe-perm,暂时绕过保护。
链码执行超时
timeout expired while executing transaction 。可以修改fabric-samples/config/core.yaml 中的 peer.keepalive.client.timeout 来修改超时时间(参考链接)。PS:大部分Fabric的配置都可以在这里修改,配置含义可以参考这篇文章。
超过并发限制
新版本的Fabric网关限制了并发数,但在性能测试中我们会需要测试高并发场景。可以修改fabric-samples/config/core.yaml中的这一部分。 1
2
3
4
5
6
7
8
9
10
11# Concurrency limits the number of concurrently running requests to a service on each peer.
# Currently this option is only applied to endorser service and deliver service.
# When the property is missing or the value is 0, the concurrency limit is disabled for the service.
concurrency:
# endorserService limits concurrent requests to endorser service that handles chaincode deployment, query and invocation,
# including both user chaincodes and system chaincodes.
endorserService: 2500
# deliverService limits concurrent event listeners registered to deliver service for blocks and transaction events.
deliverService: 2500
# gatewayService limits concurrent requests to gateway service that handles the submission and evaluation of transactions.
gatewayService: 500
Caliper配置
最后附上Caliper的官方文档其中的Benchmark Configuration以及Rate Controllers部分对前期测试比较重要。前者描述了测试相关的配置,比如轮数、持续时间等。后者介绍了速率控制器。