System Design Space
Граф знанийНастройки

Обновлено: 24 марта 2026 г. в 17:36

Алгоритмы балансировки: Round Robin, Least Connections, Consistent Hashing

medium

Практический разбор популярных алгоритмов балансировки, их trade-offs и рекомендации по выбору для stateless/stateful нагрузки.

Алгоритм балансировки стоит выбирать по поведению workload, а не по популярности названия.

Глава помогает сравнить Round Robin, Least Connections и Consistent Hashing через длину запросов, skew нагрузки, state affinity, hot keys и цену перераспределения трафика при изменении пула инстансов.

Для system design interview эта тема особенно полезна тем, что переводит разговор из уровня "какой алгоритм взять" в уровень "какой профиль трафика мы на самом деле защищаем и что сломается при неверном выборе".

Практическая польза главы

Алгоритм по workload

Сопоставляйте алгоритм (RR/LC/Hash) с профилем нагрузки, длительностью сессий и требованиями к affinity.

Цена выбора

Проговаривайте издержки: uneven load, hot spots, сложность rebalance и поведение при падении нод.

Наблюдаемость

Определяйте метрики справедливости распределения и ранние сигналы, что алгоритм нужно сменить или дополнить.

Interview trade-offs

Показывайте, как выбор алгоритма меняется при переходе от stateless API к stateful/realtime сценариям.

Reference

Envoy Load Balancing

Практическое описание алгоритмов балансировки и сценариев применения.

Открыть обзор

Алгоритм балансировки напрямую влияет на latency, устойчивость и эффективность использования ресурсов. Один и тот же пул инстансов может работать по-разному в зависимости от того, выбираете ли вы равномерное распределение, адаптацию к текущей нагрузке или маршрутизацию по ключу.

Равномерность

Round Robin держит базовую равномерность, если узлы близки по мощности.

Адаптация к нагрузке

Least Connections быстрее реагирует на mix коротких и длинных запросов.

Key locality

Consistent Hashing уменьшает cache misses и снижает remap при изменениях пула.

Устойчивость

Комбинируйте алгоритм с health checks, slow-start и draining на каждом rollout.

Плейбук выбора алгоритма

1

Зафиксируйте профиль трафика

Шаг 1

Определите длину запросов, burst-поведение и долю stateful операций.

2

Сопоставьте алгоритм и workload

Шаг 2

Round Robin для простого пула, Least Connections для mixed latency, Consistent Hashing для key locality.

3

Проверьте деградационные сценарии

Шаг 3

Смоделируйте shutdown/degraded node и оцените p95/p99, retry storm, remap ключей.

4

Закрепите operational guardrails

Шаг 4

Включите health policy, slow-start, draining и алерты по saturation/hot keys.

Базовые алгоритмы и визуализация

Визуализация показывает, как один и тот же поток запросов распределяется по-разному в зависимости от выбранного алгоритма.

Round Robin

Запросы распределяются по серверам по кругу: S1 -> S2 -> S3 -> S1.

Плюсы

  • Очень простая реализация и предсказуемое поведение.
  • Хорошо подходит для stateless backend с одинаковыми узлами.
  • Низкий runtime overhead у балансировщика.

Ограничения

  • Не учитывает текущую загрузку и медленные узлы.
  • При неоднородных серверах может ухудшать latency.
Подходит для: Stateless API, равномерный трафик, похожая мощность инстансов.

Request Queue

REQ-101Web
user:42
REQ-102Mobile
user:77
REQ-103Partner
tenant:acme
REQ-104Web
user:42

Load Balancer

Round Robin

Каждый новый запрос отправляется на следующий сервер по кругу.

Server A

handled: 0
active connections: 0

Server B

handled: 0
active connections: 0

Server C

handled: 0
active connections: 0
Готово

Готово к симуляции. Запусти авто-режим или сделай один шаг.

Последнее решение: —

Сравнение и trade-offs

Выбирайте алгоритм не по “популярности”, а по фактическому профилю workload и требованиям к state/locality.

AlgorithmState awarenessFailover behaviorBalancing qualityComplexityBest fit
Round RobinНетПростое исключение узлаСредняяНизкаяStateless, homogeneous pool
Least ConnectionsActive connectionsХорошо при burst + long-lived connectionsВысокаяСредняяMixed latency workload
Consistent HashingKey-aware routingЧастичный remap на соседние узлыЗависит от virtual nodesВысокаяStateful/cache-sensitive traffic

Практика выбора

Быстрые правила

  • Начинайте с Round Robin для простых stateless API.
  • Переходите на Least Connections при длинных или неравномерных запросах.
  • Используйте Consistent Hashing, когда важны locality и sticky state.
  • Проверяйте решение на пиковом профиле, а не только на среднем трафике.

Частые ошибки

  • Выбирать алгоритм без анализа профиля трафика (длина запросов, burst, key skew).
  • Использовать Consistent Hashing без virtual nodes и мониторинга hot keys.
  • Игнорировать health checks и slow-start для новых инстансов.
  • Считать active connections единственной метрикой загрузки без CPU/RPS/p99 latency.
  • Смешивать sticky и non-sticky маршрутизацию без явной политики fallback.

Мини-чеклист перед продом

1Включены active/passive health checks.
2Настроены slow-start и graceful connection draining.
3Есть метрики p95/p99, backend saturation, retry storm rate.
4Проверен failover при выключении и деградации узлов.

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки