Облачные вычисления

Load Balancing и CDN

В 2021 году Facebook потерял ориентировочно 60 млн долларов за 6 часов простоя из-за ошибки конфигурации BGP. Причина - отсутствие грамотного multi-region балансировщика. AWS строит целый стек инструментов, чтобы такое было невозможно: ALB, NLB, CloudFront и Global Accelerator - каждый решает свою задачу в пирамиде надёжности.

  • **Netflix** использует CloudFront для доставки видео: 15% всего мирового интернет-трафика проходит через CDN Netflix, снижая задержку воспроизведения с секунд до миллисекунд
  • **Twitch** применяет NLB перед серверами RTMP-потокового вещания - протокол не HTTP, поэтому ALB не подходит, а NLB обеспечивает субмиллисекундную задержку при миллионах параллельных потоков
  • **Salesforce CRM** маршрутизирует корпоративный трафик через Global Accelerator: клиенты в Австралии подключаются к ближайшему PoP, а затем трафик идёт по приватной сети AWS до us-east-1, минуя нестабильный публичный интернет

Application Load Balancer (ALB)

В 2016 году AWS обработал «Monday.com Incident»: сайт для управления проектами лёг под нагрузкой распродажи - 50 000 запросов в секунду на один EC2-инстанс. Причина была не в нехватке мощности, а в отсутствии балансировщика. **Application Load Balancer (ALB)** работает на уровне L7 (HTTP/HTTPS) и распределяет запросы по целевым группам на основе URL-пути, заголовков и даже содержимого тела. Netflix направляет `/api/recommendations` в один кластер микросервисов, а `/api/streaming` - в другой, используя одно DNS-имя.

ALB поддерживает content-based routing: path-based (`/images/*` -> S3 targets), host-based (`api.example.com` vs `www.example.com`), query-string routing и weighted target groups для blue/green деплоя. Sticky sessions реализованы через cookie AWSALB с настраиваемым TTL.

Какой тип маршрутизации ALB позволяет направить запросы `/api/v2/*` в одну целевую группу, а `/static/*` - в другую?

Network Load Balancer (NLB)

Если ALB - это умный почтальон, читающий письма, то **Network Load Balancer (NLB)** - курьер, который смотрит только на адрес на конверте. Работая на уровне L4 (TCP/UDP/TLS), NLB способен обрабатывать миллионы запросов в секунду с задержками порядка сотен микросекунд. Именно NLB стоит перед биржевыми торговыми системами и игровыми серверами, где лишние 10 мс задержки стоят реальных денег. AWS гарантирует статические IP-адреса для NLB - критично для партнёров, которые whitelist-ят ваши IP в своих файрволах.

NLB сохраняет source IP клиента прозрачно для backend-сервиса (в отличие от ALB, где нужен заголовок X-Forwarded-For). Поддерживает Elastic IP для каждой AZ, что позволяет партнёрам прописать фиксированный список IP. Cross-zone load balancing опционален и влияет на стоимость (трафик между AZ тарифицируется).

Торговая платформа требует, чтобы партнёры могли добавить фиксированные IP балансировщика в свой файрвол. Какой балансировщик AWS подходит лучше всего?

CloudFront CDN

Amazon Prime Video - 200 млн подписчиков. Скорость загрузки видео в Бразилии не должна зависеть от того, что Origin-сервер стоит в us-east-1. **CloudFront** решает это через сеть из более чем 600 точек присутствия (PoP) в 90+ городах: пользователь получает контент с ближайшего edge-узла, а не с другого конца планеты. Разница - не в удобстве, а в физике: скорость света в оптоволокне составляет около 200 000 км/с, и 12 000 км до Бразилии добавляют минимум 60 мс латентности.

CloudFront кеширует по Cache-Control и TTL. Для динамических запросов PoP всё равно выгоден - TCP-соединение устанавливается до ближайшего узла, затем идёт по оптимизированной магистрали AWS до Origin. Invalidation стоит USD 0.005 за путь (первые 1000 бесплатны). Origin Shield добавляет региональный кеш-слой между PoP и Origin для снижения нагрузки на origin.

Какой механизм CloudFront снижает нагрузку на Origin-сервер, добавляя промежуточный кеш-слой между edge-узлами и Origin?

AWS Global Accelerator

На первый взгляд Global Accelerator похож на CloudFront - обе службы используют глобальные точки присутствия AWS. Но принципиальная разница: CloudFront кеширует контент, а **Global Accelerator** перенаправляет TCP/UDP-трафик напрямую к backend-серверам по внутренней сети AWS, минуя публичный интернет. Публичный интернет непредсказуем: маршруты BGP меняются, пакеты теряются. Сеть AWS - это выделенные магистрали с SLA. Salesforce использует Global Accelerator для CRM-трафика корпоративных клиентов именно из-за стабильности.

Global Accelerator выдаёт 2 статических anycast IP-адреса, работающих глобально. Трафик входит в сеть AWS на ближайшем PoP и далее идёт по приватной магистрали. Поддерживает health checks и автоматический failover между регионами за 30-60 секунд. Стоит от USD 0.025 за час + трафик - дороже CloudFront, зато работает с любым TCP/UDP-протоколом.

Global Accelerator и CloudFront взаимозаменяемы - оба ускоряют глобальный трафик

CloudFront ускоряет за счёт кеширования HTTP-контента, Global Accelerator - за счёт маршрутизации по приватной сети AWS без кеша

Путаница возникает из-за того, что оба сервиса используют PoP-инфраструктуру AWS. Но механизм ускорения принципиально разный: кеш vs. лучший путь.

Чем принципиально отличается AWS Global Accelerator от CloudFront CDN?

Ключевые идеи

  • **ALB (L7)** - умный балансировщик для HTTP: path/host/header routing, weighted target groups для canary, gRPC и WebSocket из коробки
  • **NLB (L4)** - быстрый pass-through балансировщик: субмиллисекундная задержка, статические Elastic IP, прозрачная передача source IP клиента
  • **CloudFront** ускоряет HTTP через кеширование на 600+ PoP; **Global Accelerator** ускоряет любой TCP/UDP через маршрутизацию по приватной сети AWS - это разные инструменты для разных задач

Связанные темы

Load Balancing и CDN работают поверх сетевой инфраструктуры AWS:

  • VPC и сетевая изоляция — ALB и NLB размещаются внутри VPC; subnet-ы и security groups определяют доступность балансировщиков
  • DNS и Route 53 — Route 53 направляет трафик к ALB/NLB через alias-записи; с Global Accelerator выдаются anycast IP вместо DNS

Вопросы для размышления

  • Приложение использует WebSocket для real-time уведомлений и REST API для данных. Какую комбинацию балансировщиков выбрать и почему?
  • Почему CDN ускоряет даже некешируемые API-запросы - и стоит ли это ускорение затрат?
  • Как бы проходил failover при отказе целого региона AWS, если в архитектуре стоит Global Accelerator перед двумя регионами?

Связанные уроки

  • net-40-cdn
Load Balancing и CDN

0

1

Войти