Вопрос

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

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

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

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

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

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

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

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

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

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

Это было полезно?

Решение

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

Resque vs DelayedJob

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

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

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

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

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

Выберите отложенное задание, если:

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

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

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

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

Приятный сравнение скорости работы серверной части системы массового обслуживания:

                 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.Есть рельсовый репортаж о рескве, Отложенное задание (пересмотренная версия) и Бобовый Стак.Взгляните-ка!

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

Другие советы

Amazon Beanstalk - это не Beanstalkd.

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

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

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top