在尝试实现IBM团队在其文章Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains中报告的性能时,我遇到了一些问题和错误。我收集了所有有用的信息,并希望与HF社区分享。此外,我对Fabric开发人员关于其性能有几个问题。
目标描述:使用Cello在四个c5.9xlarge(36vCPU)aws实例上部署的Hyperledger Fabric v1.1.0网络。
我为CouchDB和LevelDB这两种状态数据库进行了测试。我使用官方的Fabcar链码(Golang实现)进行测试。我创建了一个简单的nodejs应用程序,使用SDK与Fabric网络进行交互,并公开了HTTP API以进行负载测试。该应用程序是无状态的,可以轻松扩展。
对于负载测试,我使用了YandexTank工具。我进行了两种高负载测试:查询(通过peer001向Fabric状态发送请求,当区块链为空时)和插入(区块链内的交易)。
目标描述:使用Cello在四个c5.9xlarge(36vCPU)aws实例上部署的Hyperledger Fabric v1.1.0网络。
{
fabric001: {
cas: [],
peers: ["anchor@peer1st.main"],
orderers: ["orderer1st.orderer"],
zookeepers: ["zookeeper1st"],
kafkas: ["kafka1st"]
},
fabric002: {
cas: [],
peers: ["worker@peer2nd.main"],
orderers: ["orderer2nd.orderer"],
zookeepers: ["zookeeper2nd"],
kafkas: ["kafka2nd"]
},
fabric003: {
cas: [],
peers: ["worker@peer3rd.main"],
orderers: ["orderer3rd.orderer"],
zookeepers: ["zookeeper3rd"],
kafkas: ["kafka3rd"]
},
fabric004: {
cas: ["ca1st.main"],
peers: [],
orderers: ["orderer4th.orderer"],
zookeepers: ["zookeeper4th"],
kafkas: ["kafka4th"]
}
}
TLS已禁用。
Fabric通道配置(所有其他参数均为默认值):
BatchTimeout: 1s
BatchSize:
MaxMessageCount: 500
AbsoluteMaxBytes: 200 MB
PreferredMaxBytes: 50 MB
我为CouchDB和LevelDB这两种状态数据库进行了测试。我使用官方的Fabcar链码(Golang实现)进行测试。我创建了一个简单的nodejs应用程序,使用SDK与Fabric网络进行交互,并公开了HTTP API以进行负载测试。该应用程序是无状态的,可以轻松扩展。
对于负载测试,我使用了YandexTank工具。我进行了两种高负载测试:查询(通过peer001向Fabric状态发送请求,当区块链为空时)和插入(区块链内的交易)。
结果
CouchDB作为状态数据库
查询结果:https://overload.yandex.net/101153。当每秒请求数达到约1100时,延迟开始增加。但是,Fabric实例未加载且拥有大量空闲资源。在下面的图表中,您可以看到测试期间实例fabric001上Fabric网络容器的CPU和内存使用情况。100%的CPU使用率表示一个完整的虚拟CPU负载。
此外,peer001打印了很多类似的错误日志(不是完整输出,如果需要,我可以与您分享):https://gist.github.com/krabradosty/9780cacc92fcdeaa0c36377a91727ade
插入结果:https://overload.yandex.net/101217。当每秒请求数达到约600时,延迟下降非常快。之前缓慢,但无论如何,都存在。下图显示了fabric003容器的CPU和内存使用情况:
来自peer的许多错误日志(再次不是完整输出):https://gist.github.com/krabradosty/3810151b8e101d8279cc705aef22863e
LevelDB作为状态数据库
- 查询结果:https://overload.yandex.net/102035。如下图所示,fabric001容器的CPU和内存使用情况:
区块链没有任何错误,只是看到延迟降低。
- 插入结果:https://overload.yandex.net/102040。如下图所示,fabric001容器的CPU和内存使用情况:
激进的延迟降低始于约850 rps。区块链没有任何错误。