2008-08-30 6 views
40

В одном из ответов на вопрос Broadcast like UDP with the Reliability of TCP пользователь упоминает API сообщений Spread. Я также столкнулся с одним из них: ØMQ. Я также знаком с MPI.Распространение против MPI против zeromq?

Итак, мой главный вопрос: почему я должен выбирать один за другим? В частности, почему я должен использовать Spread или ØMQ, если есть зрелые реализации MPI?

ответ

46

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

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

13

Я не использовал ни одну из этих библиотек, но я могу дать некоторые подсказки.

  1. MPI - это протокол связи, а Spread и ØMQ - фактическая реализация.
  2. MPI происходит от «параллельного» программирования, в то время как Spread происходит от «распределенного» программирования.

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

Концепция «надежность» несколько отличается от концепции TCP. Надежность TCP - «передать этот пакет в конечную программу независимо от того, что». Надежность распределенного программирования «даже если некоторые машины погибают, система в целом продолжает работать согласованно». Чтобы действительно гарантировать, что все участники получили сообщение, нужно было бы что-то вроде 2 phase commit или один из более быстрых альтернатив.

5

Здесь вы обращаетесь к очень различным API, с различными представлениями о предоставляемых услугах и инфраструктуре для каждого из них. Я не знаю достаточно о MPI и Spread, чтобы ответить за них, но я могу немного помочь с ZeroMQ.

ZeroMQ - это простая библиотека обмена сообщениями. Он не делает ничего, кроме как отправить сообщение различным одноранговым узлам (включая локальные) на основе ограниченного набора общих шаблонов обмена сообщениями (PUSH/PULL, REQUEST/REPLY, PUB/SUB и т. Д.). Он обрабатывает соединение с клиентом, поиск и базовую перегрузку строго на основе этих шаблонов, и вы должны сами делать это сами.

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

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

Смежные вопросы