Вопрос проверяет знание стратегий распределения трафика и их влияния на задержки и устойчивость.
Есть стратегии round-robin, least connections, weighted варианты, а также распределение по хешу (например, по IP или ключу). Выбор зависит от характера нагрузки и того, насколько инстансы одинаковые. Для stateful-сервисов иногда применяют sticky sessions. Важно сочетать стратегию с health checks.
Стратегия балансировки определяет, как именно выбирается инстанс для конкретного запроса или соединения. Правильный выбор уменьшает задержки, повышает равномерность нагрузки и снижает вероятность перегрузки отдельных узлов.
Суть:
Запросы распределяются по кругу между инстансами.
Предполагается, что инстансы примерно одинаковые.
Плюсы:
Простота.
Предсказуемость.
Минусы:
Плохо учитывает разную «тяжесть» запросов.
Может перегрузить узел при неравномерной нагрузке.
Суть:
Каждому инстансу задается вес.
Более мощные узлы получают больше запросов.
Применение:
Разное железо.
Постепенный ввод новых инстансов.
Суть:
Выбирается инстанс с минимальным числом активных соединений.
Плюсы:
Хорошо работает при длительных соединениях.
Часто эффективнее round-robin для mixed-нагрузки.
Минусы:
Количество соединений не всегда отражает реальную нагрузку CPU/IO.
Суть:
Выбирается инстанс с наименьшей наблюдаемой задержкой.
Может учитывать нагрузку косвенно.
Плюсы:
Часто уменьшает p95/p99 latency.
Минусы:
Требует измерений и аккуратной настройки.
Суть:
Выбор инстанса зависит от IP клиента.
Клиент стабильно попадает на один узел.
Это похоже на sticky sessions, но на уровне балансировщика.
Минусы:
NAT и прокси ломают равномерность.
При изменении пула инстансов «перетасовывает» клиентов.
Суть:
Инстансы размещаются на «кольце».
Ключ запроса (например, userID) маппится на ближайший узел.
Плюсы:
При изменении числа инстансов перераспределяется только часть ключей.
Подходит для кэшей и stateful-данных.
Минусы:
Сложнее.
Нужны правильные ключи и распределение.
Даже лучшая стратегия бесполезна, если:
Балансировщик не умеет исключать «плохие» узлы.
Нет корректной readiness-проверки.
Иногда балансировка частично делается клиентом:
Клиент держит список адресов.
Исключает проблемные узлы.
Выбирает следующий.
Это часто встречается в service discovery и RPC.
Практический выбор обычно такой:
Простые stateless HTTP — round-robin или weighted.
Длинные соединения — least connections.
Кэш/шардирование по ключу — consistent hashing.
Разное железо — weighted стратегии.
Существует много стратегий балансировки, и выбор зависит от природы нагрузки, длительности соединений, однородности инстансов и необходимости «стабильного маршрута» по ключу. Почти всегда стратегия должна работать вместе с health checks и корректными таймаутами.