Короткий ответ
Нужно сформулировать конкретную гипотезу об ожидаемом поведении при отказе зависимости, начать эксперимент в тестовой среде или с минимальным blast radius в проде (небольшая доля трафика/инстансов), подготовить мониторинг и немедленный способ остановки эксперимента, и заранее определить критерии успеха/провала.
Как это работает подробнее
эксперимент моделирует конкретный тип отказа зависимости — не просто "выключить", а реалистичные сценарии: таймаут (зависимость отвечает медленно), ошибки (зависимость отвечает 5xx), полная недоступность (соединение не устанавливается). Для каждого сценария ожидаемое поведение системы может отличаться (например, graceful degradation при таймауте, но полный отказ при недоступности, если fallback не предусмотрен).
Пример / кейс
Ожидаемое поведение: при инъекции задержки 3с для 5% трафика к auth-service основной сервис должен либо использовать таймаут и fallback (например, разрешить гостевой чекаут), либо корректно показать пользователю ошибку без каскадного падения; превышение `checkout_error_rate` выше 1% автоматически останавливает эксперимент.
Пример кода
# Пример эксперимента (псевдо-конфигурация chaos-инструмента на уровне service mesh)
experiment:
target: auth-service
fault: latency
amount_ms: 3000
traffic_percentage: 5
duration: 10m
abort_conditions:
- metric: checkout_error_rate
threshold: 1%Что использовать на практике
- Практический подход. Эксперимент проводят с инструментами внедрения сбоев на уровне сети/прокси (задержка, сброс соединений, инъекция ошибок) с ограничением по времени и доле трафика, при постоянном наблюдении ключевых метрик (ошибки, latency, бизнес-метрики), и с заранее готовым "выключателем" для немедленной остановки при превышении допустимого влияния на пользователей.
Подводные камни
- Частые ошибки. Запускать эксперимент сразу на весь прод-трафик без постепенного увеличения blast radius; не формулировать явную гипотезу и критерии успеха, из-за чего результат эксперимента нельзя однозначно интерпретировать; тестировать только полную недоступность зависимости, упуская более частый и коварный сценарий — частичную деградацию (повышенная latency, частичные ошибки).