Как распараллелить выполнение на удаленных системах - PullRequest
0 голосов
/ 11 ноября 2009

Какой хороший способ назначить работу на набор удаленных машин? Рассмотрим пример, в котором задача сильно загружает ЦП и ОЗУ, но фактически не обрабатывает большой набор данных. Выбор языка будет Java. Я думал, что Hadoop будет хорошим вариантом, но набор данных, передаваемый между удаленными машинами, довольно мал, и, похоже, Hadoop сосредоточен в основном на распределении данных, а не на распределении работы.

Какие хорошие технологии могут помочь?

РЕДАКТИРОВАТЬ: В основном меня интересует балансировка нагрузки. Будет ряд заданий с небольшим (<3 МБ) набором данных, но значительными потребностями в обработке и памяти. </p>

Ответы [ 2 ]

3 голосов
/ 11 ноября 2009

MPI , вероятно, будет хорошим выбором, есть даже реализация JAVA .

1 голос
/ 15 ноября 2009

MPI может быть частью вашего ответа, но, глядя на вопрос, я не уверен, что он решает ту часть проблемы, которая вас волнует.

MPI обеспечивает уровень связи между компонентами обработки. Это низкий уровень, требующий от вас выполнения значительного объема работы, но, как я увидел во вводной презентации, он также поставляется с некоторыми общими функциями манипулирования матричными данными.

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

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

...