Знакомы ли вы с балансировщиками
Что проверяют
Понимаете ли вы, как устроено окружение, которое тестируете, и свяжете ли странный баг с тем, что запросы ходят на разные серверы. Настраивать Nginx от тестировщика не ждут, но ждут, что вы узнаете симптомы проблем балансировки. Следом обычно спрашивают, как бы вы проверили поведение системы при отказе одного из узлов.
Как отвечать
Суть: балансировщик распределяет запросы между несколькими экземплярами сервиса. Дальше назовите то, что влияет на тестирование:
- уровень: L4 распределяет TCP-соединения, не заглядывая внутрь, L7 понимает HTTP и маршрутизирует по пути, заголовкам, cookie. Примеры: Nginx, HAProxy, Envoy, Ingress в Kubernetes, облачные балансировщики вроде Application Load Balancer в Yandex Cloud или AWS ALB;
- алгоритм: round robin (у Nginx по умолчанию), least connections, хэш по IP клиента, веса;
- health checks: балансировщик перестаёт слать трафик на узел, который не отвечает. У открытого Nginx проверки пассивные, по неудачным запросам, у HAProxy есть и активные;
- sticky sessions: привязка клиента к одному узлу, обычно по cookie.
Что это даёт в работе QA. Баг воспроизводится через раз: возможно, на одном из узлов другая версия после неудачной раскатки или устаревший локальный кэш. Чтобы найти узел, просите разработчиков отдавать его имя в заголовке ответа или ищите запрос в логах по request id. Коды 502 и 504 обычно отдаёт сам балансировщик: 502 значит, что бэкенд отказал в соединении или вернул неверный ответ, 504 значит, что не уложился в таймаут. Нагрузочный тест гоняют через балансировщик, как ходят пользователи, а не напрямую в один экземпляр.
Если лично с балансировщиками не работали, скажите это и покажите, как проверили бы отказ узла: остановить один экземпляр под нагрузкой и смотреть на ошибки и время ответа.
Где спотыкаются
Путают балансировку нагрузки с нагрузочным тестированием из-за похожих слов.
Тестируют только с включёнными sticky sessions и пропускают баги, когда состояние сессии хранится в памяти одного узла.
Не знают, что за балансировщиком сервер видит его IP, а реальный адрес клиента приходит в X-Forwarded-For. Отсюда баги в логах, геолокации и лимитах по IP.