отложено рабочих мест против спасательная против beanstalkd?


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

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

Resque и beanstalkd не делают enqueue_in.

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

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

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

но что это мой лучший выбор? Мне не хватает еще одного драгоценного камня, который делает эту работу лучше?

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

Edit:

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

3 63

3 ответа:

для моих проектов я буду чувствовать себя очень комфортно с collectiveidea/delayed_job в рельсах 2 и 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, если:

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

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

  • вы как числовые приоритеты!--10-->
  • вы хотите очень быстро очередь
  • вы не хотите тратить вас RAM
  • вы хотите служить большое количество рабочих мест
  • вы в порядке с 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

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

P. S. Есть RailsCast о resque,Отложенная Задание (редакции) и Beanstakld. Иметь смотри!

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

Amazon Beanstalk-это не Beanstalkd.

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

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

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'