Python: OpenMPI Vs.RabbitMQ - PullRequest
       33

Python: OpenMPI Vs.RabbitMQ

7 голосов
/ 20 июля 2011

Предположим, что кому-то интересно написать приложение python, в котором должна быть связь между различными процессами. Связь будет осуществляться путем отправки массивов strings и / или numpy.

Какие соображения предпочтительнее OpenMPI, чем инструмент типа RabbitMQ?

Ответы [ 2 ]

13 голосов
/ 20 июля 2011

Нет единого правильного ответа на такой вопрос.Все зависит от большого количества разных факторов.Например:

  1. Какие виды связи у вас есть?Вы отправляете большие или маленькие пакеты, вам нужна хорошая пропускная способность или низкая задержка?
  2. Какие гарантии доставки вам нужны?
  3. OpenMPI может мгновенно доставлять сообщения только запущенному процессув то время как различные решения MQ могут ставить в очередь сообщения и предоставлять модные конфигурации производителя-потребителя.
  4. Какая у вас сеть?Если вы работаете на локальном хосте, что-то вроде ZeroMQ, вероятно, будет самым быстрым.Если вы работаете на множестве хостов, зависит от доступных соединений.Например, OpenMPI может использовать ссылки Infiniband / Mirynet.
  5. Какую обработку вы выполняете?При использовании MPI все процессы обычно запускаются одновременно, выполняют обработку и завершают все сразу.
4 голосов
/ 20 июля 2011

Это именно тот сценарий, который был у меня несколько месяцев назад, и я решил использовать AMQP с RabbitMQ, используя обмен темами, в дополнение к memcache для больших объектов.

Все сообщения AMQP - это строки в JSONформат объекта, чтобы можно было легко добавить атрибуты к сообщению (например, количество повторных попыток) и повторно опубликовать его.Объекты JSON являются подмножеством JSON, которые соответствуют указаниям Python.Например, {"recordid": "272727"} является объектом JSON с одним атрибутом.Я мог бы просто выбрать Python dict, но это ограничило бы нас использованием только Python с очередями сообщений.

Крупные объекты не маршрутизируются AMQP, вместо этого они помещаются в memcache, где они доступныдля другого процесса, чтобы получить их.Вы также можете использовать Redis или Tokyo Tyrant для этой работы.Идея в том, что мы не хотим, чтобы короткие сообщения помещались в очередь за большими объектами.

В итоге мои процессы на Python закончились использованием AMQP и ZeroMQ для двух разных аспектов архитектуры.Вы можете обнаружить, что имеет смысл использовать как OpenMPI, так и AMQP, но для разных типов заданий.

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

...