Gymterview
junior

Что такое балансировка нагрузки (load balancing)?

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

Пример кода
         Клиенты
      ┌────┬────┬────┐
      │    │    │    │
      ▼    ▼    ▼    ▼
  ┌─────────────────────┐
  │   Load Balancer     │
  │   (Nginx / HAProxy  │
  │    / AWS ALB)       │
  └──┬──────┬──────┬────┘
     │      │      │
     ▼      ▼      ▼
  ┌──────┐┌──────┐┌──────┐
  │App 1 ││App 2 ││App 3 │
  └──────┘└──────┘└──────┘

Алгоритмы балансировки

  • Round Robin – запросы распределяются по очереди. Простой, но не учитывает текущую нагрузку серверов.
  • Weighted Round Robin – учитывает веса (мощность) серверов. Более мощный сервер получает больше запросов.
  • Least Connections – запрос направляется к серверу с наименьшим числом активных соединений. Хорош при неравномерных по длительности запросах.
  • Least Response Time – к серверу с минимальным временем отклика.
  • IP Hash – определение сервера по хешу IP-адреса клиента. Гарантирует, что один клиент всегда попадает на один сервер (sticky sessions).
  • Random – случайный выбор сервера. Прост в реализации и при большом числе узлов статистически близок к Round Robin.

L4 vs L7 балансировка

Аспект L4 (транспортный уровень) L7 (уровень приложения)
Уровень OSI 4 (TCP/UDP) 7 (HTTP/HTTPS)
Что видит IP-адреса, порты URL, заголовки, cookies, тело запроса
Скорость Быстрее (не разбирает содержимое) Медленнее (анализирует HTTP)
Возможности Простая маршрутизация Content-based routing, A/B-тестирование, SSL termination
Примеры HAProxy (L4 mode), AWS NLB Nginx, HAProxy (L7 mode), AWS ALB
Применение TCP-сервисы, БД, высокопроизводительная маршрутизация Веб-приложения, REST API, микросервисы

L7 балансировка позволяет маршрутизировать по содержимому запроса:

Пример
/api/payments  →  Payment Service (3 инстанса)
/api/clients   →  Client Service (2 инстанса)
/api/reports   →  Report Service (1 инстанс)

Health Checks

Балансировщик периодически проверяет доступность серверов. Неработающие серверы исключаются из пула до восстановления. В Spring Boot для этого используется Spring Actuator (эндпоинт /actuator/health), который позволяет настроить проверки не только самого приложения, но и его зависимостей (БД, очереди, внешние сервисы).

На собеседовании: Интервьюер ожидает знание разницы между L4 и L7, а также понимание Health Checks. Частая ошибка – не упоминать sticky sessions и связанные с ними проблемы при горизонтальном масштабировании.