超级账本Fabric - Fabcar性能

4

我正在尝试使用类似于Fabcar示例的设置来运行Hyperledger Fabric项目。

令我惊讶的是提交交易所需的时间非常长。

为了让它变得简单并且完全可重现,我测量了在实际的Fabcar项目上提交交易createCar所需的时间。 在设置网络(startFabric.sh javascript)并注册管理员和用户后,我运行了invoke.js脚本。整个脚本需要约2.5秒钟!

据我了解,运行合同只需要几毫秒。发送交易建议也是如此。 大部分时间都花在事件处理程序监听和等待事件上(在transaction.js库中)。

有没有加快这个过程的方法?我希望能够每秒提交多个交易。

1个回答

4

简短回答:在configtx.yaml中减少BatchTimeout。

详细回答:

如果您只运行一个查询,就像您描述的那样,这是完全正常的。

如果您查看configtx.yaml,在“Orderer”部分,您可以看到如下内容:

Orderer: &OrdererDefaults

# Orderer Type: The orderer implementation to start
# Available types are "solo" and "kafka"
OrdererType: solo

Addresses:
    - orderer.example.com:7050

# Batch Timeout: The amount of time to wait before creating a batch
BatchTimeout: 2s

# Batch Size: Controls the number of messages batched into a block
BatchSize:

    # Max Message Count: The maximum number of messages to permit in a batch
    MaxMessageCount: 10

    # Absolute Max Bytes: The absolute maximum number of bytes allowed for
    # the serialized messages in a batch.
    AbsoluteMaxBytes: 99 MB

    # Preferred Max Bytes: The preferred maximum number of bytes allowed for
    # the serialized messages in a batch. A message larger than the preferred
    # max bytes will result in a batch larger than preferred max bytes.
    PreferredMaxBytes: 512 KB

有两件重要的事情:

  • BatchTimeout
  • MaxMessageCount

BatchTimeout定义创建区块前的最大时间。这意味着当执行调用时,排序器会计算交易并在创建区块之前等待2秒钟。这意味着每个第一个交易将需要超过2秒钟!但如果有另一个调用,在第一次交易后1.5秒进行,第二个调用将少于1秒钟!

MaxMessageCount就是它字面意思。它意味着如果有超过10个调用,则会创建一个区块,即使2秒还没有到。例如,连续0.5秒的10个调用将在不到1秒的时间内创建一个区块。

这些设置旨在根据您的网络平衡负载。假设您拥有一个低使用率应用程序,每秒不到10个事务(TPS),可以将BatchTimeout减少到少于2秒以增加调用的响应时间。如果您有高TPS,则可以增加MaxMessageCount以创建更大的区块。

其他设置定义了消息的最大大小。

尝试了解您的网络将如何工作,使用测试用例模拟估计的TPS,并微调参数以找到所需的配置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接