Hyperledger Fabri c - производительность Fabcar - PullRequest
3 голосов
/ 31 января 2020

Я пытаюсь запустить проект с использованием Hyperledger Fabri c с настройкой, подобной примеру Fabcar.

Я удивлен огромным количеством времени, которое требуется для отправки транзакции.

Просто, чтобы сделать его простым и полностью воспроизводимым, я измерил время, необходимое для отправки транзакции createCar в реальном проекте Fabcar. После настройки сети (startFabric.sh javascript) и регистрации администратора и пользователя я запускаю сценарий invoke.js. Весь сценарий занимает около 2,5 секунд!

Насколько я понимаю, выполнение контракта занимает всего несколько миллисекунд. То же самое для отправки Предложения по сделке. В основном он тратит время на прослушивание и ожидание события EventHandler (в библиотеке transaction.js).

Есть ли способ ускорить процесс? Я ожидал, что смогу отправлять несколько транзакций в секунду.

1 Ответ

1 голос
/ 03 февраля 2020

Краткий ответ: уменьшить BatchTimeout в configtx.yaml

Длинный ответ:

Если вы выполняете только один запрос, как вы описываете, это в целом нормально.

Если вы смотрите на свой 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

Есть 2 важных вещи:

  • BatchTimeout
  • MaxMessageCount

BatchTimeout определяет максимальное время до создания блока. Это означает, что при выполнении вызова заказчик вычисляет транзакцию и ждет 2 секунды, прежде чем создать блок. Это означает, что каждая первая транзакция займет больше 2 секунд! Но если есть другой вызов, скажем, через 1,5 с после первой транзакции, второй вызов займет менее 1 с!

MaxMessageCount, говорит сам за себя. Это означает, что если будет более 10 вызовов, будет создан блок, даже если 2 секунды не прошли. Например, вызов 10 в строке 0,5 с приведет к созданию блока менее чем за секунду.

Эти настройки предназначены для балансировки нагрузки в зависимости от вашей сети. Допустим, у вас малоиспользуемое приложение, со скоростью менее 10 т / с (транзакция в секунду), вы можете уменьшить BatchTimeout до менее 2 с, чтобы увеличить время отклика на вызов. Если у вас высокая скорость передачи, вы можете увеличить MaxMessageCount, чтобы создать больший блок.

Другие настройки определяют максимальный размер сообщения.

Попробуйте узнать, как будет работать ваша сеть, смоделируйте оцените количество операций в секунду с помощью тестового примера и настройте параметры, чтобы найти конфигурацию, соответствующую вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...