Код Middle Кластер, воркеры, масштабирование обновлено

Балансировка least connections

Условие

Смоделируй балансировщик least connections. simulateLeastConn(servers, requests): servers массив имён, requests массив { at, duration } в порядке возрастания at (время прихода и длительность обработки). Каждый запрос отправляется на сервер с наименьшим числом активных запросов в момент at; при равенстве на тот, что раньше в массиве servers. Запрос активен в полуинтервале [at, at + duration): если один запрос заканчивается в момент прихода другого, он уже не считается.

Верни массив имён серверов для каждого запроса.

Примеры

simulateLeastConn(["a", "b"], [{"at":0,"duration":10}, {"at":1,"duration":10}, {"at":2,"duration":1}]) // ["a", "b", "a"]
simulateLeastConn(["a", "b"], [{"at":0,"duration":100}, {"at":1,"duration":1}, {"at":3,"duration":1}, {"at":5,"duration":1}]) // ["a", "b", "b", "b"]
simulateLeastConn(["a", "b"], [{"at":0,"duration":5}, {"at":5,"duration":5}]) // ["a", "a"]

Как подойти

Подсказки: 2
  1. Для каждого сервера держи список времён окончания активных запросов.
  2. Перед выбором выкидывай закончившиеся: end > at значит ещё активен.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме