Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

<Ол>
  • MPI - это протокол связи, в то время как Spread и & # 216; MQ - фактическая реализация.
  • MPI происходит от "параллельного" программирование в то время как Spread происходит из "распределенного" программирование.
  • Итак, это действительно зависит от того, пытаетесь ли вы построить параллельную систему или распределенную систему. Они связаны друг с другом, но подразумеваемые коннотации / цели различны. Параллельное программирование имеет дело с увеличением вычислительной мощности путем одновременного использования нескольких компьютеров. Распределенное программирование имеет дело с надежной (непротиворечивой, отказоустойчивой и высокодоступной) группой компьютеров.

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top