Ответ
Балансировщик нагрузки (Load Balancer, LB) может быть реализован на разных уровнях сетевой модели OSI, решая различные задачи:
| Уровень | Назначение | Технологии/Примеры |
|---|---|---|
| DNS-уровень | Распределение запросов между географически разными центрами обработки данных (GSLB). Простой Round Robin или с учетом здоровья. | Route 53 (AWS), Cloud DNS (GCP). |
| Сетевой (L4) | Балансировка на основе IP-адресов, портов и протоколов (TCP/UDP). Не анализирует содержимое пакетов. | Nginx (stream), HAProxy (mode tcp), AWS Network Load Balancer (NLB). |
| Прикладной (L7) | Балансировка на основе содержимого HTTP/HTTPS запросов (URL, заголовки, cookies). Позволяет маршрутизировать запросы к разным сервисам. | Nginx (http), HAProxy (mode http), AWS Application Load Balancer (ALB), Ingress-контроллеры в Kubernetes (например, ingress-nginx). |
| Внутри кластера | Балансировка трафика между экземплярами (подами) одного сервиса внутри платформы оркестрации. | Kubernetes Service (тип ClusterIP с селектором), Istio (sidecar-прокси). |
| На стороне клиента | Клиент (микросервис) сам выбирает экземпляр сервера из списка, полученного от service discovery. | Ribbon (в стеке Spring Cloud Netflix), gRPC-клиенты с балансировкой. |
Пример конфигурации Nginx (L7) для балансировки между двумя бэкендами:
http {
upstream backend_servers {
# Алгоритм балансировки (по умолчанию round-robin)
server 10.0.1.1:8080 weight=3; # Сервер с большим весом
server 10.0.1.2:8080;
server 10.0.1.3:8080 backup; # Резервный сервер
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
# Передаем заголовок с реальным IP клиента
proxy_set_header X-Real-IP $remote_addr;
}
}
}
Выбор уровня: L4 — для производительности и непрозрачных протоколов (базы данных, игровые серверы). L7 — для интеллектуальной маршрутизации в веб-приложениях и API.