Ответ
В AWS я выбираю балансировщик в зависимости от модели трафика и требований приложения.
1. Application Load Balancer (ALB) — Уровень 7 (HTTP/HTTPS)
- Для чего: Идеален для современных веб-приложений и микросервисов.
- Ключевые особенности:
- Маршрутизация на основе содержимого: Можно направлять трафик на разные целевые группы (Target Groups) в зависимости от пути URL (
/api/*,/static/*), доменного имени (host header) или query-параметров. - Поддержка WebSockets и HTTP/2 "из коробки".
- Интеграция с AWS WAF и Shield для безопасности.
- ALB видит IP-адрес клиента в заголовке
X-Forwarded-For.
- Маршрутизация на основе содержимого: Можно направлять трафик на разные целевые группы (Target Groups) в зависимости от пути URL (
2. Network Load Balancer (NLB) — Уровень 4 (TCP/UDP/TLS)
- Для чего: Для сценариев, требующих экстремальной производительности, низких задержек и сохранения исходного IP-адреса клиента.
- Ключевые особенности:
- Обрабатывает миллионы запросов в секунду с постоянной низкой задержкой.
- Сохранение исходного IP: Целевые инстансы видят реальный IP-адрес клиента, а не IP балансировщика. Критично для whitelisting.
- Поддержка статических IP: Можно привязать Elastic IP к NLB.
- Используется для балансировки не-HTTP трафика: игровых серверов, баз данных, VoIP.
3. Classic Load Balancer (CLB) — Уровни 4 и 7 (устаревший)
- Для чего: В основном для поддержки legacy-приложений, мигрировавших из EC2-Classic. Для новых проектов я его не использую.
- Ограничения: Нет продвинутой маршрутизации как в ALB, менее гибкий, чем NLB.
Сводка выбора:
- Веб-API / сайт (HTTP/HTTPS) → ALB.
- Игровой сервер, FTP, кастомный TCP-протокол, высокие нагрузки → NLB.
- Старое приложение → CLB (или лучше мигрировать на ALB/NLB).