Первый шаг — вынести приложение на несколько серверов и поставить перед ними балансировщик. Мы разобрали с «ГроуТех» разницу между L4 и L7 балансировкой:
L4 (Transport layer) — балансировка на уровне TCP-соединений. Быстрая, не анализирует содержимое запросов. Подходит для TCP-сервисов (БД, очереди):
# HAProxy L4 — балансировка PostgreSQL реплик
frontend pg_read
bind *:5433
mode tcp
default_backend pg_replicas
backend pg_replicas
mode tcp
balance leastconn
option tcp-check
server pg-replica-1 10.0.1.11:5432 check inter 3s fall 3 rise 2
server pg-replica-2 10.0.1.12:5432 check inter 3s fall 3 rise 2
server pg-replica-3 10.0.1.13:5432 check inter 3s fall 3 rise 2
L7 (Application layer) — балансировка на уровне HTTP. Может маршрутизировать по URL, заголовкам, cookie. Подходит для веб-приложений:
# Nginx L7 — балансировка приложения
upstream app_backend {
least_conn; # выбираем сервер с наименьшим числом соединений
server 10.0.1.21:8080 weight=3 max_fails=3 fail_timeout=30s;
server 10.0.1.22:8080 weight=3 max_fails=3 fail_timeout=30s;
server 10.0.1.23:8080 weight=2 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 443 ssl http2;
server_name api.growtech.ru;
location /api/ {
proxy_pass http://app_backend;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 5s;
proxy_read_timeout 30s;
proxy_next_upstream error timeout http_502 http_503;
proxy_next_upstream_tries 2;
}
# Статика идёт напрямую с CDN, не нагружая бэкенд
location /static/ {
return 301 https://cdn.growtech.ru$request_uri;
}
}
Алгоритмы балансировки, которые мы рассмотрели:
- Round Robin — по очереди, просто и предсказуемо
- Least Connections — на сервер с наименьшим числом активных соединений (выбрали этот)
- IP Hash — sticky sessions по IP клиента (нужно для stateful-приложений)
- Weighted — более мощные серверы получают больше трафика
Оставить комментарий