Балансировка 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
- Для каждого сервера держи список времён окончания активных запросов.
- Перед выбором выкидывай закончившиеся:
end > atзначит ещё активен.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Консистентное хеширование с виртуальными узлами
Следующий вопрос
Плавный взвешенный round-robin как в nginx
Термины по теме
Ещё по теме «Кластер, воркеры, масштабирование»
- Код-ревью: сервис перед масштабированием в 4 инстанса
- Модуль cluster
- cluster внутри Kubernetes
- Память у воркеров cluster
- cluster или worker_threads
- setInterval-крон при нескольких экземплярах
- Флаг --max-old-space-size
- Как Node.js использует несколько ядер