Gearman или RabbitMQ?

День добрый, господа.
Нужен ваш совет.

Пилю pet-проектик: Symfony, PostgreSQL.
Появилась необходимость в выполнении фоновых задач.
Естественно сразу подумал о RabbitMQ. Загуглил, вроде как еще очень сильно советуют Gearman.

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

Я в принципе уже почти выбрал RabbitMQ, т.к., немного работал c ним, но еще сомневаюсь.

Про Gearman почитал, пишут что возникают с ним иногда проблемки начиная с установки и собственно в процессе работы (где-то здесь на форуме чел. описывал какие-то проблемы, с которыми столкнулся).

У кого есть опыт работы с обеими брокерами очередей, хотелось бы услышать ваше мнение:

Чем одно лучше другого?
На сколько R тяжелее G в плане потребления ресурсов сервера?

Хотелось бы услышать именно личный опыт, а не выводы сделанные из каких-то статей.

Заранее благодарю всех за советы/ответы.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Сама задача: вытянуть из внешней апишки некий набор данных и сохранить его в базе. Количество этих данных неизвестно, но не должно быть настолько большим чтобы обработка занимала долгое время.
А чем просто cron не подходит или надо обязательно по команде, а не через интервал времени вытягивать данные из апи ?

Не хочется на cron завязываться (что-то не люблю я его).

В принципе крон то конечно подходит для текущей задачи. Но таски в любом случае хранить надо и джобу для их обработки писать. Мне кажется что лучше уже сразу что-то более подходящее для этого заюзать (да и очереди так или иначе понадобятся в будущем).

Я конечно могу заблуждаться, но скорее и джирман и ребит это просто такая себе шина обмена сообщениями/командами чем менеджер очередей, хотя конечно можно и для очередей использовать. Для очередей мне кажется вот есть неплохой вариант github.com/chrisboulton/php-resque

Спасибо, погляжу. Я как раз решил Redis попробовать.

К сожалению не знаком с RabbitMQ чтобы сравнить. А вот с Gearman работал и в целом мне он нравится, однако есть и минусы:
1) Установка. Если на сервере Ubuntu/Debian — установка проходит легко, инструкции в интернете есть. Но мне приходилось делать это на CentOS, и возни было много.
2) Может у кого и получилось подружить его с mysql, у меня нет. Впрочем, это было давно, со старой версией и с CentOS. Может быть это и возможно. Это значит, что задачи хранятся в памяти и ребут сервера или gearman приведет к потере задач. Если их мало и фейлы допустимы, это совершенно не критично.
3) Недавно мне понадобилось обменяться с фоновым процессом данными (была задача экспорта и нужно было вернуть имя файла по окончанию), что оказалось непредусмотренным. Также я не нашёл возможности как-то получать список активных задач. Поэтому если нужно взаимодействовать с фоновой задачей — это нужно решать самому. Например фоновый процесс может писать данные в базу, memcahe или файл, в зависимости от нужд.

Ну я предпочитаю убунту. Как раз интересовало нормально ли ставится на нее.

спасибо.

Недавно мне понадобилось обменяться с фоновым процессом данными (была задача экспорта и нужно было вернуть имя файла по окончанию), что оказалось непредусмотренным.
странно, gearman.org — второй пример и вторая картинка — разве это не то что нужно ?
Также я не нашёл возможности как-то получать список активных задач.
gearman.org/protocol -> секция Administrative Protocol, команда workers ?

нет, у нас свой самописный сервис, похожий на gearman — не такой универсальный, но позволяет получить результат фонового процесса

