Delayed_job против Appoxy SimpleWorker

Я собирался запустить и запустить delayed_job в своем приложении, когда обнаружил Appoxy SimpleWorker в Heroku.

Appoxy заявляет, что она в значительной степени параллельна, и что она масштабирует работников вверх и вниз, чтобы минимизировать затраты. Тем не менее, мне кажется, что с HireFire, delayed_job также. Вот мой вопрос: что бы вы выбрали: delayed_job + HireFire или SimpleWorker? (и почему?)

https://github.com/tobi/delayed_job
http://hirefireapp.com/
http://addons.heroku.com/simple_worker

Мое приложение на данный момент невелико - громкость мала, а количество приложений не должно быть чрезмерно высоким в течение длительного времени.


Где еще можно ожидать получения ответов непосредственно от основателей обеих служб? Спасибо Майклу и Трэвису!

3 ответа

Привет (это автор HireFire)

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

Оба решения используют разные подходы. HireFire при необходимости просто масштабирует сеть Heroku и рабочие динамометры. Вам не нужно ничего менять в существующей кодовой базе, вы просто используете отложенное задание как обычно. Вам не нужно отправлять / писать код для отдельной среды / платформы, так как при развертывании он компилируется в качестве slug на платформе Heroku, и когда появляется новый веб или рабочий dyno, slug используется и запускается немедленно (содержащий все ваши Переменные / настройки ENV.

Недостатком HireFire по сравнению с SimpleWorker является то, что HireFire является специфичным для Heroku. Поэтому, если вы когда-нибудь переключитесь с Heroku на, например, EngineYard или VPS/Dedicated box, HireFire не будет работать, но SimpleWorker сработает, поскольку он не привязан строго к Heroku. Хотя, возможно, размещение на платформе, отличной от PaaS, очень дешево (для сравнения), поэтому автоматическое масштабирование необязательно будет требоваться так же сильно или вовсе.

До разработки HireFire я был клиентом SimpleWorker, и лично мне не понравилось то, что мне пришлось перенести часть моей кодовой базы в SimpleWorker и загрузить в свою среду Rails, повторно подключиться к базе данных с местоположения их серверов и также делайте запросы API (?) каждый раз, когда я хочу отправить работу в облако (хотя это могло бы измениться сейчас, поэтому я рекомендую вам проверить это для себя, чтобы быть уверенным, и, возможно, это не большое вопрос для вас, как это было для меня). Для меня это было просто слишком много хлопот / проб и ошибок каждый раз, когда я хотел добавить новые классы заданий, и мне приходилось загружать все отдельные фрагменты кода из моего приложения и моих драгоценных камней в сами файлы классов заданий, тогда как запуск heroku ps:workers 1 или же heroku ps:scale worker=2 мгновенно раскрутил бы работника или двух и начал бы обработку с нулевыми изменениями в моей базе кода, точно так же, как когда я запускаю его локально, поскольку все мое приложение уже скомпилировано в качестве slug на Heroku, оно просто использует это, включая мои переменные ENV и другие настройки / дополнения, и это быстро раскручивается.

С HireFire вам просто нужно добавить гем hirefireapp в ваш Gemfile, добавить свою учетную запись / приложения Heroku в веб-интерфейс HireFire, настроить ваши потребности в масштабировании, развернуть приложение в Heroku, и все. Ваши приложения будут постоянно отслеживаться и управляться / корректироваться (с точностью до минуты).

HireFire не имеет гладкого интерфейса с таблицами заданий и их статусом (запущен / завершен / не выполнен / и т. Д.) (В нем, конечно же, есть обзор текущего количества веб-рабочих и рабочих динамов и заданий в очереди для каждого приложения, и настраиваемые параметры масштабирования), хотя на самом деле это задача рабочей библиотеки обеспечить такую ​​функциональность. Отложенное задание из того, что я знаю, имеет один или два небольших интерфейса администратора, которые вы можете использовать (с открытым исходным кодом), которые не привязаны к HireFire. Поскольку SimpleWorker является как размещенной службой, так и рабочей библиотекой в ​​одной, они также предоставляют вам веб-интерфейс.

HireFire имеет возможность масштабировать и ваши веб-динос, а не только ваши рабочие.

Обе службы имеют возможность обрабатывать много заданий параллельно, поскольку Heroku и SimpleWorker пропорционально уступают второму, насколько я понимаю. Так что, если вы раскручиваете 10 рабочих динамовцев в течение 6 секунд или 1 в течение 60 секунд, это не имеет значения (или едва) в затратах.

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

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

Привет (основатель SimpleWorker),

Майкл подвел итог довольно красиво, но я добавлю несколько различий между Heroku Workers и SimpleWorker, необязательно HireFire.

  • В Heroku может работать не более 24 человек одновременно, что означает, что одновременно могут работать только 24 рабочих места. С SimpleWorker вы можете запускать тысячи раз (и больше по мере нашего роста) без каких-либо изменений.
  • Масштабирование с помощью SimpleWorker не требует никаких усилий, поэтому по мере роста вашего приложения вам не нужно ничего менять, просто продолжайте создавать новые рабочие места на своем пути.
  • Heroku взимает плату, используете ли вы работников или нет, SimpleWorker - нет. Это проблема, которую HireFire решает, хотя это не проблема, если вы используете HireFire.
  • SimpleWorker имеет встроенное планирование, поэтому вам не нужен cron или что-то еще, чтобы начать работу.
  • Интерфейс управления, позволяющий визуализировать всех ваших рабочих / рабочих мест, находить ошибки, получать оповещения об ошибках, просматривать журналы всех ваших работ и т. Д.

Недостатком является то, что для того, чтобы использовать SimpleWorker, нужно немного больше думать, поскольку он не работает в полной среде Rails. Вы должны думать о своих работниках как об отдельных объектах, работающих в другой системе (которой они являются). Для простых вещей, таких как отправка электронного письма в фоновом режиме или выгрузка некоторых вещей из вашего внешнего интерфейса здесь и там, Heroku Workers, вероятно, является хорошим выбором. Если вы выполняете какие-либо большие пакетные задания, планируете, выполняете долго выполняемые задания, хотите больше видеть ваши задания и т. Д., То вы можете попробовать SimpleWorker.

Кстати, мы недавно выложили несколько новых видео, чтобы вы могли понять, как это работает и как легко им пользоваться: http://www.simpleworker.com/how_it_works/videos

Надеюсь, это поможет! И не стесняйтесь задавать мне любые ваши вопросы о SimpleWorker.

Я использую отложенную работу, а затем выполняю грабли, которые я использую для масштабирования рабочих героев в зависимости от того, есть ли в моей базе данных delayed_jobs:

namespace :heroku do
  namespace :workers do
    desc "stop heroku workers"
    task :stop do
      p ['stopping workers for', CONFIG['heroku_project']]
      Heroku::Client.new(ENV['HEROKU_EMAIL'], ENV['HEROKU_PASSWORD']).set_workers(CONFIG['heroku_project'], 0)
    end

    desc "start heroku workers"
    task :start do
      p ['starting workers for', CONFIG['heroku_project']]
      Heroku::Client.new(ENV['HEROKU_EMAIL'], ENV['HEROKU_PASSWORD']).set_workers(CONFIG['heroku_project'], 1)
    end

    desc "starts workers if the are items in the queue, otherwise, stops them."
    task :check_queue => :environment do
      p ["Env: ", Rails.env]
      count = DelayedJob.find_pending.count
      p ['Pending delayed jobs: ', count]
      if count > 0
        Rake::Task['heroku:workers:start'].invoke
      else
        Rake::Task['heroku:workers:stop'].invoke
      end
    end
  end
end

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

Мне нравится это решение, потому что я могу использовать DelayedJob (с которым я знаком), и вместо того, чтобы использовать другой плагин или стороннее устройство, все, что мне нужно, - это одно простое задание по рейку, чтобы ограничить расходы на Heroku и, по сути, платить только за то, что я использую.

Другие вопросы по тегам