Ответ
Round Robin (RR) — это алгоритм балансировки нагрузки, при котором запросы клиентов распределяются между серверами в группе последовательно и циклически.
Принцип работы
Представим, что у нас есть 3 сервера (A, B, C). Запросы будут распределяться следующим образом:
- Первый запрос → Сервер A
- Второй запрос → Сервер B
- Третий запрос → Сервер C
- Четвертый запрос → Сервер A (цикл начинается заново)
Пример: конфигурация Nginx
Nginx использует Round Robin по умолчанию. Это самый распространенный и наглядный пример.
http {
# Определение группы серверов (апстрим)
upstream my_backend {
# Алгоритм Round Robin используется по умолчанию
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
# Все запросы перенаправляются на группу серверов
proxy_pass http://my_backend;
}
}
}
Преимущества и недостатки
- (+) Простота: Очень легко реализовать и понять.
- (-) Не учитывает нагрузку: Алгоритм не знает, насколько загружен каждый сервер. Если один сервер медленнее других, он все равно будет получать равное количество запросов, что может стать узким местом.
- (-) Не учитывает состояние: Не подходит для stateful-приложений без дополнительных механизмов (например, sticky sessions).
Альтернативы
- Weighted Round Robin: Серверам с большей мощностью назначается больший "вес", и они получают больше запросов.
- Least Connections: Новый запрос направляется на сервер с наименьшим количеством активных соединений.
- IP Hash: Сервер для обработки запроса выбирается на основе хеша IP-адреса клиента, что обеспечивает привязку клиента к одному серверу.