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

Распределенные вычислительные задания на разных машинах?

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

Большая часть работы, которую необходимо выполнить, - это стандартная работа из командной строки с некоторым рендерингом GhostScript. Поскольку рендеринг может занять очень много времени только с одним процессором, я хотел бы разделить работу на множество более мелких частей и попросить простаивающие машины в сети помочь в работе.

Вот примерный рабочий процесс:

  1. Пользователь загружает большой PDF-файл в веб-интерфейс
  2. PDF-файл разбивается на более мелкие части или перемещается в сеть хранения данных, доступную для всех компьютеров. Все более мелкие части составляют «главную задачу», которую необходимо выполнить, прежде чем пользователь сможет увидеть какие-либо результаты.
  3. Для каждой страницы PDF-файла планируется задание и ставится в «очередь».
  4. Неактивные машины берут задание из этой очереди и обрабатывают / отображают страницу файла PDF.
  5. После завершения они помещают полученные растровые данные в сеть SAN и отмечают выполнение задания.
  6. Как только все задания для «основной задачи» будут завершены, пользователь увидит обзор всех отображаемых страниц в веб-интерфейсе.

Я знаю о планировщиках вакансий, но, поскольку это новая территория для меня, я даже не знаю, какие поисковые запросы использовать в Google.

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

Я не уверен, если OpenSSI помог бы вам, но это сразу пришло мне в голову. Он объединяет несколько серверов как единый образ системы, который с точки зрения администратора представляет собой всего лишь один сервер. Думайте об этом как о SMP-сервере, но обязательно имеющем несколько ядер на одном сервере, а вместо этого на нескольких серверах.

OpenSSI может автоматически распределять нагрузку между кластером и запускать вновь запущенные процессы на наименее загруженном узле (или самом быстром узле). Он также может автоматически переносить текущие запущенные процессы с одного узла на другой, если считает это полезным. Конечно, все это также можно сделать вручную с помощью утилит командной строки.

Если вам не нужен такой подход на уровне ядра к вашей проблеме или OpenSSI не работает для вас иначе, есть Крутящий момент который выполняет это планирование на уровне приложения.