Облачные вычисления
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 перед двумя регионами?