Reference
Envoy Load Balancing
Практическое описание алгоритмов балансировки и сценариев применения.
Алгоритм балансировки напрямую влияет на latency, устойчивость и эффективность использования ресурсов. Один и тот же пул инстансов может работать по-разному в зависимости от того, выбираете ли вы равномерное распределение, адаптацию к текущей нагрузке или маршрутизацию по ключу.
Базовые алгоритмы и визуализация
Round Robin
Запросы распределяются по серверам по кругу: S1 -> S2 -> S3 -> S1.
Плюсы
- Очень простая реализация и предсказуемое поведение.
- Хорошо подходит для stateless backend с одинаковыми узлами.
- Низкий runtime overhead у балансировщика.
Ограничения
- Не учитывает текущую загрузку и медленные узлы.
- При неоднородных серверах может ухудшать latency.
Request Queue
Load Balancer
Round Robin
Server A
Server B
Server C
Готово к симуляции. Запусти авто-режим или сделай один шаг.
Последнее решение: —
Сравнение и trade-offs
| Algorithm | State awareness | Failover behavior | Balancing quality | Complexity | Best fit |
|---|---|---|---|---|---|
| Round Robin | Нет | Простое исключение узла | Средняя | Низкая | Stateless, homogeneous pool |
| Least Connections | Active connections | Хорошо при burst + long-lived connections | Высокая | Средняя | Mixed latency workload |
| Consistent Hashing | Key-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.
