区块链100篇之fabric的网络搭建(三)

这一节主要讲一下启动fabric网络的脚本编写以及tps的压测。

脚本的讲解

在fabric_raft这个目录中主要有四个脚本,分别是updown.shgenesis.shcc.sh以及script/official.sh这四个脚本,其中updown.sh脚本就是启动或者宕掉fabric网络,genesis.sh这个脚本比较重要的是下面几行:
区块链100篇之fabric的网络搭建(三)_第1张图片

  • 1.这里是根据之前编写好的crypto-config.yaml文件,通过cryptogen二进制文件来生成证书文件,这里需要注意的一点是cryptogen最好是跟你要搭建的网络的版本一致,不然生成的证书有可能有出入导致一些奇奇怪怪的错误,一般关于这个二进制的获取可以直接clone fabric的官方代码,checkout到自己想要的版本,然后make cryptogen,会在 .build/bin这个目录下生成这个二进制。
  • 2.也是根据configtx.yaml文件,通过configtxgen来生成证书文件,同样的版本最好是一致的,获取方式是通过make configtxgen来获得;第一行命令是生成system channel的创世区块;第二行是生成application channel的通道交易配置;第三行跟第四行都是生成锚节点配置文件;这些artificialsofficial.sh脚本中都会用到。

cc.sh这个脚本就是在容器外来调用容器内部的official.sh脚本,所以它的命令就只有一行:

 docker exec cli bash scripts/official.sh

这么做的好处就是不需要进入到容器内部去执行脚本,其实相当于:

 docker exec -it cli bash 
 bash scripts/official.sh

official.sh这个脚本讲一下里面的大概逻辑。

  • 第一步是组织的节点创建channel并加入channel;

区块链100篇之fabric的网络搭建(三)_第2张图片
在节点peer0.org1.example.com中根据通道配置交易(就是上一步由configtxgen生成的)创建一个channel,这时会在当前目录下生成一个application channel的创世区块,即mychannel.block,这个区块在join channel的时候需要指定,然后就是更新锚节点,锚节点是用于组织与组织之间的通信;切换到节点peer0.org2.example.com的环境变量使当前的节点加入到channel中,顺便提一下,cli容器与各个节点容器是通过grpc进行交互的,所以可以通过切换环境变量的方式来控制不同的节点。

  • 第二步是安装实例化chaincode

区块链100篇之fabric的网络搭建(三)_第3张图片

  • 1.安装链码,所有加入某个channel且参与背书的节点都需要安装链码,安装链码实际上就是将链码文件拷贝到本地某个目录下,用于实例化的时候将链码文件拷贝进容器中;
  • 2.实例化链码,第一次运行这一步的时候会比较慢,原因是系统会先拉取ccenv镜像,然后在此基础之上构建出一个新的链码镜像(这个镜像包含了链码文件),然后再根据这个镜像启动容器;实例化链码只需要一次,此后其他节点并不需要都去执行同样的命令,其他节点只需要执行查询或者调用链码的操作,系统会自动为当前的节点启动一个新的链码容器;重点的参数**-P**是指背书策略,包括OR,AND,NOutOf,详细可以查看这一篇:Fabric背书策略相关概念与背书验证过程
  • 3.调用链码
  • 4.查询链码

压测

压测一开始本来是想使用fabric官方推荐的caliper,但是由于各种原因,没搞明白[哭状脸],所以就放弃了,使用了一个使用非常简单的压测小工具Stupid,下面是我对这个测试网络的压测的过程。

下载
git clone https://github.com/guoger/stupid.git
编译二进制
cd  stupid
go build -o stupid
编写配置文件

新建文件stupid-config.json

vim stupid-config.json

编写文件(sample)

{
  "peer_addr": "peer0.org1.example.com:7051",
  "orderer_addr": "orderer.example.com:7050",
  "channel": "mychannel",
  "chaincode": "mycc",
  "version": "",
  "args": ["invoke", "a", "b", "10"],
  "mspid": "Org1MSP",
  "private_key": "crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/priv_sk",
  "sign_cert": "crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]",
  "tls_ca_certs": ["crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem","crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem"],
  "num_of_conn": 20,
  "client_per_conn": 40
}

private_keysign_certtls_ca_certs填写相对应的目录文件, num_of_conn这个参数是指client端与peer端、orderer端之间所建立的grpc连接数,client_per_conn这个参数是指向一个peer发送交易提案的客户端数目。
**注意:**把peer0.org1.example.comorderer.example.com写到本机的hosts文件中

启动测试
# 发起4000笔交易
./stupid stupid-config.json 4000
结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-99jRqpYw-1586414106063)(../../..\images\blockchain\fabric\stupid压测结果.png)]
总共耗时25秒,tps大概在157左右。

好了,整个过程大概就是这样,接下来按照原计划就是开始编写chaincode。

你可能感兴趣的:(区块链100篇,fabric)