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

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

Сьогодні рішення для тестування та бенчмаркінгу блокчейнів заточено під певний блокчейн або його форки. Але є й дещо загальніші рішення, які відрізняються функціоналом: деякі з них — опенсорсні проекти, інші надаються як SaaS, але більша частина — це внутрішні рішення, створені командою розробки блокчейну. Проте всі вони вирішують схожі завдання. У цій статті я постарався коротко розглянути кілька продуктів, заточених саме під тестування блокчейнів.

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

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

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

Почну з інструменту, хоч і не створеного саме під блокчейни, але що дозволяє ефективно тестувати їхню роботу за умови існування вже запущеної мережі, над якою можна експериментувати. Найважливіший фактор надійності розподіленої системи — здатність продовжити роботу у разі проблем із серверами та мережею. Це можуть бути мережні лаги, переповнення диска, відсутність зовнішніх сервісів (DNS), апаратні збої та сотні інших причин. Щоб перевіряти стійкість будь-яких систем, що працюють узгоджено на великій кількості машин систем, можна використовувати Гремлін. У ньому використовується дуже ефективний підхід, званий 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

Додати коментар або відгук