← Назад к вопросам

Для чего нужен балансировщик нагрузки?

2.0 Middle🔥 61 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Балансировщик нагрузки (Load Balancer)

Определение

Балансировщик нагрузки (LB) — это система или устройство, которое распределяет входящий трафик между несколькими серверами для оптимизации использования ресурсов, увеличения пропускной способности и обеспечения высокой доступности приложения.

Основные функции

1. Распределение трафика

Распределяет запросы клиентов между несколькими серверами в соответствии с выбранной стратегией:

Клиент → Load Balancer → { Сервер 1, Сервер 2, Сервер 3 }

2. Масштабируемость (Scalability)

Позволяет добавлять новые серверы без изменения адреса приложения:

// Клиент подключается к одному адресу
URL: http://api.example.com

// Behind the scenes:
Balancer распределяет между 10+ серверами

3. Высокая доступность (High Availability)

Если один сервер падает, запросы автоматически перенаправляются на рабочие:

Сервер 1 ↓ (offline) → LB пропускает запросы
Сервер 2 ✓ (online)  → LB отправляет запросы
Сервер 3 ✓ (online)  → LB отправляет запросы

Алгоритмы распределения

1. Round Robin (Циклический)

Запросы распределяются по очереди:

Запрос 1 → Сервер A
Запрос 2 → Сервер B
Запрос 3 → Сервер C
Запрос 4 → Сервер A

Проста, но не учитывает мощность серверов.

2. Least Connections (Минимум соединений)

Отправляет запрос на сервер с наименьшим числом активных соединений:

Сервер A: 5 соединений
Сервер B: 2 соединения ← выбираем этот
Сервер C: 8 соединений

3. Weighted Round Robin (Взвешенный циклический)

Учитывает мощность каждого сервера:

Сервер A (мощный): вес 3
Сервер B (слабый): вес 1

Распределение: AAA B AAA B ...

4. IP Hash (По хешу IP адреса)

Один клиент всегда идет на один сервер:

serverId = hash(clientIP) % serverCount
// Важно для session persistence

Примеры популярных балансировщиков

Облачные сервисы

  • AWS ELB/ALB — Amazon Elastic Load Balancer
  • Google Cloud Load Balancer
  • Azure Load Balancer

Open Source

  • Nginx — высокопроизводительный веб-сервер и балансировщик
  • HAProxy — специализированный балансировщик
  • Apache mod_proxy

На уровне приложения (Java)

  • Spring Cloud Load Balancer — для микросервисов
  • Ribbon (deprecated, используй Spring Cloud)
  • Consul — service discovery + балансировка

Практический пример с Nginx

upstream backend {
    server server1.example.com weight=3;
    server server2.example.com weight=1;
    server server3.example.com;
}

server {
    listen 80;
    server_name api.example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Health Checks (Проверка здоровья)

Балансировщик периодически проверяет, живы ли серверы:

Cпособ: POST /health/check
Период: каждые 5 сек
Тайм-аут: 2 сек

Если сервер не ответил 3 раза подряд → помечается offline

Session Persistence (Sticky Sessions)

Для stateful приложений может потребоваться отправлять запросы одного клиента на один сервер:

// IP Hash или Cookie-based routing
Set-Cookie: LB_SERVER_ID=server2
// Все будущие запросы будут на server2

Преимущества для Java приложений

  1. Масштабирование — легко добавить новые Tomcat инстансы
  2. Отказоустойчивость — приложение живо даже если один сервер упал
  3. Performance — нагрузка распределена, нет перегруза одного сервера
  4. Обновления без downtime — постепенно выводим серверы из ротации
  5. Гибкость — можно менять стратегию распределения на лету

Типичная архитектура

Интернет
   ↓
[Load Balancer] (точка входа, одна видимая IP)
   ↓
[WAF/DDoS Protection] (опционально)
   ↓
┌─────────────┬──────────────┬──────────────┐
│  App 1      │  App 2       │  App 3       │
│  Tomcat:8080│  Tomcat:8080 │  Tomcat:8080 │
└─────────────┴──────────────┴──────────────┘
   ↓ ↓ ↓
[Shared Database]

Балансировщик нагрузки — критический компонент любой высоконагруженной системы. Без него не обойтись при масштабировании.

Для чего нужен балансировщик нагрузки? | PrepBro