Вступить в клуб →
сложнаяpythonNginx и балансировка: прокси, TLS, таймауты

Порядок выбора бэкендов при взвешенном round robin, как в nginx

В upstream у серверов разные веса: server a weight=5; server b weight=1; server c weight=1;. Nginx распределяет запросы «гладким» взвешенным round robin, чтобы тяжёлый сервер не получал пять запросов подряд.

Напишите wrr_sequence(servers, n).

  • servers — список пар (имя, вес), веса — положительные целые. n — число запросов.
  • У каждого сервера есть текущий вес, изначально 0. На каждый запрос:
    1. каждому серверу прибавить к текущему весу его вес;
    2. выбрать сервер с наибольшим текущим весом, при равенстве — первый по списку;
    3. у выбранного вычесть из текущего веса сумму всех весов.
  • Верните список имён выбранных серверов длиной n. При n == 0 — пустой список.

заготовка решения

def wrr_sequence(servers, n):
    # ваш код
    return None

🔒 Проверка ответа — для участников клуба

  • Автотесты прямо в браузере
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела