delayed_jobs против resque против beanstalkd? - PullRequest
64 голосов
/ 26 января 2011

Вот мои потребности:

  • Enqueue_in (10.hours, ...) (Синтаксис DJ идеален.)
  • Умножение рабочих одновременно. (Resque или beanstalkd хороши для этого, но не для DJ)
  • Должен обрабатывать 100 нажатий в секунду. (Мне нужно будет выполнить тест, чтобы убедиться, но я думаю, что DJ не может справиться с таким количеством заданий)

Resque и beanstalkd не выполняют enqueue_in.

Существует плагин (resque_scheduler), который делает это, но я не уверен, насколько он стабилен.

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

Мы запускаем рельсы 2.3, но скоро доведем его до скорости 3.0.3.

Но какой мой лучший выбор здесь? Я скучаю по другому драгоценному камню, который делает эту работу лучше?

Я чувствую, что мой единственный вариант, который действительно работает сейчас, это resque_scheduler.

Редактировать:

Sidekiq (https://github.com/mperham/sidekiq) - это еще один вариант, который вы должны проверить.

Ответы [ 3 ]

137 голосов
/ 27 января 2011

Для моих проектов я буду чувствовать себя очень комфортно с colleideidea / delayed_job в rails2 и 3. Я не знаю beanstalkd, но скоро попробую :-).Я следовал за предложениями в документации Resque.Я сообщу об этом.

Resque vs DelayedJob

Как Resque сравнивается с DelayedJob и почему вы выбираете одну поверх другой?

  • Resque поддерживает несколько очередей
  • DelayedJob поддерживает более мелкозернистые приоритеты
  • Работники Resque устойчивы к утечкам памяти / раздуванию
  • Работники DelayedJob чрезвычайно просты и легко модифицируются
  • Resque требует Redis
  • Для DelayedJob требуется ActiveRecord
  • Resque может помещать только объекты JSONable Ruby в очередь в качестве аргументов
  • DelayedJob может помещать любой объект Ruby в свою очередь в качестве аргументов
  • Resque включает приложение Sinatra дляотслеживание происходящего
  • DelayedJob можно запросить из приложения Rails, если вы хотите добавить интерфейс

Если вы занимаетесь разработкой Rails, у вас уже есть база данных и ActiveRecord,DelayedJob очень прост в настройке и прекрасно работает.GitHub использовал его в течение многих месяцев для обработки почти 200 миллионов заданий.

Выберите Resque, если:

  • Вам нужно несколько очередей
  • Вам все равно / не нравится числовое значениеприоритеты
  • Вам не нужно постоянно сохранять каждый объект Ruby
  • У вас потенциально огромные очереди
  • Вы хотите посмотреть, что происходит
  • Вы ожидаетемного неудач / хаоса
  • Вы можете настроить Redis
  • У вас не хватает ОЗУ

Выберите DelayedJob, если:

  • Вам нравятся числовые приоритеты
  • Вы не выполняете гигантское количество заданий каждый день
  • Ваша очередь остается маленькой и проворной
  • Не много провалов / хаоса
  • Вы хотите легко выбросить что-нибудь в очередь
  • Не хотите настраивать Redis

Выберите Beanstalkd, если:

  • Вам нравятся числовые приоритеты
  • Вы хотите очень быструю очередь
  • Вы не хотите тратить свою оперативную память
  • Вы хотите обслуживать большое количество заданий
  • У вас все в порядке с объектами JSONable Ruby в очереди в качестве аргументов
  • Вам нужно несколько очередей

В нетResque - «лучший» DelayedJob, поэтому убедитесь, что вы выбрали инструмент, который лучше всего подходит для вашего приложения.

Отличное сравнение скорости бэкенда в очереди :

                 enqueue                work
-------------------------------------------------
delayed job |   200 jobs/sec     120 jobs/sec
resque      |  3800 jobs/sec     300 jobs/sec
rabbitmq    |  2500 jobs/sec    1300 jobs/sec
beanstalk   |  9000 jobs/sec    5200 jobs/sec

Хорошего дня!

PS Существует RailsCast о resque , Задержка задания ( исправленная версия ) и Beanstakld .Взгляните!

PPS Мой любимый выбор - теперь Sidekiq (очень простой, быстрый и эффективный для простых заданий), посмотрите на эту страницу для сравнения.

8 голосов
/ 26 января 2012

Просто небольшая заметка: delayed_job 3.0 + поддерживает именованные очереди

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
8 голосов
/ 27 января 2011

Амазонский бобовый стебель - это не бобовый стебель.

Beanstalkd - очередь - имеет отложенные задания, которые не будут зарезервированы из очереди, пока не пройдет заданное количество секунд. Если это то, что означает Enqueue_in(10.hours, ... ), то это просто синтаксический сахар для вычисления количества секунд, а не для того, чтобы сделать работу доступной до тех пор.

...