балансировка нагрузки
Балансировка нагрузки (load balancing) — это метод распределения входящих сетевых запросов между несколькими серверами или ресурсами с целью равномерного использования мощностей, повышения производительности и отказоустойчивости. Балансировщик нагрузки принимает запросы клиентов и перенаправляет их на один из доступных серверов согласно заданному алгоритму.
Зачем нужна балансировка нагрузки
Единственный сервер имеет ограниченные вычислительные ресурсы. При росте трафика он становится узким местом — latency растёт, запросы теряются, в критических ситуациях сервер падает под нагрузкой. Балансировщик решает эту проблему, распределяя нагрузку горизонтально: добавить новый сервер в пул — значит увеличить пропускную способность системы.
Помимо масштабируемости, балансировщик обеспечивает высокую доступность: если один сервер выходит из строя, балансировщик автоматически перестаёт направлять на него запросы. Клиенты не замечают сбоя.
Алгоритмы балансировки нагрузки
Round Robin
Запросы распределяются по серверам по очереди: первый → второй → третий → первый → … Простой и предсказуемый алгоритм. Работает хорошо, когда серверы одинаковые и запросы примерно равнозначны по стоимости.
Weighted Round Robin
Серверы с большей мощностью получают больше запросов. Сервер с весом 3 получает в три раза больше запросов, чем сервер с весом 1.
Least Connections
Новый запрос направляется на сервер с наименьшим числом активных соединений. Эффективен при долгих запросах (streaming, WebSocket), когда round robin создаёт дисбаланс.
IP Hash
Сервер определяется по хешу IP-адреса клиента. Один клиент всегда попадает на один сервер — сессии сохраняются. Минус: неравномерное распределение, если много клиентов за NAT.
Random
Случайный выбор сервера. Работает хорошо при большом числе серверов.
Least Response Time
Запрос направляется на сервер с наименьшим временем отклика. Требует активного мониторинга latency серверов.
Уровни балансировки: L4 и L7
L4 (транспортный уровень) работает с TCP/UDP-пакетами, не анализируя содержимое запроса. Быстро, низкие накладные расходы. Не может принимать решения на основе URL, заголовков HTTP или cookies. Примеры: AWS Network Load Balancer, HAProxy в TCP-режиме.
L7 (уровень приложения) анализирует HTTP-запросы: URL, заголовки, cookies, тело. Может маршрутизировать /api/* на API-серверы, а /static/* — на CDN. Поддерживает SSL-терминацию, sticky sessions по cookies, rate limiting. Примеры: Nginx, AWS Application Load Balancer, HAProxy в HTTP-режиме.
Аппаратные и программные балансировщики
Исторически балансировщики нагрузки были специализированными аппаратными устройствами (F5 BIG-IP, Citrix ADC). Сейчас программные балансировщики доминируют: Nginx, HAProxy, Envoy, Traefik.
Облачные провайдеры предлагают управляемые балансировщики: AWS ALB/NLB/GLB, Google Cloud Load Balancing, Azure Load Balancer. Они интегрированы с экосистемой облака, масштабируются автоматически и не требуют операционной поддержки.
Health checks: исключение упавших серверов
Балансировщик периодически проверяет здоровье upstream-серверов — активными проверками (HTTP-запрос на /health, TCP-соединение) или пассивно (отслеживание ошибок на реальных запросах). Сервер, не прошедший проверку, исключается из ротации. После восстановления — возвращается автоматически.
Глобальная балансировка нагрузки
На глобальном уровне балансировка реализуется через DNS: GeoDNS возвращает разные IP в зависимости от региона клиента. Anycast маршрутизирует запросы на ближайший узел сети. AWS Global Accelerator, Cloudflare, Akamai применяют эти механизмы для направления трафика к ближайшему дата-центру.
Частые вопросы
Что такое sticky sessions?
Sticky sessions (липкие сессии) — механизм, при котором запросы от одного клиента всегда направляются на один и тот же сервер. Нужно для приложений, хранящих состояние сессии в памяти сервера. Реализуется через IP Hash или cookie-based affinity.
Чем ALB отличается от NLB в AWS?
ALB (Application Load Balancer) работает на уровне L7: понимает HTTP/HTTPS, маршрутизирует по URL и заголовкам, поддерживает WebSocket. NLB (Network Load Balancer) работает на уровне L4: TCP/UDP, ультра-низкая задержка, миллионы запросов в секунду. ALB — для веб-приложений; NLB — для высокопроизводительных TCP-сервисов.
Балансировщик нагрузки — это единая точка отказа?
Балансировщик тоже может упасть, поэтому их тоже делают высокодоступными: active-passive пара с virtual IP (keepalived), активная кластеризация или облачный managed-сервис с встроенной избыточностью. Облачные балансировщики (AWS ALB) по умолчанию работают в нескольких зонах доступности.
Другие термины в теме «DevOps и облака»
Не хватает деталей?
Напишите, что уточнить по теме «балансировка нагрузки» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).