2009-11-11 1 views
0

Что такое хороший метод назначения работы множеству удаленных компьютеров? Рассмотрим пример, когда задача очень интенсивно связана с процессором и оперативной памятью, но фактически не обрабатывает большой набор данных. Языком выбора будет Java. Я думал, что Hadoop будет хорошим вариантом, но набор данных, передаваемый между удаленными машинами, довольно мал, и Hadoop, похоже, сосредоточен главным образом на распределении данных, а не на распределении работы.Как распараллеливать выполнение на удаленных системах

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

EDIT: меня интересует в основном балансировка нагрузки. Будет выполнен ряд рабочих заданий с небольшим (< 3MB) набором данных, но для этого необходимы значительная обработка и память.

ответ

1

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

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

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

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

+0

Кто-то еще в моей команде упомянул RMI. Мне нравится идея «тянуть»! Думаю, я поеду по этому маршруту. Благодаря! – User1

3

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

+0

Проголосовали за то, чтобы научить меня чему-то :) – karim79

+0

Выполняет ли какой-либо баланс нагрузки? – User1

+0

MPI - это API, который позволяет вам разрабатывать и реализовывать параллельные алгоритмы. Это не волшебная пуля, с которой вы справляетесь, и она автоматически запускает ее параллельно. Вы решили, как работа делится. Это просто дает вам возможность работать параллельно и передавать информацию между взаимодействующими процессорами/компьютерами. – tvanfosson