Прокси посредничает в обмене между сторонами, а балансировщик распределяет трафик между несколькими обработчиками. Reverse proxy может одновременно выполнять балансировку, но прокси с единственным upstream не обязан быть балансировщиком. Алгоритм распределения, проверки доступности и хранение состояния нужно настраивать отдельно; сами названия не гарантируют отказоустойчивости.
Как работают прокси и балансировка нагрузки и чем различаются их задачи?
Forward proxy, reverse proxy и распределение трафика между экземплярами сервиса: где эти понятия пересекаются и какие ограничения важны при диагностике.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Forward proxy действует со стороны клиента и обращается к целевым ресурсам от его имени. Reverse proxy принимает обращения к сервису и передает их внутреннему серверу. Возможности вроде фильтрации, кеширования или завершения TLS зависят от реализации и конфигурации, а не обязательны для любого прокси.
Балансировка нагрузки решает другую задачу: выбирает обработчик из нескольких экземпляров. Ею может заниматься reverse proxy, но эти термины не синонимы. Прокси может передавать все запросы одному серверу, а балансировщик может работать на транспортном уровне без понимания HTTP.
Например, перед тремя экземплярами приложения расположен Nginx. Он принимает HTTP-запрос и выбирает upstream по настроенному правилу. В документации Nginx описаны, в частности, round-robin, least-connected и IP-hash. Ни один алгоритм не означает, что фактическая вычислительная нагрузка всегда будет одинаковой: запросы различаются по стоимости.
При сопровождении важно понимать, как исключаются недоступные узлы, что происходит с уже открытыми соединениями и разрешены ли повторные попытки. Безусловный повтор запроса, меняющего данные, способен создать повторный бизнес-эффект.
Если состояние сессии хранится только в памяти одного экземпляра, переключение на другой требует отдельного решения. Прикрепление клиента к серверу может помочь маршрутизации, но не заменяет надежное хранение данных. Наконец, сам балансировщик тоже может стать точкой отказа. Поэтому наличие трех серверов за прокси еще не доказывает отказоустойчивость всей системы.