Легкая распределенная система организации очередей для независимых работ в реальном времени
Мы небольшая команда в корпоративной среде только для Microsoft. Наша основная задача заключается в запуске около 100 независимых прогонов собственного инструмента. Каждый прогон имеет один входной файл и несколько выходных файлов, и время выполнения одного задания составляет около часа (задания однопоточные, но сильно оптимизированы: время выполнения одного задания не будет сокращено).
Мы ищем способ распределить эти прогоны по доступным ядрам ЦП, чтобы сократить время простоя для полного набора прогонов до часа (т. Е. Время выполнения одного задания).
Наша идеальная установка, вероятно, будет выглядеть примерно так:
- Простой в установке рабочий клиент (если есть), позволяющий пользователям легко присоединять свои собственные рабочие станции к очереди.
- Рабочие могут динамически присоединяться к пулу (с указанным количеством ядер)
- Работа с очередями заданий в реальном времени, включая добавление и отмену заданий
Существует множество систем планирования заданий, но большинство из них кажутся более сложными, чем то, что нам нужно (зависимости от заданий, повторные задания и т. Д.) Это не может быть проблемой, но из-за всей этой сложности трудно понять, какие системы удовлетворяют требованиям. У вас есть опыт работы с существующими системами, которые отвечают нашим требованиям?
Я также рассмотрел простой рабочий демон, наблюдающий за файлами заданий на сетевом диске. У вас есть опыт работы с этим подходом?
1 ответ
Я не уверен, как на это можно ответить, не зная, что делает ваш внутренний инструмент. Что делает это медленным? Где узкое место? Насколько независима работа, и насколько независима каждая часть работы, чтобы ее можно было разбить? Является ли приложение уже многопоточным или поддерживает многопоточность для использования ядер системы?
Возможно, вы захотите профилировать свои приложения, чтобы увидеть узкие места, а затем сосредоточиться на их рефакторинге. Небольшое изменение в приложении, выполняющем работу, может привести к большим результатам.
Без некоторого понимания того, что такое работа и где замедление, трудно сказать, как разделить ваши пакетные задания. Не зная, как ваш рабочий процесс может быть разбит на части, вам, возможно, придется определить, что является самым большим узким местом, и использовать больше оборудования (более быстрая дисковая подсистема, больше памяти, более быстрый процессор...)
РЕДАКТИРОВАТЬ - Если это полностью независимые задания, возможно, стоит обратить внимание на то, является ли ваше узкое место одной только сериализацией, и, возможно, вы могли бы запустить их на виртуальных серверах или запустить в чем-то вроде экземпляров в "облаке" Amazon или получить ферму дешевых системы, которые запускают задание и отправляют их обратно в вашу основную программу. Я просто не уверен с описанием, стоит ли вам взглянуть на то, что потребуется, чтобы встроить эту поддержку в ваше собственное приложение, а не пытаться использовать какой-либо внешний планировщик заданий.