Распространение против 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, если у вас есть приложение, которое вы хотите масштабировать из простого многопоточного процесса в распределенную и переменную среду, или что вы хотите быстро экспериментировать и прототип и что никакие решения, похоже, не соответствуют вашей модели. Однако вы должны приложить определенные усилия для развертывания и мониторинга вашей сети, если хотите масштабировать до очень большого кластера.