Во время попытки добиться производительности с Hyperledger Fabric, о которой команда IBM сообщила в своей статье Hyperledger Fabric: распределенная операционная система для разрешенных цепочек блоков , я столкнулся с некоторыми проблемами и ошибками. Я собрал всю полезную информацию и хочу поделиться ею с сообществом HF. Кроме того, у меня есть пара вопросов к разработчикам Fabric относительно его производительности.
Описание цели
Сеть Hyperledger Fabric v1.1.0, развернутая с использованием Cello на четырех экземплярах c5.9xlarge (36vCPU):
{
fabric001: {
cas: [],
peers: ["anchor@peer1st.main"],
orderers: ["orderer1st.orderer"],
zookeepers: ["zookeeper1st"],
kafkas: ["kafka1st"]
},
fabric002: {
cas: [],
peers: ["worker@peer2nd.main"],
orderers: ["orderer2nd.orderer"],
zookeepers: ["zookeeper2nd"],
kafkas: ["kafka2nd"]
},
fabric003: {
cas: [],
peers: ["worker@peer3rd.main"],
orderers: ["orderer3rd.orderer"],
zookeepers: ["zookeeper3rd"],
kafkas: ["kafka3rd"]
},
fabric004: {
cas: ["ca1st.main"],
peers: [],
orderers: ["orderer4th.orderer"],
zookeepers: ["zookeeper4th"],
kafkas: ["kafka4th"]
}
}
TLS отключен.
Конфигурация канала фабрики (все остальные параметры являются параметрами по умолчанию):
BatchTimeout: 1s
BatchSize:
MaxMessageCount: 500
AbsoluteMaxBytes: 200 MB
PreferredMaxBytes: 50 MB
Я выполнил тесты для CouchDB и LevelDB в качестве базы данных состояний. Я использую официальный цепной код Fabcar (реализация Golang) для своих тестов. Я создал простое приложение nodejs, которое взаимодействует с сетью Fabric с помощью SDK и предоставляет HTTP API для нагрузочных тестов. Это приложение не имеет состояния и может быть легко масштабировано.
Для нагрузочного тестирования я использую инструмент ЯндексТанк. Я выполнил два вида тестов с высокой нагрузкой: запрос (запросы через peer001 в состояние Fabric, когда блокчейн пуст) и вставка (транзакции внутри блокчейна).
Результаты
CouchDB как база данных состояний
Исходя из этого, я могу заключить, что у Fabric Peer есть проблемы с соединением CouchDB под нагрузкой.
Мои вопросы:
Знает ли Fabric Comminity об этой ошибке? Есть ли у вас планы, как это решить?
LevelDB как база данных состояний
- Результаты запроса : https://overload.yandex.net/102035. Использование ЦП и памяти контейнеров fabric001 на рисунке ниже:
В блокчейне нет ошибок, я вижу только ухудшение задержки.
- Вставьте результаты : https://overload.yandex.net/102040. Использование ЦП и памяти контейнеров fabric001 на рисунке ниже:
Агрессивная латентная деградация начинается с ~ 850 об / с. Нет ошибок в блокчейне.
Мои вопросы:
Какова причина этого ухудшения латентности? Почему я не могу достичь производительности 3500 rps, о которой IBM сообщает в своей статье? Какие планы у сообщества Fabric по улучшению производительности?