Использовался ли Nginx для балансировки нагрузки
Что проверяют
Для QA это вопрос не про администрирование, а про понимание среды, в которой вы тестируете. Интервьюер хочет услышать, как балансировщик влияет на поведение системы и на воспроизведение багов. Следом часто спрашивают, как вы поняли, что баг живёт только на одной ноде.
Как отвечать
Если настраивали сами, расскажите конкретно. Если нет, честно скажите, что система работала за балансировщиком, и опишите, что из этого следовало для тестов. Опорные знания:
upstream: список бэкендов, на которые проксируются запросы черезproxy_pass. Алгоритм по умолчанию round-robin, естьleast_conn,ip_hash,hash $key consistent, у серверов бываютweightиbackup;- проверки здоровья: в open source Nginx они пассивные, через
max_failsиfail_timeout(по умолчанию 1 ошибка и 10 секунд). Активныеhealth_checkи директиваstickyесть в коммерческой NGINX Plus, в бесплатной версии клиента к ноде привязывают черезip_hashилиhashпо куке; - повторы:
proxy_next_upstreamпри ошибке или таймауте отправляет запрос на следующий бэкенд. Неидемпотентные запросы вродеPOSTпо умолчанию не повторяются, и это стоит проверить отдельно, чтобы не получить двойное списание; - коды ответа:
502значит, что бэкенд недоступен или вернул некорректный ответ,504значит, что он не ответил вовремя, например заproxy_read_timeout.
Что это даёт тестированию. Добавьте в заголовок ответа или в лог $upstream_addr, и станет видно, какая нода обработала запрос. Проверяйте сценарии, когда одна нода выключена или отстаёт по версии во время rolling-деплоя. Нагрузочный тест в k6 или JMeter гоняйте через балансировщик, а не в один инстанс, иначе результат ничего не скажет о проде.
Где спотыкаются
Приписывают себе настройку Nginx, которой не делали. Пара уточнений про upstream и повторы запросов, и это становится очевидно.
Не учитывают локальное состояние: сессии в памяти, файловый кеш на одной ноде. Отсюда баги, которые воспроизводятся через раз.
Путают 502 и 504 и не могут сказать, в какую сторону копать при каждом из них.