В чем разница между балансировщиками нагрузки ALB, NLB и CLB в AWS?

«В чем разница между балансировщиками нагрузки ALB, NLB и CLB в AWS?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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.

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).