Что такое хаос-инжиниринг?
Хаос-инжиниринг — дисциплина экспериментирования над распределённой системой для укрепления уверенности в её способности выдерживать турбулентные условия в продакшене. Пионером стал Netflix, создавший Chaos Monkey для случайного завершения продакшен-инстансов.
Ключевая идея: вместо ожидания неожиданных сбоев, проактивно инъектировать сбои и наблюдать реакцию системы.
Принципы
- Сформулируйте гипотезу о стабильном состоянии. Определите «нормальное»: error rate, латентность, throughput.
- Варьируйте реальные события. Инъектируйте реальные сбои: крэши, сетевые партиции, заполнение диска.
- Проводите эксперименты в продакшене. Начинайте в staging, продвигайтесь к продакшену.
- Автоматизируйте для непрерывного выполнения.
- Минимизируйте радиус поражения. Начинайте с малого.
Жизненный цикл эксперимента
Шаг 1: Определение стабильного состояния
Error rate < 0.1%, P95 < 200мс, health checks проходят, завершение заказов > 99%.
Шаг 2: Гипотеза
«Если мы завершим один инстанс платёжного сервиса, система продолжит обработку платежей без роста error rate.»
Шаг 3: Проектирование
- Цель: Платёжный сервис, один инстанс
- Тип сбоя: Завершение процесса
- Длительность: 5 минут
- Критерии прекращения: Error rate > 1% или P95 > 1 секунды
Шаг 4: Выполнение
С активным мониторингом и готовым kill switch.
Шаг 5: Анализ
Сравнение метрик во время и после эксперимента со стабильным состоянием.
Шаг 6: Исправление и повторение
Типы экспериментов
| Эксперимент | Что тестирует | Пример |
|---|---|---|
| Завершение инстанса | Авто-масштабирование, балансировка | Убить случайный под/VM |
| Сетевая задержка | Обработка таймаутов, retry | Добавить 500мс задержки |
| Сетевая партиция | Консистентность, split-brain | Блокировать трафик между сервисами |
| Заполнение диска | Логирование, обработка данных | Заполнить диск на 100% |
| Стресс CPU/памяти | Throttling, лимиты ресурсов | Потребить 90% CPU |
| Сбой зависимости | Circuit breakers, fallbacks | Сделать внешний API недоступным |
Инструменты
| Инструмент | Тип | Лучше всего для |
|---|---|---|
| Chaos Monkey | Open source (Netflix) | Случайное завершение инстансов |
| Litmus | Open source (CNCF) | Kubernetes-нативные эксперименты |
| Gremlin | SaaS | Enterprise chaos-as-a-service |
| Toxiproxy | Open source (Shopify) | Симуляция сетевых условий |
Упражнение: Спроектируйте хаос-эксперимент
Ваше e-commerce приложение: API gateway, сервис продуктов, корзина, платежи, уведомления, PostgreSQL, Redis. Спроектируйте три эксперимента возрастающего риска.
Решение
Эксперимент 1: Сбой кэша Redis (Низкий риск)
Гипотеза: При недоступности Redis приложение продолжает работу через fallback к БД. Инъекция: Остановить Redis-контейнер на 5 минут. Ожидание: Время ответа растёт до 500-800мс, без ошибок.
Эксперимент 2: Сбой инстанса платежей (Средний риск)
Гипотеза: При гибели одного из трёх инстансов балансировщик перенаправляет на здоровые. Инъекция: Убить под платёжного сервиса. Ожидание: Kubernetes перезапускает за 30с. Без неуспешных платежей.
Эксперимент 3: Сетевая партиция (Повышенный риск)
Гипотеза: При недоступности сервиса инвентаря сервис продуктов отдаёт кэшированные данные. Инъекция: Блокировать сеть между product-service и inventory-service на 3 минуты.
Ключевые выводы
- Хаос-инжиниринг — проактивное тестирование устойчивости
- Всегда определяйте стабильное состояние первым
- Начинайте с малого и эскалируйте
- Автоматизируйте и повторяйте
- QA привносит уникальную ценность — навыки проектирования тестов и знание мониторинга