Что такое тестирование отказоустойчивости (Failover Testing)?

«Что такое тестирование отказоустойчивости (Failover Testing)?» — вопрос из категории Тестирование производительности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные цели:

  1. Верификация автоматического восстановления. Система должна обнаружить сбой и выполнить переключение без ручного вмешательства.
  2. Измерение ключевых метрик:
    • RTO (Recovery Time Objective): Максимально допустимое время восстановления работы после сбоя.
    • RPO (Recovery Point Objective): Максимальный объем данных (по времени), допустимый к потере (например, транзакции за последние 5 секунд).
  3. Проверка целостности данных и сессий после переключения.

Типичный сценарий для веб-приложения с балансировщиком нагрузки:

# 1. Система в нормальном состоянии: трафик идет на Primary Server.
# 2. Имитация сбоя:
sudo systemctl stop nginx  # Остановка веб-сервера на основном узле
# или
sudo iptables -A INPUT -p tcp --dport 80 -j DROP # Блокировка порта

# 3. Ожидаемое поведение системы:
#    - Мониторинг (например, Health Check от Load Balancer) обнаруживает недоступность Primary.
#    - Load Balancer исключает узел из пула и перенаправляет трафик на Standby Server.
#    - Пользователи могут испытывать короткую задержку, но не теряют активные сессии.
#    - Критичные транзакции не теряются (журналируются или реплицируются).

Что тестируется:

  • Отказ сервера приложения или базы данных.
  • Обрыв сетевого соединения или сбой DNS.
  • Отказ диска или аппаратного компонента.
  • Перегрузка одного из узлов кластера.

Инструменты: Для автоматизации таких тестов используются Chaos Engineering инструменты (Chaos Monkey, Gremlin), средства оркестрации (Kubernetes, который может перезапускать поды) и скрипты для имитации сбоев.