Краткий обзор инструментов для тестирования и бенчмаркинга блокчейнов

Краткий обзор инструментов для тестирования и бенчмаркинга блокчейнов

Сегодня решения для тестирования и бенчмаркинга блокчейнов заточены под определенный блокчейн или его форки. Но есть и несколько более общих решений, которые отличаются функционалом: некоторые из них — опенсорсные проекты, другие предоставляются как SaaS, но большая часть — это внутренние решения, создаваемые командой разработки блокчейна. Тем не менее, все они решают похожие задачи. В данной статье я постарался кратко рассмотреть несколько продуктов, заточенных именно под тестирование блокчейнов.

Работа блокчейн-сети напоминает работу распределенной базы данных, поэтому для тестирования можно применять аналогичные средства и методы. Чтобы лучше понимать, как тестируют распределенные базы данных, взгляните на хорошую подборку ресурсов и статей отсюда. Например, latency разобрана по полочкам в этой статье, а чтобы понять, как ищут баги в алгоритмах репликации, рекомендую ознакомиться с этой статьей.

Я опишу несколько популярных решений для тестирования и бенчмаркинга блокчейнов. Буду рад, если в комментариях вы опишете другие полезные программные продукты для решения тех же задач.

Краткий обзор инструментов для тестирования и бенчмаркинга блокчейнов

Начну с инструмента, хотя и не созданного именно под блокчейны, но позволяющего эффективно тестировать их работу при условии существования уже запущенной сети, над которой можно экспериментировать. Важнейший фактор надежности распределенной системы — способность продолжить работу в случае проблем с серверами и сетью. Это могут быть сетевые лаги, переполнение диска, недоступность внешних сервисов (DNS), аппаратные сбои и сотни других причин. Чтобы проверять устойчивость любых систем, работающих согласованно на большом числе машин систем, можно использовать Gremlin. В нем используется крайне эффективный подход, называемый Chaos Engineering.

С помощью собственного сетевого агента Gremlin создает на нужном количестве машин множество различных типов проблем: сетевые лаги, перегрузку любого ресурса (CPU, диск, память, сеть), отключает отдельные протоколы, и т.п. Для блокчейнов Gremlin может быть использован на серверах тестовой сети, эмулируя реальные проблемы и наблюдая за поведением сети. С его помощью разработчики и администраторы в контролируемой среде могут наблюдать, что произойдет в с системой случае сбоев или при обновлении кода. При этом сеть необходимо заранее сконфигурировать и развернуть, а также настроить сбор необходимых метрик.

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

Краткий обзор инструментов для тестирования и бенчмаркинга блокчейнов

Hyperledger Caliper — гораздо более специализированное решение Hyperledger Caliper. На данный момент Caliper поддерживает сразу несколько блокчейнов — представителей семейства Hyperledger (Fabric, Sawtooth, Iroha, Burrow, Besu), а также Ethereum и сеть FISCO BCOS.

С помощью Caliper можно задать топологию блокчейн-сети и контракты для тестирования, а также описать конфигурацию ноды. Ноды блокчейна поднимаются в docker контейнерах на одной машине. Далее, вы можете выбрать необходимые конфигурации тестов и получить файл с отчетом о результатах теста после запуска. С полным перечнем метрик Caliper и подходом к бенчмаркингу можно ознакомиться здесь Hyperledger Blockchain Performance Metrics, это отличная статья, если вам интересна тема бенчмаркинга блокчейнов. Также, можно настроить сбор метрик в отдельный Prometheus/Grafana.

Hyperledger Caliper — инструмент, ориентированный на разработчиков и системных архитекторов, так как обеспечивает повторяемость тестов и автоматизацию тестирования и бенчмаркинга. Он используется при разработке ядра блокчейнов: алгоритмов консенсуса, виртуальной машины для процессинга смарт-контрактов, peer-to-peer слоя и других системных механизмов.

Краткий обзор инструментов для тестирования и бенчмаркинга блокчейнов

MixBytes Tank — инструмент, появившийся в процессе разработки алгоритмов консенсуса и финальности для сетей на базе EOS и тестирования парачейнов на базе Parity Substrate (Polkadot). По функционалу он близок к Hyperledger Caliper, так как позволяет собирать важные метрики с нод любой распределенной системы и клиентских машин, на которых работают тестовые скрипты.

