Распространение против MPI против zeromq?

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

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

Ответ 1

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

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

Ответ 2

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

  • MPI - это протокол связи, в то время как Spread и ØMQ являются фактической реализацией.
  • MPI происходит от "параллельного" программирования, в то время как Spread происходит из "распределенного" программирования.

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

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

Ответ 3

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

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

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

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