在分析好Solo版本之后,其实都明白,实际应用中,不可能会使用这个版本的,因为,这个不是一个真正的应用环境。早先Caliper使用的是Kafka共识排序,现在新的版本提供了Raft共识排序。为什么要换成Raft呢?主要原因在于,前者是等于利用的另外一个框架,其版本的迭代,必然会影响到Caliper自身的变化。而且Kafka本身也不是为了Caliper量身定制的。大量的相差的功能其实是没有什么用处的。而如果换成自己的Raft,一个是随时可以升级,可插拔。另外一个,维护和管理上,方便许多。
Raft版本的安装和普通的安装没有什么区别,区别在于启动测试命令时,对配置的需求不同,及配置文件内对相差参数的设置的修改。具体的命令,可以参看第一篇文章内的命令分析和说明。
配置文件在开源项目中有以下内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在前面也提到过,在新的1.4版本以上,提供了Couchdb版本,所以在这个配置文件里其实是有两大类,一个大类是leveldb版本,另外一个就是CouchDb版本,这里对这个数据库的配置要求只需要按需求来设置即可,不影响测试配置的普适性。目前普遍仍然是使用LevelDb为主。所以上面的图里只是展示了这个版本。
这里只是测试自带的下载版本,不包括具体的安装好的环境。这个在下一篇具体分析。在这里,一般来说,需要处理以下几个问题:
1、链本身的配置文件
2、链的容器配置
3、Caliper相差配置。
由于1和2不属于本文的分析范围,所以这里不做分析。只分析Caliper本身的配置文件。
看一下版本的配置文件:
name: Fabric
version: "1.0"
mutual-tls: false
caliper:
blockchain: fabric
command:
start: export FABRIC_VERSION=1.4.1;docker-compose -f networks/fabric/docker-compose/2org1peergoleveldb_raft/docker-compose-tls.yaml up -d;sleep 3s
end: docker-compose -f networks/fabric/docker-compose/2org1peergoleveldb_raft/docker-compose-tls.yaml down;(test -z \"$(docker ps -aq)\") || docker rm $(docker ps -aq);(test -z \"$(docker images dev* -q)\") || docker rmi $(docker images dev* -q);rm -rf /tmp/hfc-*
info:
Version: 1.4.1
Size: 2 Orgs with 1 Peer
Orderer: Raft
Distribution: Single Host
StateDB: GoLevelDB
clients:
client0.org1.example.com:
client:
organization: Org1
credentialStore:
path: /tmp/hfc-kvs/org1
cryptoStore:
path: /tmp/hfc-cvs/org1
clientPrivateKey:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/key.pem
clientSignedCert:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]
client0.org2.example.com:
client:
organization: Org3
credentialStore:
path: /tmp/hfc-kvs/org2
cryptoStore:
path: /tmp/hfc-cvs/org2
clientPrivateKey:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/keystore/key.pem
clientSignedCert:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/signcerts/[email protected]
channels:
mychannel:
configBinary: networks/fabric/config_raft/mychannel.tx
created: false
orderers:
- orderer0.example.com
- orderer1.example.com
- orderer2.example.com
peers:
peer0.org1.example.com:
eventSource: true
peer0.org2.example.com:
eventSource: true
chaincodes:
- id: marbles
version: v0
language: golang
path: fabric/samples/marbles/go
metadataPath: src/fabric/samples/marbles/go/metadata
- id: drm
version: v0
language: golang
path: fabric/scenario/drm/go
- id: simple
version: v0
language: golang
path: fabric/scenario/simple/go
- id: smallbank
version: v0
language: golang
path: fabric/scenario/smallbank/go
organizations:
Org1:
mspid: Org1MSP
peers:
- peer0.org1.example.com
certificateAuthorities:
- ca.org1.example.com
adminPrivateKey:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/key.pem
signedCert:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]
Org2:
mspid: Org2MSP
peers:
- peer0.org2.example.com
certificateAuthorities:
- ca.org2.example.com
adminPrivateKey:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/keystore/key.pem
signedCert:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org2.example.com/users/[email protected]/msp/signcerts/[email protected]
orderers:
orderer0.example.com:
url: grpcs://localhost:7050
grpcOptions:
ssl-target-name-override: orderer0.example.com
tlsCACerts:
path: networks/fabric/config_raft/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
orderer1.example.com:
url: grpcs://localhost:8050
grpcOptions:
ssl-target-name-override: orderer1.example.com
tlsCACerts:
path: networks/fabric/config_raft/crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
orderer2.example.com:
url: grpcs://localhost:9050
grpcOptions:
ssl-target-name-override: orderer2.example.com
tlsCACerts:
path: networks/fabric/config_raft/crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peers:
peer0.org1.example.com:
url: grpcs://localhost:7051
grpcOptions:
ssl-target-name-override: peer0.org1.example.com
grpc.keepalive_time_ms: 600000
tlsCACerts:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem
peer0.org2.example.com:
url: grpcs://localhost:8051
grpcOptions:
ssl-target-name-override: peer0.org2.example.com
grpc.keepalive_time_ms: 600000
tlsCACerts:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem
certificateAuthorities:
ca.org1.example.com:
url: https://localhost:7054
httpOptions:
verify: false
tlsCACerts:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem
registrar:
- enrollId: admin
enrollSecret: adminpw
ca.org2.example.com:
url: https://localhost:8054
httpOptions:
verify: false
tlsCACerts:
path: networks/fabric/config_raft/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem
registrar:
- enrollId: admin
enrollSecret: adminpw
此处最简单的方法是不要动任何配置,直接启动,正常的情况下,会自动下载相差的镜像,并开始测试。下面对几个主要的部分进行一下分析:
1、Caliper:
这一个项目,主要是分为测试链的目标是哪种,比如这里是Fabric,命令如何操作,启动和结束时如何处理相着的脚本和数据。
2、Info
主要配置一下,节点的数量,链的版本,排序的类型和使用数据库等。
3、Client
这个主要是配置相差的客户端的认证存储的路径和相差的证书的路径。注意,这里使用了相当多的临时路径,意思是可以删除。
4、Channel
设置通道名称,比如“mychannel”, 语言,相关路径,是否已经创建。如果创建为Ture,默认为未创建,False。
5、Organizatons
这个主要是对组织的名称,节点的名称(域名),数量,证书私钥等的路径进行配置。
6、Orders
排序节点的配置,主要是排序节点的名称(域名),IP地址和端口,相差的Tls的证书路径。名称和数量与组织内的配置保持一致。
7、Peers:
类似上面的排序节点,配置名称,IP和端口以及相差的证书。需要注意的是,这些域名和数量要和上面的组织内的配置保持一致。
8、CertificateAuthorities:
这个就是上面的配置的证书的节点,同上面的排序和Peers两个节点一样。
上面的这些配置,可以参照Caliper的相差帮助文档,凡是可选的,都是可以注释掉的。不过要注释掉时,要保持相关节点的依赖一致。举一个例子,在客户端的配置中,如果把私钥的可选配置注释,下面的签名的配置同样也要注释,因为后者需要前者来进行签名动作。
用这种方式来进行Solo测试还是可以接受的,如果应用于Raft的测试,还不是有多好,毕竟都下载到了同一台机器内,对机器的硬件的要求琮是比较高的。测试出来的结果也不会有多的代表性,重点还是要使用这种机制来测试已经安装好的相关的Fabric环境。在下一篇的文章中,会继续分析下头的配置文件。
Caliper的应用还是比较普遍的,特别是国内某些人修改了一下这个框架就开始拿来主义。学明白了,至少不会被忽悠。