Ответ
Балансировка нагрузки (Load Balancing) — это распределение входящего сетевого трафика между несколькими серверами (бэкендами) для повышения производительности, отказоустойчивости и обеспечения горизонтального масштабирования приложения.
Основные типы балансировщиков:
- L4 (Transport Layer): Работает на уровне TCP/UDP. Принимает решение на основе IP-адресов и портов. Быстрый, но не анализирует содержимое запросов. Примеры: Nginx (stream-модуль), HAProxy в режиме TCP, AWS Network Load Balancer (NLB).
- L7 (Application Layer): Работает на уровне HTTP/HTTPS. Может анализировать заголовки, URI, cookies и перенаправлять трафик на основе содержимого запроса. Позволяет реализовать более сложную логику маршрутизации. Примеры: Nginx (http-модуль), HAProxy в режиме HTTP, AWS Application Load Balancer (ALB), Traefik.
Распространенные алгоритмы балансировки:
- Round Robin: Запросы поочередно распределяются по серверам в списке.
- Least Connections: Новый запрос отправляется на сервер с наименьшим количеством активных соединений.
- IP Hash: Сервер для клиента определяется хэшем его IP-адреса, что обеспечивает сохранение сессии (sticky session).
Пример конфигурации балансировщика Nginx (L7):
http {
upstream backend_servers {
# Определяем группу бэкенд-серверов
server 10.0.1.10:8080 weight=3; # Сервер с большим весом получит больше трафика
server 10.0.1.11:8080;
server 10.0.1.12:8080 backup; # Резервный сервер (используется, если основные недоступны)
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
Ключевые преимущества:
- Повышение доступности: При падении одного сервера трафик автоматически перенаправляется на работающие.
- Горизонтальное масштабирование: Легко добавить новый сервер в пул для обработки возросшей нагрузки.
- Управление трафиком: Возможность A/B-тестирования, канареечных релизов (canary releases) и обслуживания без простоя (zero-downtime deployment).