Назад | Перейти на главную страницу

Легкая распределенная система очередей заданий для независимых заданий в реальном времени

Мы небольшая команда в корпоративной среде только Microsoft. Наша основная задача включает запуск наборов из примерно 100 независимых запусков внутреннего инструмента. Каждый запуск имеет один входной файл и несколько выходных файлов, а время выполнения одного задания составляет около одного часа (задания являются однопоточными, но сильно оптимизированы: время выполнения одного задания не будет сокращено).
Мы ищем способ распределить эти прогоны между доступными ядрами ЦП, чтобы сократить время выполнения полного набора прогонов до часа (т. Е. Время выполнения одного задания).

Наша идеальная установка, вероятно, будет примерно такой:

Есть много планирование работы системы, но большинство из них кажутся более сложными, чем то, что нам нужно (зависимости рабочих мест, повторяющиеся задания, ...). Возможно, это не проблема, но, несмотря на всю эту сложность, трудно понять, какие системы удовлетворяют требованиям. Есть ли у вас опыт работы с существующими системами, отвечающими нашим требованиям?

Я также рассмотрел простой рабочий демон, отслеживающий файлы заданий на сетевом диске. У вас есть опыт использования такого подхода?

Я не уверен, как на это можно ответить, не зная, что делает ваш собственный инструмент. Что делает его медленным? Где узкое место? Насколько независимы выполняются задания и насколько независимы каждая часть работы, чтобы ее можно было разделить? Приложение уже является многопоточным или поддерживает многопоточность, чтобы использовать преимущества ядер системы?

Возможно, вы захотите профилировать свои приложения, чтобы увидеть, где находятся узкие места, а затем сосредоточиться на их рефакторинге. Небольшое изменение в приложении, выполняющем эту работу, может дать большие результаты.

Без некоторого понимания того, в чем заключается работа и где происходит замедление, трудно сказать, как разделить ваши пакетные задания. Не зная, как можно разбить ваш рабочий процесс, вам, возможно, придется определить, что является самым большим узким местом, и добавить к нему больше оборудования (более быстрая дисковая подсистема, больше памяти, более быстрый процессор ...)

РЕДАКТИРОВАТЬ - Если это полностью независимые задания, возможно, стоит посмотреть, является ли ваше узкое место одной только сериализацией, и, возможно, вы могли бы запустить их на виртуальных серверах или запустить их в чем-то вроде экземпляров в «облаке» Amazon или получить ферму дешевых системы, которые запускают задания и отправляют их обратно в вашу основную программу. Я просто не уверен в описании, стоит ли вам посмотреть, что потребуется, чтобы встроить эту поддержку в ваше внутреннее приложение, а не пытаться использовать какой-то внешний планировщик заданий.