Skip to content

Тестирование хаоса с Izanami ​

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

Используйте Izanami для проверки устойчивости до производства, регрессионного воспроизводства и консенсусной настройки. Не указывайте его на производственную сеть: инструмент предназначен для того, чтобы владеть перезагрузками, в том числе перезагрузочными пусками, полотенцами для хранения, искусственной потерей пакетов и локальным CPU или давлением диска.

Предварительные условия ​

Запустить Izanami из Iroha источник хранилища, не из данного хранилища документации:

bash
git clone https://github.com/hyperledger-iroha/iroha.git
cd iroha
cargo build -p izanami

Бинарный файл должен иметь прямое разрешение на создание и манипулирование сетевыми партнерами. Перейти --allow-net для каждого выполнения, не являющегося TUI или включить allow_net в TUI.

bash
cargo run -p izanami -- --allow-net --peers 4 --faulty 1 --duration 120s

Для интерактивной конфигурации выполнения:

bash
cargo run -p izanami -- --tui --allow-net

Izanami сохраняет настройки TUI и CLI в каталоге пользовательской конфигурации, поэтому пересмотрите отображаемые настройки перед повторным использованием предыдущего профиля.

Исходный показатель ​

Начните с одного воспроизводимого исходного показателя перед добавлением серьезных ошибок:

bash
cargo run -p izanami -- \
  --allow-net \
  --peers 4 \
  --faulty 1 \
  --duration 5m \
  --target-blocks 100 \
  --progress-interval 15s \
  --progress-timeout 120s \
  --latency-p95-threshold 2s \
  --tps 15 \
  --max-inflight 32 \
  --submitters 1 \
  --seed 42

Это выполнение удается только в том случае, если кластер достигает требуемой цели блока, продолжает добиваться прогресса в течение времени и остается ниже опционального порога интервала блока p95.

Зарегистрируйте команду, сейм, Iroha commit, пересчет сверстников, пересчёт неисправностей сверстника, профиль рабочей нагрузки, цель TPS и порог задержки в журналах. Без этих значений другой оператор не может воспроизвести тот же шаблон отказа.

Профили нагрузки ​

Izanami имеет два профиля рабочей нагрузки:

ПрофильИспользуйте его дляПримечания
stableДлинные пробеги на погружении и воспроизводимые проверки производительностиОн предпочитает безопасные рецепты .
chaosПокрытие неудачных путейВключает намеренно недействительные рецепты

Прежде всего используйте стабильный профиль:

bash
cargo run -p izanami -- --allow-net --workload-profile stable --seed 42

Перейти к профилю хаоса, когда базовая линия уже понята:

bash
cargo run -p izanami -- --allow-net --workload-profile chaos --seed 42

Рецепты контрактного развертывания отключаются в стационарных режимах, если не разрешено изрядно:

bash
cargo run -p izanami -- \
  --allow-net \
  --workload-profile stable \
  --allow-contract-deploy-in-stable

Используйте --nexus, когда выполнение должно использовать встроенные дефолты SORA Nexus из рабочего пространства "upstream".

Контролирование ошибок ​

Когда --faulty является более чем нулевым, должен быть включен хотя бы один сценарий ошибки. Ошибка переключается на включенный по умолчанию, и булевые флаги могут быть отключены с =false.

Ошибка .CLI флагЧто он делает
Сбой и перезагрузка .--fault-enable-crash-restartПотеря и восстановление процессов сверстников
Стирать хранилище и перезапустить--fault-enable-wipe-storageВосстановление после исчезновения местного государства
Недействительный спам транзакций--fault-enable-spam-invalid-transactionsПути приема и отказа
Задержка сети--fault-enable-network-latencyМедленные сплетни и задержанные сообщения консенсуса
Сетевое разделение--fault-enable-network-partitionВременная изоляция с доверенными людьми
P2P потеря пакета--fault-enable-network-packet-lossСнижение трафика в рамках приложений
CPU стресс--fault-enable-cpu-stressМестное давление на проверку и расписание
Насыщение диска--fault-enable-disk-saturationМестное давление хранения

Для курса с исключительной потерей пакетов:

bash
cargo run -p izanami -- \
  --allow-net \
  --peers 20 \
  --faulty 5 \
  --duration 800s \
  --fault-window-start 133s \
  --fault-window-end 266s \
  --tps 200 \
  --submitters 20 \
  --max-inflight 512 \
  --fault-enable-crash-restart=false \
  --fault-enable-wipe-storage=false \
  --fault-enable-spam-invalid-transactions=false \
  --fault-enable-network-latency=false \
  --fault-enable-network-partition=false \
  --fault-enable-network-packet-loss=true \
  --fault-enable-cpu-stress=false \
  --fault-enable-disk-saturation=false \
  --fault-network-packet-loss-percent 75 \
  --seed 42

Используйте --fault-window-start и --fault-window-end для поддержания контролируемого периода стабильного состояния до и после инъекции неисправности. Это облегчает различение шума запуска от эффекта ошибки.

Сценарии формы ​

Каталог Izanami вверх по течению отображает общие формы неисправности коммуникации на блокчейн до профилей CLI.

СценарийТипичная форма
Целевая нагрузка--faulty 0, высокий --tps, один заявитель, высокая --max-inflight
Временная неудачаВключить отказ / перезагрузку только в окне с ограниченным пробоем
Потеря пакетаВключить только потерю пакетов, как правило, с дефолтным уровнем потерь 75%
Прекращение и восстановлениеИспользуйте большую популяцию неисправностей с отказом / перезагрузкой
Изоляция лидеровИспользуйте точно один неисправенный коллега с только сетевой разделения или пакетной потери ошибок; Izanami следует Sumeragi лидер телеметрии

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

Что нужно смотреть ​

Во время работы следите за тем же сигналом, который используется для проверки производительности:

  • прогресс в высоте блока по каждому бегущему партнеру
  • представленные, принятые, отклоненные и завершенные сделки
  • глубина очереди, насыщенность очереди и обратное давление в конечном пункте
  • изменения в просмотре, пути восстановления, отсутствие блоков и отсутствие сертификатов кворума
  • RBC отставание, ожидающие сессии и снижение или задержка консенсусного трафика
  • CPU, память, диск и насыщенность сети на хостере, выполняющем сверстники

Для анализа валидации-задержки включить журналы дебогирования главного цикла:

bash
RUST_LOG=iroha_core::sumeragi::main_loop=debug \
  cargo run -p izanami -- --allow-net --seed 42

Каждый блок должен выделять block validation timings с stateless_ms, execution_ms и total_ms. Сравните эти сроки с интервалами блоков p95, счетчиками изменения просмотра и давлением очереди перед изменением консенсусных таймеров.

Результаты толкования ​

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

Оценить бег как неудачу, если:

  • прогрессные блоки более длинные, чем --progress-timeout
  • высоты одинаков расходятся и не пересоединяются
  • задержка p95 превышает --latency-p95-threshold
  • очереди растут в течение остальной части пробега после закрытия окна неисправности
  • Отказанные или отсроченные операции не объясняются выбранной рабочей нагрузкой.
  • перезагрузка сверстников, стирание хранилища или восстановление потери пакета требует ручной очистки

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