Hyperledger Fabric - Fabcar 性能

Hyperledger Fabric - Fabcar performance

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

我对提交交易花费的大量时间感到惊讶。

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

据我所知,运行签署合同只需要几毫秒。发送交易建议也是如此。 它主要花时间让 eventHandler 监听和等待事件(在 transaction.js 库中)。

有没有办法加快这个过程?我期望每秒能够提交几笔交易。

简答:减少 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 定义创建块之前的最长时间。这意味着,当进行调用时,排序者计算交易并在创建块之前等待 2 秒。这意味着,每个第一个 事务将花费超过 2 秒!但是如果有另一个调用,比方说,在第一次交易后的 1.5 秒,第二次调用将花费不到 1 秒!

MaxMessageCount,不言自明。这意味着如果有超过 10 个调用,一个块将被创建,即使 2 秒没有过去。例如,在 0.5 秒的一行中调用 10 次将导致在不到一秒的时间内创建一个块。

此设置用于根据您的网络平衡负载。假设您有一个低使用率应用程序,低于 10 tps(每秒事务处理),您可以将 BatchTimeout 减少到 2 秒以内以增加调用的响应时间。如果你有很高的 tps,你可以增加 MaxMessageCount 来创建更大的块。

其他设置定义邮件的最大大小。

尝试了解您的网络情况,使用测试用例模拟估计的 tps 并调整参数以找到您需要的配置。