Kian & Arthur
Kian Kian
Артур, я тут новый алгоритм планирования разрабатывал, он может сократить простой почти вдвое – подумал, стоит посмотреть, как это повлияет на нашу работу.
Arthur Arthur
Звучит неплохо – если это сократит время простоя вдвое, у всех появится больше времени на настоящую работу. Можешь объяснить, в чем суть и как это впишется в наш текущий процесс?
Kian Kian
Конечно. Суть в том, чтобы использовать очередь с приоритетами, которая сортирует задачи по оценке времени выполнения и необходимым ресурсам. Когда освобождается рабочий, он берёт следующую задачу, наиболее подходящую под его текущую нагрузку, чтобы минимизировать простой. Я бы интегрировал это в модуль диспетчера задач, заменив текущий алгоритм ротационного выбора. Интерфейс существующей очереди остаётся без изменений, просто меняем логику выбора. Так вся остальная часть пайплайна – логирование, мониторинг, обработка ошибок – останется нетронутой. Это должно быть обновление безболезненное – просто добавляем новый класс и настраиваем конфигурацию, чтобы она указывала на него.
Arthur Arthur
Отличная идея – очередь приоритетов для распределения задач работникам должна здорово сократить время ожидания. Подумал, как ты собираешься тестировать нового диспетчера перед запуском, особенно в ситуациях, когда оценка задачи неверна? И небольшая проверка на тестовой среде подтвердит заявленную простоту интеграции, прежде чем мы перенесём всё в продакшн.
Kian Kian
Напишу тестовый набор, который покроет обычное планирование, задания с нулевым временем и те, что выходят за рамки оценки. Для каждого теста буду сравнивать ожидаемое назначение воркера с фактическим. В случае, когда оценка оказывается неточной, создам задание с заниженной оценкой, которое действительно займет больше времени, и проверю, что диспетчер переходит к очереди незавершенных задач, а не блокирует воркера. В тестовой среде разверну новый диспетчер за флагом функциональности, запустим полный набор заданий на час и зафиксируем среднее время простоя каждого воркера. Если метрика снизится до целевого значения и ни один воркер не будет простаивать дольше минуты, выпустим в продакшн.
Arthur Arthur
Звучит надежно – проработка граничных случаев и использование флага функции дает нам уверенность. Просто перепроверь, чтобы очередь обработки старых задач не затормозила новые, если какой-то воркер завис на задачах, выполняющихся дольше положенного. Если все сойдется, это будет отличная победа для команды. Удачи с тестовым запуском!
Kian Kian
Позабочусь, чтобы в резервную очередь добавили счётчик справедливости, чтобы новые задания ставились после определённого числа попыток. Это не даст зависшему заданию заблокировать все остальные. Ладно, переходим к тестам.
Arthur Arthur
Отличный план – справедливость поможет всем не сбиться с пути. Сообщи, как пройдут тесты. Удачи в кодировании!