Спред против MPI против Zeromq? - PullRequest
43 голосов
/ 30 августа 2008

В одном из ответов на Вещание подобно UDP с надежностью TCP , пользователь упоминает API обмена сообщениями Spread . Я также наткнулся на один под названием ØMQ . Я также немного знаком с MPI .

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

Ответы [ 3 ]

50 голосов
/ 15 сентября 2008

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

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

14 голосов
/ 31 августа 2008

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

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

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

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

4 голосов
/ 20 июня 2012

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

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

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

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

...