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

Обновлено: 7 мая 2026 г. в 18:26

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

средний

Практический разбор Round Robin, Least Connections и Consistent Hashing: как выбирать алгоритм по профилю нагрузки, локальности ключей и поведению системы при деградации.

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

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

На интервью это помогает обсуждать не название алгоритма, а профиль нагрузки, который вы защищаете, и признаки того, что выбранная схема перестаёт работать.

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

Профиль нагрузки

Сначала фиксируйте форму трафика: ровный поток, длинные запросы, горячие ключи и долю операций с состоянием.

Неравномерная нагрузка

Смотрите, что будет при длинных запросах, всплесках и деградации отдельных узлов, а не только в спокойном режиме.

Локальность ключей

Понимайте цену локальности: меньше промахов кэша, но выше риск горячих ключей и перекоса распределения.

Аргументация выбора

Объясняйте, какой профиль трафика защищает алгоритм и по каким сигналам его пора пересматривать.

Источник

Envoy Load Balancing

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

Открыть источник

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

, и решают одну задачу по-разному: либо держат базовую равномерность, либо подстраиваются под текущую нагрузку, либо сохраняют привязку ключа к тому же узлу.

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

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

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

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

Least Connections лучше подстраивается, когда одни запросы завершаются быстро, а другие держат соединение долго.

Локальность ключей

Consistent Hashing уменьшает миграцию ключей и число промахов кэша при изменениях пула.

Операционная устойчивость

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

Как выбрать алгоритм

1

Опишите профиль нагрузки

Шаг 1

Зафиксируйте длительность запросов, всплески трафика, распределение ключей и долю операций с состоянием.

2

Сопоставьте алгоритм и поведение трафика

Шаг 2

Round Robin подходит для ровного пула, Least Connections — для неравномерной длительности, Consistent Hashing — для локальности ключей и привязки состояния.

3

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

Шаг 3

Смоделируйте выключение узла, перегрузку и повторные попытки, затем посмотрите на p95/p99 и перераспределение ключей.

4

Добавьте эксплуатационные ограничения

Шаг 4

Настройте проверки состояния, плавный ввод, плавный вывод соединений и сигналы по насыщению и горячим ключам.

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

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

Round Robin

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

Плюсы

  • Очень простая реализация и предсказуемое поведение.
  • Хорошо подходит для сервисов без сохранения состояния с одинаковыми узлами.
  • Даёт небольшие накладные расходы на стороне балансировщика.

Ограничения

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

Очередь запросов

REQ-101Веб
user:42
REQ-102Мобильное приложение
user:77
REQ-103Партнёр
tenant:acme
REQ-104Веб
user:42

Балансировщик

Round Robin

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

Сервер A

обработано: 0
активные соединения: 0

Сервер B

обработано: 0
активные соединения: 0

Сервер C

обработано: 0
активные соединения: 0
Готово

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

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

Сравнение алгоритмов и ключевые компромиссы

Сравнивайте алгоритмы не по известности, а по тому, как они ведут себя при перегрузе, изменении пула и росте неравномерности трафика. Для Consistent Hashing особенно важны , и .

АлгоритмЧто он учитываетПоведение при деградацииКачество распределенияСложностьЛучше всего подходит
Round RobinПочти не учитывает текущее состояние узлаПри отказе просто исключает узел из ротацииХорошая при ровном и однотипном трафикеНизкаяОднородный пул сервисов без сохранения состояния
Least ConnectionsСмотрит на число активных соединенийЛучше переносит длинные запросы и всплески нагрузкиВыше при неравномерной длительности запросовСредняяНагрузка со смешанной длительностью запросов
Consistent HashingМаршрутизирует по ключу запросаПереназначает только часть ключей при изменении пулаЗависит от виртуальных узлов и профиля ключейВысокаяТрафик с привязкой состояния и чувствительностью к локальности ключей

Практические ориентиры

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

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

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

  • Выбирать алгоритм без анализа длительности запросов, всплесков нагрузки и перекоса распределения ключей.
  • Использовать Consistent Hashing без виртуальных узлов и без контроля горячих ключей.
  • Игнорировать проверки работоспособности, плавный ввод в трафик и плавный вывод соединений.
  • Сводить оценку нагрузки только к числу активных соединений, не глядя на CPU, RPS и задержку p99.
  • Смешивать липкую и обычную маршрутизацию без ясного резервного сценария.

Проверки перед боевым запуском

1Включены активные и пассивные проверки состояния.
2Настроены плавный ввод в трафик и плавный вывод соединений.
3Есть метрики p95/p99, насыщения узлов, перекоса распределения и штормов повторов.
4Проверено, как алгоритм ведёт себя при выключении и деградации узлов.

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

  • Балансировка трафика - даёт архитектурный контекст L4/L7, контроля состояния и глобальной маршрутизации, поверх которого выбираются конкретные алгоритмы.
  • Принципы проектирования масштабируемых систем - объясняет, как распределение трафика связано с задержкой, пропускной способностью и общими решениями по росту системы.
  • Обнаружение сервисов (service discovery) - показывает, как поддерживать актуальный пул инстансов, на который алгоритм опирается при выборе узла.
  • Архитектура сервисной сетки (service mesh) - переносит алгоритмы балансировки в сервис-сервис трафик и дополняет их политиками повторов и изоляции проблемных инстансов.
  • Стратегии кэширования - помогает разбирать локальность ключей и эффекты горячих ключей, критичные для Consistent Hashing.
  • Multi-region / Global Systems - добавляет региональный слой распределения трафика и стратегию переключения между площадками.
  • API Gateway - показывает прикладной сценарий, где алгоритмы балансировки работают вместе с прикладными правилами маршрутизации.

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