Elastic Load Balancing
Elastic Load Balancing (ELB) — это облачный сервис автоматического распределения входящего трафика между несколькими целевыми ресурсами (например, виртуальными серверами, контейнерами или IP-адресами) в одной или нескольких зонах доступности. Сервис предоставляется компанией Amazon Web Services (AWS) и является частью её инфраструктурной платформы. Основная функция ELB — обеспечение высокой доступности, отказоустойчивости и масштабируемости приложений за счёт равномерной загрузки целевых ресурсов и автоматического исключения неисправных из пула обработки запросов.
История и развитие
Первая версия Elastic Load Balancing была запущена компанией Amazon в мае 2009 года. Изначально сервис представлял собой классический балансировщик нагрузки (Classic Load Balancer, CLB), работавший на четвёртом (транспортном) и седьмом (прикладном) уровнях модели OSI. Он поддерживал протоколы HTTP, HTTPS и TCP и был тесно интегрирован с сервисом Amazon EC2.
В 2016 году AWS представила два новых типа балансировщиков: Application Load Balancer (ALB) и Network Load Balancer (NLB). ALB был оптимизирован для работы на прикладном уровне (HTTP/HTTPS), поддерживал маршрутизацию на основе содержимого запроса (путь, домен, заголовки) и интеграцию с контейнерными сервисами, такими как Amazon ECS и Kubernetes. NLB, в свою очередь, работал на транспортном уровне (TCP/UDP/TLS) и обеспечивал сверхнизкую задержку (до нескольких миллисекунд), что сделало его подходящим для высоконагруженных приложений и протоколов реального времени.
В 2017 году появился Gateway Load Balancer (GWLB), предназначенный для прозрачного внедрения виртуальных сетевых устройств (межсетевых экранов, систем обнаружения вторжений) в сетевую инфраструктуру. GWLB работает на третьем (сетевом) уровне модели OSI и использует протокол GENEVE для инкапсуляции трафика.
В 2021 году AWS объявила о постепенном выводе из эксплуатации Classic Load Balancer (CLB), рекомендовав пользователям мигрировать на ALB или NLB.
Типы балансировщиков нагрузки
Elastic Load Balancing включает четыре основных типа балансировщиков, каждый из которых оптимизирован для определённых сценариев использования.
Classic Load Balancer (CLB)
Устаревший тип, поддерживающий базовые функции балансировки на транспортном и прикладном уровнях. CLB распределяет трафик между экземплярами Amazon EC2, используя простые алгоритмы (например, round-robin) и проверки состояния (health checks). Не поддерживает маршрутизацию на основе содержимого запроса и интеграцию с контейнерными оркестраторами. Рекомендуется использовать только для приложений, которые не могут быть адаптированы под ALB или NLB.
Application Load Balancer (ALB)
Работает на седьмом уровне модели OSI (прикладной уровень) и предназначен для HTTP и HTTPS-трафика. ALB поддерживает:
- Маршрутизацию на основе хоста (host-based routing) — направление запросов на разные целевые группы в зависимости от доменного имени.
- Маршрутизацию на основе пути (path-based routing) — распределение запросов по URL-путям (например,
/api,/static). - Поддержку контейнерных сред (Amazon ECS, Amazon EKS, AWS Fargate) с динамическим управлением портами.
- Аутентификацию пользователей через Amazon Cognito или OpenID Connect.
- Завершение SSL/TLS-соединений (SSL offloading).
- Встроенную поддержку HTTP/2 и WebSocket.
Network Load Balancer (NLB)
Работает на четвёртом уровне модели OSI (транспортный уровень) и обеспечивает балансировку TCP, UDP и TLS-трафика. Ключевые характеристики:
- Сверхнизкая задержка (обычно менее 100 мс) за счёт работы на уровне ядра операционной системы.
- Поддержка статических IP-адресов (Elastic IP) для каждого узла балансировщика.
- Сохранение исходного IP-адреса клиента (preserve client IP) при передаче запроса целевым ресурсам.
- Возможность балансировки трафика на основе протоколов, не поддерживаемых ALB (например, SIP, DNS, SSH).
- Интеграция с AWS Global Accelerator для глобальной балансировки.
Gateway Load Balancer (GWLB)
Работает на третьем уровне модели OSI (сетевой уровень) и предназначен для прозрачного внедрения виртуальных сетевых устройств. GWLB использует протокол GENEVE (Generic Network Virtualization Encapsulation) для инкапсуляции трафика. Основные сценарии использования:
- Интеграция с межсетевыми экранами (firewalls) от сторонних производителей (Palo Alto Networks, Fortinet, Check Point).
- Внедрение систем обнаружения и предотвращения вторжений (IDS/IPS).
- Развёртывание систем глубокого анализа пакетов (DPI).
Принцип работы
Elastic Load Balancing функционирует на основе следующих компонентов и механизмов:
Целевые группы (Target Groups)
Каждый балансировщик направляет трафик в одну или несколько целевых групп. Целевая группа может содержать:
- Экземпляры Amazon EC2.
- IP-адреса (в том числе локальные on-premises серверы).
- Функции AWS Lambda (только для ALB).
- Контейнеры, зарегистрированные в Amazon ECS или Amazon EKS.
Проверки состояния (Health Checks)
Балансировщик регулярно отправляет запросы (например, HTTP GET на определённый путь) к каждому целевому ресурсу. Если ресурс не отвечает в течение заданного тайм-аута или возвращает код ошибки, он считается нездоровым и временно исключается из пула обработки запросов. После восстановления работоспособности ресурс автоматически возвращается в пул.
Алгоритмы балансировки
Для распределения трафика используются различные алгоритмы:
- Round-robin — запросы распределяются по очереди между здоровыми ресурсами.
- Least outstanding requests (наименьшее количество необработанных запросов) — используется в ALB для более равномерной загрузки.
- Flow hash (хэширование потока) — используется в NLB для обеспечения сохранения сессии (sticky sessions) на основе IP-адреса и порта.
Зоны доступности (Availability Zones)
Балансировщик автоматически распределяет трафик между целевыми ресурсами, расположенными в разных зонах доступности AWS. В случае выхода из строя целой зоны доступности балансировщик перенаправляет трафик только на здоровые зоны.
Применение и значение
Elastic Load Balancing является ключевым компонентом архитектуры микросервисов, контейнерных сред и высоконагруженных веб-приложений. Основные сценарии использования:
- Веб-приложения и API — ALB используется для распределения HTTP-трафика между несколькими экземплярами приложения, обеспечивая масштабирование по требованию.
- Базы данных и критически важные сервисы — NLB применяется для балансировки TCP-соединений к базам данных (например, Amazon RDS) или кэш-серверам (Amazon ElastiCache).
- Сетевые устройства — GWLB позволяет прозрачно внедрять межсетевые экраны и системы безопасности в облачную инфраструктуру.
- Гибридные и мультиоблачные среды — балансировщики могут направлять трафик на ресурсы, расположенные как в AWS, так и в локальных дата-центрах или других облачных провайдерах.
Ограничения и критика
Несмотря на широкие возможности, Elastic Load Balancing имеет ряд ограничений:
- Стоимость — каждый балансировщик взимает плату за час работы и за объём обработанного трафика (в гигабайтах). Для небольших проектов это может быть существенной статьёй расходов.
- Задержка — хотя NLB обеспечивает минимальную задержку, ALB и GWLB вносят дополнительную задержку из-за обработки на прикладном уровне.
- Зависимость от AWS — сервис является проприетарным и не может быть развёрнут за пределами облачной инфраструктуры Amazon.
- Сложность настройки — для нетривиальных сценариев (например, маршрутизация на основе содержимого запроса или интеграция с AWS WAF) требуется глубокое понимание сетевых протоколов и архитектуры AWS.
Интересные факты
- Elastic Load Balancing поддерживает автоматическое масштабирование целевых ресурсов через интеграцию с сервисом Auto Scaling. При увеличении нагрузки балансировщик может автоматически запускать новые экземпляры EC2.
- ALB поддерживает отправку логов доступа (access logs) в Amazon S3, что позволяет анализировать трафик и выявлять аномалии.
- NLB может быть настроен на использование статических IP-адресов, что упрощает настройку DNS и межсетевых экранов.
- Gateway Load Balancer использует протокол GENEVE, который является открытым стандартом, разработанным при участии Microsoft и других компаний.
Источники
- Amazon Web Services. «Elastic Load Balancing — User Guide». AWS Documentation.
- Amazon Web Services. «What is Elastic Load Balancing?». AWS Developer Guide.
- Amazon Web Services. «New – Gateway Load Balancer for Third-Party Virtual Appliances». AWS News Blog, 2020.
- Amazon Web Services. «Classic Load Balancer Retirement». AWS Announcements, 2021.
- Vogels, Werner. «Elastic Load Balancing — A Closer Look». All Things Distributed, 2009.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →