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