Как распространить программу на ненадежном кластере?

То, что я ищу, это любое/все из следующего:

  • автоматическое обнаружение сбоя рабочего процесса (например, выключенный компьютер)
  • обнаружение всех работающих (linux) ПК в заданном диапазоне IP-адресов (компьютер включен)
  • ... и автоматический спавн воркеров (ping+ssh?)
  • балансировка нагрузки, чтобы рабочие процессы не замедляли другие процессы (хорошо?)
  • некоторая форма передачи сообщений

... и не хочу изобретать велосипед.

Библиотека C++, скрипты bash, автономная программа... приветствуются все.

Если вы приводите пример программного обеспечения, то расскажите, пожалуйста, какие из вышеперечисленных функций оно имеет.


person Łukasz Lew    schedule 30.05.2009    source источник


Ответы (5)


Ознакомьтесь с Spread Toolkit, системой группового общения C/C++. Это позволит вам обнаружить сбой узла/процесса и восстановление/запуск таким образом, который позволит вам перебалансировать распределенную рабочую нагрузку.

person Nick Gunn    schedule 30.05.2009
comment
отлично. но последний выпуск был в 2006 году - person Łukasz Lew; 30.05.2009
comment
Он до сих пор активно поддерживается. Это просто довольно стабильно. - person Nick Gunn; 30.05.2009
comment
К сожалению, забыл добавить, вы можете получить патчи через ветку dev, и я слышал, что версия 4.0.1 может быть не очень далеко. - person Nick Gunn; 30.05.2009

То, что вы ищете, называется «планировщик заданий». На рынке есть много планировщиков заданий, вот те, с которыми я знаком:

  • SGE решает все вопросы, связанные с планированием заданий на нескольких машинах (восстановление, мониторинг, приоритет, очередь). Ваше программное обеспечение не обязательно должно поддерживать SGE, поскольку SGE просто предоставляет среду, в которой вы отправляете пакетные задания.
  • LSF — лучшая альтернатива, но не бесплатная.

Для поддержки передачи сообщений см. спецификацию MPI. SGE полностью поддерживает распространение на основе MPI.

person ASk    schedule 30.05.2009

В зависимости от требований вашего приложения я бы проверил инфраструктуру BOINC. Они реализуют форму связи клиент/сервер в своих последних выпусках, и неясно, какая форма связи вам нужна. Их API написан на C, и мы очень легко написали для него оболочки на C++.

Другое преимущество BOINC заключается в том, что он был разработан для масштабирования крупных проектов распределенных вычислений, таких как SETI или Rosetta@Home, поэтому он поддерживает такие вещи, как проверка, распределение заданий и управление различными версиями приложений для разных платформ.

Вот ссылка:

веб-сайт BOINC

person James Thompson    schedule 30.05.2009

Существует Hadoop. У него есть Map Reduce, но я не уверен, есть ли у него какие-либо другие функции, которые мне нужны. Кто-нибудь знает?

person Łukasz Lew    schedule 30.05.2009

Вы действительно ищете "планировщик заданий". Узлы «статически» регистрируются в планировщике заданий. Это позволяет планировщику заданий проверять узлы и определять количество ядер, ОЗУ, доступное место на рабочем диске, ОС и многое другое. Всю эту информацию можно использовать для выбора необходимых ресурсов для задания.

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

SLURM — это менеджер ресурсов и планировщик заданий, который вы можете рассмотреть. SLURM имеет интеграционные крючки для LSF и PBSPro. Несколько реализаций MPI «осведомлены о SLURM» и могут использовать/устанавливать переменные среды, которые позволяют выполнять задание MPI на узлах, выделенных для него SLURM.

person Stan Graves    schedule 23.06.2009
comment
могу я спросить, как slurm относится к hadoop? можно ли как-то запускать задания Hadoop на slurp? - person Dan Brickley; 04.01.2011
comment
Я не знаком с хаупом, поэтому не могу ответить на вопрос об отношениях. SLURM — это планировщик заданий. Любой исполняемый файл (включая сценарии оболочки) можно запускать как задание на нескольких узлах. То, что происходит дальше, во многом зависит от исполняемого файла. - person Stan Graves; 05.01.2011