文章Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains中的Hyperledger社区显示,在某些流行的部署配置中,Fabric实现了每秒超过3500个事务的端到端吞吐量。我正在尝试在项目中实现这一目标,但距离目标还很远。在这里,我报告了我的负载测试的第一个结果,并邀请您参加有关如何使用Hyperledger Fabric和Composer实现高吞吐量的调查

项目说明

我们构建使用Hyperledger Fabric的高负载服务。我们的后端系统包括HF区块链网络,几个通过Hyperledger Composer与区块链进行通信的微服务(节点js),用于微服务之间进行通信的消息代理。

Hyperledger Fabric v1.1。 Hypeledger Composer v0.19.0

光纤网络(与大提琴一起部署):

{
    fabric001: {
      cas: [],
      peers: ["[email protected]"],
      orderers: ["orderer1st.orderer"],
      zookeepers: ["zookeeper1st"],
      kafkas: ["kafka1st"]
    },
    fabric002: {
      cas: [],
      peers: ["[email protected]"],
      orderers: ["orderer2nd.orderer"],
      zookeepers: ["zookeeper2nd"],
      kafkas: ["kafka2nd"]
    },
    fabric003: {
      cas: [],
      peers: ["[email protected]"],
      orderers: ["orderer3rd.orderer"],
      zookeepers: ["zookeeper3rd"],
      kafkas: ["kafka3rd"]
    },
    fabric004: {
      cas: ["ca1st.main"],
      peers: [],
      orderers: ["orderer4th.orderer"],
      zookeepers: ["zookeeper4th"],
      kafkas: ["kafka4th"]
    }
}

fabric001-004-t2.xlarge类型的AWS ec2实例最初,我使用m5.4xlarge,但是它花费很多,即使Fabric开始出现故障,CPU使用率也始终很低。

结构配置:
BatchTimeout: 0.2s
BatchSize:
    MaxMessageCount: 10
    AbsoluteMaxBytes: 98 MB
    PreferredMaxBytes: 512 KB

TLS已禁用。

如果需要,我可以使用任何配置执行新测试。

负载测试

首先,我决定测试针对分类帐(CouchDB)状态的请求。区块链是空的,只有系统数据,参与者很少。对CouchDB开放端口的直接查询请求非常快(〜150 ms)。我的微服务通过为现有身份建立永久连接来连接到Fabric。在我们的系统中,请求占用大约500毫秒,而没有高负载。此时间的一半用于消息代理(AWS SQS确实很慢)。对于负载测试,我使用的是YandexTank工具。负载运行顺利,而延迟没有增加到每秒约70个请求。然后,延迟统计数据下降,并且在某些时候,链码开始返回错误消息。您可以在此处查看测试结果:

TEST RESULTS

我在负载测试的迭代过程中收到两种错误消息:

1.



2.



Chaincode容器本身不会重新启动,但是从现在开始它无法正常工作。有时我无法ping通,有时可以,但是无论如何延迟都是可怕的。仅重新启动对等容器可以提供帮助。 (我提醒您,由于Composer,对分类帐的请求通过了一个同级,这不好,但这不是我调查的重点)。
第二个错误真的很奇怪,因为这是我使用的唯一身份,并且在链码开始失败之前就可以使用。它在我重新启动对等后有效。

在施加负载期间,对等方,chaicode和CouchDB的CPU使用率最高(如预期)。我正处于针对我的区块链网络的配置监控系统的中间,不久我将能够共享更多信息。

有什么想法吗?

更新#1

建议我使用c *类型的AWS实例来部署Fabric。我为测试选择了c5.4xlarge(16 vCPU)。另外,我对Fabric配置进行了一些更改:
BatchTimeout: 1s
BatchSize:
    MaxMessageCount: 20
    AbsoluteMaxBytes: 98 MB
    PreferredMaxBytes: 512 KB

我执行了相同的测试,但令我遗憾的是,我得到了相同的结果:

TEST RESULTS

在下图中,您可以看到持续1分钟的测试期间容器CPU使用率的图表

load-testing - 尝试在Hyperledger Fabric网络中实现高吞吐量-LMLPHP

总的CPU使用率最大约为30%。因此,我们可以看到延迟降低的问题在其他地方。

更新#2

由于性能结果非常差,我决定继续使用纯净 Fabric 进行测试,而没有任何不必要的中间组件。只是Fabric网络和nodejs SDK。查看新报告here

最佳答案

我使用类似的设置进行了类似的测试,并且使用8个对等节点(单个Org)可以达到约220 RPS。对于第二组织,这种性能肯定会下降。我使用了织物 sample 随附的高性能chaincode。不知道他们如何设法获得3500 RPS。

关于load-testing - 尝试在Hyperledger Fabric网络中实现高吞吐量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49875309/

10-16 23:51