node.js - Hyperledger Fabric - Fabcar 性能

标签 node.js performance hyperledger-fabric hyperledger

我正在尝试使用 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 定义创建 block 之前的最长时间。这意味着,当进行调用时,排序者会计算交易并在创建 block 之前等待 2 秒。这意味着,每笔第一笔交易将花费 2 秒以上!但如果有另一个调用,比如说,在第一个事务后 1.5 秒,第二次调用将花费不到 1 秒!

MaxMessageCount,不言而喻。这意味着如果调用次数超过 10 次,即使 2 秒还没有过去,也会创建一个 block 。例如,在 0.5 秒内连续调用 10 次将导致在不到一秒的时间内创建一个 block 。

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

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

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

关于node.js - Hyperledger Fabric - Fabcar 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60006576/

相关文章:

node.js - 如何将我的curl cURL 请求转换为node js?

node.js - Mongodb,在嵌套数组中搜索对象

hyperledger-fabric - super 账本结构 : Could not find matching private key for SKI

hyperledger-fabric - 如何在不使用 IBP vscode 扩展的情况下将链代码打包为 cds 格式

hyperledger-fabric - 如果 channel 功能被禁用,我们可以从 Kafka(1.4.0) 迁移到 RAFT(1.4.3) 吗?

node.js - 使用 Node.js 的 AMQP,如何发布/订阅?

node.js - 我可以在 sequelize.js(Node js) 中删除多个删除吗

python - python 服务器进程的性能监控/分析(类似于 New Relic)

java - Android 上的 AES 解密太慢而无法使用。 NDK会更快吗?其他想法?

java - 为什么 test1() 比 test2() 运行得快得多?