Я работаю над комплексной системой сборки, которая выполняет распределенные сборки на нескольких машинах уже довольно давно. Он корректно обрабатывает зависимости и, кажется, достаточно хорошо масштабируется, поэтому мы добавили больше проектов и больше машин, но похоже, что он может работать лучше.
У меня проблема с распределением ресурсов. У меня есть список доступных компьютеров и список проектов, которые я хотел бы построить, а также на каждом компьютере указано, какое программное обеспечение, ОС, версия компилятора и т. Д. Установлено, и в каждом проекте указано, что ему требуется. Когда работа должна быть назначена, я могу выполнить запрос к базе данных, который перечисляет возможные назначения. Теперь мне нужно выполнить эти задания максимально эффективно.
Наименьший пример - два проекта 1 и 2 с двумя машинами A и B. Машина A может построить любой проект, но машина B может построить только проект 1. Поэтому я получаю список пар (A, 1), ( А, 2), (В, 1). Если я обрабатываю назначения по порядку, машина A создает проект 1, и мне нужно ждать, пока он не завершится, прежде чем я смогу построить проект 2. Возможно, было бы лучше назначить машину A для проекта 2 и машину B для проекта 1. Но. .. машина A может быть намного быстрее, чем машина B, и если машина вообще не используется, это может быть правильным ответом.
Я уверен, что это проблема «оперативных исследований», которая уже неоднократно решалась. Мне не обязательно нужно оптимальное решение ... просто попытка чего-то лучшего, чем у меня - кажется, я часто в конечном итоге сталкиваюсь с поставленными в очередь задачами и простаивающими машинами, которых могло бы избежать лучшее распределение. Любые предложения приветствуются.