Ответ 1
Как обновление - GitHub переместился в Resque на Redis вместо Delayed job. Однако они по-прежнему рекомендуют delayed_job для небольших настроек:
Какими очередями сообщений являются люди, использующие их приложения Rails, и какова была движущая сила решения о его выборе. Означает ли последняя реклама в Twitter по поводу их очереди в доме, когда Starling падает, влияет на любые существующие дизайнерские решения.
Я работаю над приложением, которое будет нуждаться в очереди сообщений для обработки некоторых фоновых задач. Я не делал этого много, и большинство вещей, которые я видел в прошлом, касались Starling и Workling, а также честно говоря, приложение не очень большое, и этого решения, вероятно, будет достаточно, но мне бы хотелось получить опыт интеграции наилучшего возможного решения, поскольку я уверен, что в какой-то момент я буду интегрировать его в большее приложение.
Какие очереди сообщений вы предложите для Rails-приложения???
EDIT: Спасибо за предложения, я собираюсь посмотреть на некоторые из них в эти выходные.
EDIT Снова: я осмотрелся и немного перегружен для выбора. Однако я собираюсь объединить RabbitMQ с Workling в приложение, которое я создаю, тогда, если мне когда-нибудь понадобятся некоторые сведения о быстрой очереди, тогда я получу это и узнаю, соответствует ли он моим потребностям.
EDIT: Найти все больше и больше, что DJ подходит мне просто отлично, если я когда-либо "перерастю" его на сайт, я бы сказал, что Resque - это то место, где я бы возглавил.
EDIT: (декабрь 2014) Так что я давно не спрашивал об этом, но я вижу, что он все еще получает некоторые взгляды или некоторые голоса, поэтому я решил, что обновляю его на моем подходе сейчас, когда речь идет о моем выборе фоновых работников.
На мой взгляд, в настоящее время лучшим способом запуска фоновых заданий в Ruby является использование Sidekiq. Многие люди действительно похвалили Sidekiq за то, что он нанизал рабочих, а не на каждого работника, который может использовать значительно меньше памяти, чем подобные Resque, которые я использовал до Sidekiq. Это хорошо, но для меня это не была функция убийцы. Используя Sidetiq с Sidekiq, планирование заданий настолько тривиально, что я переключился и никогда не оглядывался назад, на сегодняшний день это самое простое планирование работы, которое я использовал, и сделало Sidekiq легким в использовании.
Как обновление - GitHub переместился в Resque на Redis вместо Delayed job. Однако они по-прежнему рекомендуют delayed_job для небольших настроек:
Крис Ванстрат из github недавно был на встрече SF Ruby, рассказывая о своей очереди. Они попробовали Starling, beanstalk и некоторые другие варианты, прежде чем поселиться в Shopify delayed_job. Они довольно агрессивны с использованием фона.
Здесь сообщение в блоге из прошлого года, в котором говорится об их переходе на DJ.
Где я сейчас, мы катались несколько лет назад, но я принимаю некоторые идеи от DJ, чтобы улучшить обработку.
Я бы рекомендовал delayed-job как мертвое простое решение, если вы не ожидаете большой нагрузки. Плюсы: простой в настройке, простой мониторинг, простой код, не имеет внешних зависимостей. Раньше мы использовали ActiveMessaging (с ActiveMQ и stomp), но это было излишним для нашего проекта, поэтому мы просто переключились на delayed_job.
В любом случае, если вам нужно очень зрелое и быстрое решение, ActiveMQ - очень хороший выбор. Если вы не хотите тратить слишком много времени на поддержание полномасштабного решения для организации очередей сообщений, вам это действительно не нужно, delayed_job - это способ пойти. Здесь хорошая статья о работе Scribd с ActiveMQ.
Вот несколько решений Ruby/Rails, один или несколько из них могут быть подходящими в зависимости от ваших потребностей:
http://xph.us/software/beanstalkd
http://rubyforge.org/forum/forum.php?forum_id=19781
http://backgroundrb.rubyforge.org
И, размещенное решение от Amazon, которое сделало бы большую очередь для совместного использования между Ruby/Rails и другими компонентами более крупной системы:
Надеюсь, это поможет!
Сервер обмена сообщениями, к которому вы, возможно, захотите пойти, - RabbitMQ. Erlang coolness, AMQP, хорошие библиотеки Ruby.
http://www.bestechvideos.com/2008/12/09/rabbitmq-an-open-source-messaging-broker-that-just-works
Рани Кеддо предоставил о Starling + Workling в RailsConf Europe в прошлом году. Он сравнивал различные решения, доступные в то время.
Twitter последнего перехода от Starling + Workling, вероятно, мало что значит для обычного рельсового приложения. У них гораздо больше проблем с масштабом и, вероятно, имеют устаревшие проблемы со своим хранилищем данных, что мешает им масштабировать их текущую реализацию.
Beanstalkd - хорошая альтернатива, просто потому, что он работает как демон и имеет обертки на других языках сценариев (если вам случится изменить направление в будущем или иметь разные компоненты, написанные на других языках).
Эта ссылка также имеет хорошее сравнение плюсов и недостатков различных решений для рельсов.
Я использую background_job, который нравится delayed_job представляет собой очередь на основе базы данных.
База данных создает очередь OK, пока вы не делаете слишком много трафика.
Причина, по которой мне нравится background_job (и delayed_job), заключается в том, что они не требуют отдельного процесса. Они могут проходить через cron. Для меня это имеет ключевое значение, потому что мои потребности в передаче сообщений еще проще, чем мои скудные навыки sysadmin.