странно, gearman.org — второй пример и вторая картинка — разве это не то что нужно ?
Нет. Дело в том, что задачу можно запустить и ждать выполнения, а можно запустить в фоне и ничего не ждать. В первом случае результат вы получите, во втором вы получите хендлер задачи, который можете куда хотите сохранить и уже в другом скрипте спросить «а долго ещё?» (для этого воркер должен периодически сообщать гирману 2 цифры — сколько сделано и сколько всего). А вот получить какое-то возвращаемое значение — никак. И автору (как и большинству, имхо) нужен именно второй способ — запуск задачи в фоне.
gearman.org/protocol -> секция Administrative Protocol, команда workers ?
Какие у меня воркеры я и так знаю. А нужно было список задач, которые ждут в очереди или выполняются. Пришлось список хэндлеров при постановке задачи хранить в мемкеше самому.

Используем оба в продакшн. Пришли к рэббиту из-за некоторого не адекватного поведения гирмана, когда в нем скапливается много задач (миллионы — десятки миллионов). Но на практике рэббит справляется еще хуже. Конечно, возможно, мы так и не научились его готовить, но для себя сделал вывод, что если все что требяется от очереди это просто сохранять задачи разложеные по полочкам, то гирман намного лечге с этим справляется. Но как уже писали ниже, для таких задач и Redis хорошо подходит. Был очень положительный опыт работы с Resque.

Имхо: если количество задач проходящих через очередь < 100 в секунду, то хоть в файлки складывай данные и читай их потом демоном.

Ну до миллионов конечно еще очень далеко.
Я реббит использовал в одном проекте и проблем с ним не испытывал, но там конечно данных было > 500 000 но < 2 000 000

Файлики то конечно можно, но велосипеды как-то не особо хочется пилить. Для маленьких объемов можно и branstalkd (тоже есть опыт с ним). Но хочется чего-то посерьезнее, да и для опыта пригодится.

Ну а в общем как я понял, проблемы есть у всех :), их возникновение просто вопрос времени.

Ну а в общем как я понял, проблемы есть у всех :), их возникновение просто вопрос времени.
Вот это верно подмечено. У каждого продукта своя специфика. Отталкиваясь от нее люди уже и выбирают подходящие продукты. Так что выбирай то, с чем больше хочется поработать, а поменять очередь с A на B, при нормально написаной обертке, это вопрос часа времени.

Gearman — очеред задач, RabbitMQ система сообщений. Как вариант я бы еще рассмотрел Redis

Gearman не поддерживает php7 до сих пор. С ним немного проще писать воркеров, т.к не нужно заниматься инфраструктурой. Слышал последний раз о его использовании в больших компаниях эдак в 2009 году наверное..

Rabbitmq — отличная система, для Symfony есть бандл, который упрощает жизнь. Поддерживает push/pull модели, роутинг, система мониторинга. В продакшене давно испольщую

Redis щас часто берут вместо memcached, поэтому можно его же и использовать. Для пет проекта взял бы редис, но демона нужно будет писать вручную

Благодарю за ответ.

Redis щас часто берут вместо memcached, поэтому можно его же и использовать. Для пет проекта взял бы редис, но демона нужно будет писать вручную

Ну демон не проблема.
Думаю таки стоит поглядеть Redis.

По Gearman я где-то вычитал что его слабо контрибьютят. На гитхабе поглядел у них там за октябрь 2015 последние изменения (какие-то), у реббита вроде активности поболее. Собственно это одна из причин, по которым сомневаюсь в использовании Gearman

там особо нечего добавлять кроме исправления багов

Сама задача: вытянуть из внешней апишки некий набор данных и сохранить его в базе.

Для этой задачи в качестве брокера очередей достаточно Redis. Gearman/RabbitMQ будут оверхедом.

Ну это лишь одна из задач, дальше должно быть больше, но большинство из будущих задач (которые я сейчас вижу) так или иначе будут задачами на «контакт» с внешними api (получить или отправить какие-то данные). Ну возможно еще отправку почты через задачи сделаю (пока не уверен что это нужно).

с Redis не работал, думал что основная его суть это все таки хранение кеша.
А тут читнул вики и действительно есть там то что нужно.

Спасибо за совет.

Подписаться на комментарии