Application Load Balancer
Application Load Balancer (ALB) — это тип балансировщика нагрузки, работающий на седьмом (прикладном) уровне модели OSI (Open Systems Interconnection). В отличие от балансировщиков более низких уровней (например, Network Load Balancer, работающего на четвёртом, транспортном уровне), ALB принимает решения о распределении трафика на основе содержимого запросов — HTTP-заголовков, URL-пути, cookies, методов запроса (GET, POST) и других параметров прикладного протокола. Основное назначение ALB — обеспечение высокой доступности, масштабируемости и гибкой маршрутизации трафика для веб-приложений, микросервисных архитектур и API.
Принцип работы
Application Load Balancer выступает в роли единой точки входа для клиентских запросов. Когда пользователь отправляет HTTP- или HTTPS-запрос, ALB перехватывает его, анализирует содержимое и, согласно предварительно настроенным правилам, перенаправляет запрос на один из целевых серверов (backend-серверов). При этом ALB может выполнять функции терминации SSL/TLS, расшифровывая зашифрованный трафик и снимая нагрузку с серверов.
Маршрутизация на основе правил
Ключевая особенность ALB — возможность гибкой маршрутизации. Правила задаются в виде условий и действий. Условия могут включать:
- Путь запроса: например,
/api/направляется на группу серверов API, а/static/— на серверы статического контента. - Имя хоста: запросы к
app.example.comиadmin.example.comмогут обрабатываться разными группами серверов. - HTTP-заголовки: перенаправление запросов с определённым заголовком (например,
User-Agentдля мобильных устройств) на отдельный пул. - Метод запроса: обработка GET-запросов отдельно от POST-запросов.
- Параметры строки запроса: маршрутизация на основе параметров в URL.
- IP-адрес источника: блокировка или перенаправление трафика с определённых IP-адресов.
Действия, выполняемые при совпадении условия, могут включать:
- Перенаправление на указанную целевую группу (target group).
- Редирект на другой URL (например, с HTTP на HTTPS).
- Возврат фиксированного ответа (например, 403 Forbidden или 503 Service Unavailable).
Проверка состояния (Health Checks)
ALB регулярно отправляет запросы на целевые серверы для проверки их работоспособности. Если сервер не отвечает на проверки (например, возвращает код 500 или не отвечает в течение заданного тайм-аута), ALB исключает его из пула и прекращает направлять на него трафик. После восстановления работоспособности сервер автоматически возвращается в пул. Это обеспечивает отказоустойчивость приложения.
Архитектура и компоненты
Слушатель (Listener)
Слушатель — это процесс, который прослушивает входящие соединения на определённом порту (обычно 80 для HTTP и 443 для HTTPS) и протоколе. Каждый слушатель имеет набор правил, определяющих, как обрабатывать запросы. ALB может иметь несколько слушателей, работающих на разных портах и с разными протоколами.
Целевая группа (Target Group)
Целевая группа — это логическая группа серверов (целей), которые обслуживают запросы. Целями могут быть:
- Экземпляры виртуальных машин (например, Amazon EC2, Google Compute Engine).
- Контейнеры (например, в Kubernetes или Amazon ECS).
- Частные IP-адреса (on-premises серверы).
- Lambda-функции (в случае AWS).
Один ALB может маршрутизировать трафик к нескольким целевым группам, и одна целевая группа может быть связана с несколькими слушателями. Для каждой целевой группы настраиваются параметры проверки состояния (health checks).
Балансировщик (Load Balancer)
Сам ALB представляет собой управляемый сервис, который автоматически масштабируется в зависимости от объёма входящего трафика. Пользователь не управляет физическими серверами балансировщика, а только настраивает его конфигурацию. ALB поддерживает несколько зон доступности (availability zones) для обеспечения отказоустойчивости.
Типы балансировщиков и сравнение
На рынке облачных услуг (AWS, Google Cloud, Azure, Яндекс.Облако) и в программных решениях (Nginx, HAProxy, Traefik) существуют разные типы балансировщиков. ALB — один из них, ориентированный на работу с HTTP/HTTPS-трафиком.
| Характеристика | Application Load Balancer (ALB) | Network Load Balancer (NLB) | Classic Load Balancer (CLB) |
|---|---|---|---|
| Уровень OSI | 7 (прикладной) | 4 (транспортный) | 4/7 (гибридный) |
| Протоколы | HTTP, HTTPS, gRPC | TCP, UDP, TLS | HTTP, HTTPS, TCP, SSL |
| Маршрутизация | На основе содержимого запроса (путь, хост, заголовки) | На основе IP-адреса и порта | На основе IP-адреса и порта (ограниченная поддержка содержимого) |
| SSL-терминация | Да | Да (только TLS) | Да |
| Поддержка WebSockets | Да | Да | Нет |
| Поддержка HTTP/2 | Да | Нет | Нет |
| Статические IP | Нет (только DNS-имя) | Да (эластичные IP) | Нет |
| Ценовая модель | За каждый час работы и за единицу LCU (Load Balancer Capacity Units) | За каждый час работы и за единицу NLCU | За каждый час работы и за переданные данные |
Применение
Микросервисная архитектура
ALB является стандартным компонентом для маршрутизации трафика в микросервисных приложениях. Каждый микросервис может быть представлен отдельной целевой группой, а правила маршрутизации настраиваются так, чтобы запросы к /users шли к сервису пользователей, а к /orders — к сервису заказов. Это позволяет изолировать развёртывание и масштабирование отдельных компонентов.
A/B-тестирование и канареечные развёртывания
С помощью ALB можно направлять определённый процент трафика на новую версию приложения (канареечную группу). Например, 10% запросов направляется на версию 2.0, а 90% — на стабильную версию 1.0. Это позволяет тестировать изменения в продакшене с минимальным риском.
Терминация SSL и безопасность
ALB может выполнять расшифровку SSL/TLS-трафика, снимая эту нагрузку с серверов. Это также упрощает управление сертификатами: сертификаты хранятся на ALB, а серверы могут принимать трафик по незашифрованному HTTP. Кроме того, ALB может использоваться для интеграции с Web Application Firewall (WAF) для фильтрации вредоносных запросов.
Обработка запросов от мобильных приложений и SPA
ALB поддерживает HTTP/2, WebSockets и gRPC, что делает его подходящим для современных веб-приложений и мобильных API. Он может эффективно обрабатывать длительные соединения и потоковую передачу данных.
Ограничения
- Отсутствие статического IP-адреса: ALB предоставляет только DNS-имя, что может быть проблемой для приложений, требующих фиксированного IP-адреса (например, для белых списков в брандмауэрах).
- Зависимость от DNS: Балансировка трафика между зонами доступности осуществляется через DNS, что может приводить к задержкам при изменении конфигурации.
- Сложность настройки: Для простых приложений с одним сервером ALB может быть избыточным, и более простые решения (например, Nginx reverse proxy) могут быть более эффективными.
- Стоимость: ALB является управляемым сервисом, и его использование может быть дороже, чем самостоятельная настройка балансировщика на виртуальной машине.
Реализации
Облачные провайдеры
- AWS: AWS Application Load Balancer — один из самых популярных сервисов в экосистеме Amazon Web Services. Тесно интегрирован с другими сервисами AWS (ECS, EKS, Lambda, WAF).
- Google Cloud: Google Cloud Load Balancing (External HTTP(S) Load Balancer) — глобальный балансировщик с поддержкой кросс-региональной маршрутизации.
- Azure: Azure Application Gateway — балансировщик прикладного уровня с поддержкой WAF, URL-маршрутизации и автоматического масштабирования.
- Яндекс.Облако: Yandex Application Load Balancer — сервис, предоставляемый в России, поддерживающий HTTP/HTTPS, gRPC, маршрутизацию по пути и хосту, а также интеграцию с Yandex Certificate Manager.
Программные решения
- Nginx: Может использоваться в качестве балансировщика прикладного уровня с поддержкой маршрутизации по URL, заголовкам и cookies.
- HAProxy: Классический балансировщик, поддерживающий как 4-й, так и 7-й уровень. Имеет гибкие возможности настройки правил.
- Traefik: Современный reverse proxy и балансировщик, часто используемый в контейнерных средах (Docker, Kubernetes). Автоматически обнаруживает сервисы и обновляет конфигурацию.
- Envoy: Высокопроизводительный прокси-сервер, часто используемый в качестве sidecar-контейнера в Service Mesh (например, Istio).
Источники
- AWS Documentation: "What is an Application Load Balancer?" — Amazon Web Services.
- Google Cloud Documentation: "External HTTP(S) Load Balancing overview" — Google Cloud.
- Azure Documentation: "What is Azure Application Gateway?" — Microsoft Azure.
- Яндекс.Облако: "Application Load Balancer" — документация Yandex Cloud.
- "Load Balancing in the Cloud: A Comparative Study of AWS, Azure, and GCP" — Journal of Cloud Computing, 2023.
- "NGINX as an Application Load Balancer" — NGINX Documentation.
- "HAProxy Configuration Manual" — HAProxy Technologies.
- "Traefik Proxy Documentation" — Traefik Labs.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →