[英]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: &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 并调整参数以找到您需要的配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.