MixBytes Tank использует несколько облачных сервисов (Digital Ocean, Google Cloud Engine и др.), в которых умеет запустить множество нод, провести предварительные процедуры конфигурирования, параллельно запустить несколько benchmark-ов на разных машинах, собрать необходимые метрики и автоматически погасить сеть.

MixBytes Tank позволяет экономно расходовать средства на облачные сервера, автоматически сворачивая ненужные ресурсы после проведения теста. Еще одна отличительная черта — использование пакета Molecule, позволяющего разработчику тестировать разворачивание нужного блокчейна локально.

MixBytes Tank позволяет на ранних этапах обнаружить узкие места и ошибки в алгоритмах, которые возникают в реальных сетях с большим числом географически распределенных серверов и клиентов. Танк поможет вам понять, что произойдет на нодах, если клиенты будут слать транзакции с заданным tps в высокоповторяемых условиях и с реальным количеством нод, разнесенных на разные континенты, если нужно.

Краткий обзор инструментов для тестирования и бенчмаркинга блокчейнов

Whiteblock Genesis — это платформа для тестирования блокчейнов на базе Ethereum. Этот инструмент обладает достаточно широким функционалом: он позволяет запустить сеть, создать в ней нужное количество аккаунтов, поднять нужное число клиентов, сконфигурировать топологию сети, указать параметры bandwidth, packetloss и запустить тест.

Whiteblock Genesis предоставляет собственные мощности для проведения тестов. Разработчикам достаточно указать параметры тестов, запустить их при помощи готового API и получить результаты с использованием удобного dashboard.

Whiteblock Genesis позволяет сконфигурировать достаточно подробный тест, который платформа будет автоматически проводить на каждое значимое изменение кода. Это позволит на ранних этапах отловить ошибки и сразу же оценить влияние изменений на важные параметры сети, такие как скорость проведения транзакций и потребляемые нодами ресурсы.

Madt

Еще один интересный молодой продукт для тестирования распределенных систем — madt. Он написан на Python и позволяет создать необходимую топологию сети и нужное число серверов и клиентов с помощью несложного скрипта конфигурации (пример). После этого сервис разворачивает сеть в нескольких docker-контейнерах и поднимает web-интерфейс, в котором можно наблюдать сообщения от серверов и клиентов сети. Madt может использоваться для тестирования блокчейнов — в репозитарии проекта есть тест p2p сети на основе протокола Kademlia, в котором постепенно увеличиваются задержки при доставке данных на ноды и проверяется статус этих данных.

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

Другие решения

Практически любое тестирование системной части блокчейнов требует запуска предварительных сценариев, подготовки аккаунтов и условий для теста (это может быть тестирование ошибок консенсуса, которые могут порождать многочисленные форки цепочек, отработка сценариев хардфорка, изменения системных параметров и т.д.). Все эти манипуляции в разных блокчейнах проводятся по разному, поэтому командам проще постепенно приспособить тестирование и бенчмаркинг продукта к внутреннему CI/CD и использовать собственные наработки, которые постепенно усложняются с развитием функционала блокчейна.

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

Заключение

Завершая этот небольшой обзор, перечислю несколько важных характеристик инструментов для тестирования блокчейнов:

  • Возможность автоматического развертывания блокчейн-сети в повторяемых условиях. Этот фактор важен при разработке системных частей блокчейнов: алгоритмов консенсуса, финальности, системных смарт-контрактов.
  • Цена владения системой, потребляемые ресурсы и удобство для постоянного использования. Этот фактор обеспечивает проект высококлассными тестами за небольшие деньги.
  • Гибкость и простота конфигурации тестов. Этот фактор повышает шансы выявить проблемы системы — меньше вероятность пропустить что-то важное.
  • Кастомизация для конкретных типов блокчейнов. Разработка решения на базе уже существующего может сильно улучшить качество и сократить временные затраты.
  • Удобство и доступность полученных результатов и их тип (отчеты, метрики, графики, логи, и т.п.). Это совершенно необходимо, если вы хотите отслеживать историю развития продукта, или вам требуется глубокая аналитика поведения блокчейн-сети.

Удачи в тестировании и пусть ваши блокчейны будут быстрыми и отказоустойчивыми!

Источник: habr.com

Добавить комментарий