На работе мы должны создать сервер заданий для вещей как отправка электронных писем, создание PDFs, уплотнение некоторых данных, и т.д. Очевидно, мы хотели бы основываться на своего рода универсальной системе массового обслуживания. Я знаком с Gearman, и что это - точная проблема, которую это пытается решить: помещение заданий на очереди, куда рабочие приезжают для собирания их. Однако я вижу много упоминаний о Rabbitmq и неясен, как он используется в этом сценарии.
Действительно ли Rabbitmq является хорошей платформой для создания распределенной системы заданий сверху?
Все зависит от того, какую семантику вы хотите раскрыть. То, что делает Gearman, очень просто сделать на базе RabbitMQ, который, конечно, может "рассылать" сообщения независимым работникам.
Но Gearman создан специально для этого. IIUC, Gearman - это фреймворк для обработки заданий, а не система обмена сообщениями как таковая. Есть другие подобные фреймворки, например Celery, которые используют для этого RabbitMQ под капотом. Вот статья о Celery, которую стоит прочитать.
Я бы сказал, что Gearman лучше подходит для постановки в очередь "заданий", а RabbitMQ - для постановки в очередь "данных". Конечно, они оба на самом деле одно и то же, но для меня это работает так: если вы пытаетесь "разбросать" работу, которую нужно выполнить, и работники могут работать независимо, то Gearman - лучший способ сделать это. Но если вы пытаетесь передать данные из множества источников меньшему количеству потребителей данных, RabbitMQ - лучшее решение.
История RabbitMQ, как того, что позволило Twitter принимать всплески сообщений и отправлять их на старые SMS шлюзы, которые могли держать открытым только одно соединение, были ограничены по скорости и не имели повторных попыток, иллюстрирует тот тип проблем, которые RabbitMQ хорошо решает.