Подтвердить что ты не робот

Очереди сообщений в Ruby on Rails

Какими очередями сообщений являются люди, использующие их приложения Rails, и какова была движущая сила решения о его выборе. Означает ли последняя реклама в Twitter по поводу их очереди в доме, когда Starling падает, влияет на любые существующие дизайнерские решения.

Я работаю над приложением, которое будет нуждаться в очереди сообщений для обработки некоторых фоновых задач. Я не делал этого много, и большинство вещей, которые я видел в прошлом, касались Starling и Workling, а также честно говоря, приложение не очень большое, и этого решения, вероятно, будет достаточно, но мне бы хотелось получить опыт интеграции наилучшего возможного решения, поскольку я уверен, что в какой-то момент я буду интегрировать его в большее приложение.

Какие очереди сообщений вы предложите для Rails-приложения???

EDIT: Спасибо за предложения, я собираюсь посмотреть на некоторые из них в эти выходные.

EDIT Снова: я осмотрелся и немного перегружен для выбора. Однако я собираюсь объединить RabbitMQ с Workling в приложение, которое я создаю, тогда, если мне когда-нибудь понадобятся некоторые сведения о быстрой очереди, тогда я получу это и узнаю, соответствует ли он моим потребностям.

EDIT: Найти все больше и больше, что DJ подходит мне просто отлично, если я когда-либо "перерастю" его на сайт, я бы сказал, что Resque - это то место, где я бы возглавил.

EDIT: (декабрь 2014) Так что я давно не спрашивал об этом, но я вижу, что он все еще получает некоторые взгляды или некоторые голоса, поэтому я решил, что обновляю его на моем подходе сейчас, когда речь идет о моем выборе фоновых работников.

На мой взгляд, в настоящее время лучшим способом запуска фоновых заданий в Ruby является использование Sidekiq. Многие люди действительно похвалили Sidekiq за то, что он нанизал рабочих, а не на каждого работника, который может использовать значительно меньше памяти, чем подобные Resque, которые я использовал до Sidekiq. Это хорошо, но для меня это не была функция убийцы. Используя Sidetiq с Sidekiq, планирование заданий настолько тривиально, что я переключился и никогда не оглядывался назад, на сегодняшний день это самое простое планирование работы, которое я использовал, и сделало Sidekiq легким в использовании.

4b9b3361

Ответ 1

Как обновление - GitHub переместился в Resque на Redis вместо Delayed job. Однако они по-прежнему рекомендуют delayed_job для небольших настроек:

https://github.com/resque/resque

Ответ 2

Крис Ванстрат из github недавно был на встрече SF Ruby, рассказывая о своей очереди. Они попробовали Starling, beanstalk и некоторые другие варианты, прежде чем поселиться в Shopify delayed_job. Они довольно агрессивны с использованием фона.

Здесь сообщение в блоге из прошлого года, в котором говорится об их переходе на DJ.

Где я сейчас, мы катались несколько лет назад, но я принимаю некоторые идеи от DJ, чтобы улучшить обработку.

Ответ 3

Я бы рекомендовал delayed-job как мертвое простое решение, если вы не ожидаете большой нагрузки. Плюсы: простой в настройке, простой мониторинг, простой код, не имеет внешних зависимостей. Раньше мы использовали ActiveMessaging (с ActiveMQ и stomp), но это было излишним для нашего проекта, поэтому мы просто переключились на delayed_job.

В любом случае, если вам нужно очень зрелое и быстрое решение, ActiveMQ - очень хороший выбор. Если вы не хотите тратить слишком много времени на поддержание полномасштабного решения для организации очередей сообщений, вам это действительно не нужно, delayed_job - это способ пойти. Здесь хорошая статья о работе Scribd с ActiveMQ.

Ответ 4

Вот несколько решений Ruby/Rails, один или несколько из них могут быть подходящими в зависимости от ваших потребностей:

http://xph.us/software/beanstalkd

http://rubyforge.org/forum/forum.php?forum_id=19781

http://backgroundrb.rubyforge.org

И, размещенное решение от Amazon, которое сделало бы большую очередь для совместного использования между Ruby/Rails и другими компонентами более крупной системы:

http://aws.amazon.com/sqs

Надеюсь, это поможет!

Ответ 6

Рани Кеддо предоставил о Starling + Workling в RailsConf Europe в прошлом году. Он сравнивал различные решения, доступные в то время.

Twitter последнего перехода от Starling + Workling, вероятно, мало что значит для обычного рельсового приложения. У них гораздо больше проблем с масштабом и, вероятно, имеют устаревшие проблемы со своим хранилищем данных, что мешает им масштабировать их текущую реализацию.

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

Эта ссылка также имеет хорошее сравнение плюсов и недостатков различных решений для рельсов.

Ответ 7

Я использую background_job, который нравится delayed_job представляет собой очередь на основе базы данных.

База данных создает очередь OK, пока вы не делаете слишком много трафика.

Причина, по которой мне нравится background_job (и delayed_job), заключается в том, что они не требуют отдельного процесса. Они могут проходить через cron. Для меня это имеет ключевое значение, потому что мои потребности в передаче сообщений еще проще, чем мои скудные навыки sysadmin.