Delayed_job против Appoxy SimpleWorker - PullRequest
       35

Delayed_job против Appoxy SimpleWorker

6 голосов
/ 12 сентября 2011

Я уже собирался запустить 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 ]

5 голосов
/ 13 сентября 2011

Привет (это автор 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 в эти дни, или же они упростили процесс с тех пор, поэтому я не уверен, что приведенные выше заявления все еще действительны в настоящее время.

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

4 голосов
/ 14 сентября 2011

Привет (основатель 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.

0 голосов
/ 04 апреля 2012

Я использую отложенную работу, а затем выполняю грабли, которые я использую для масштабирования своих работников heroku в зависимости от наличия в моей базе данных 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 и, по сути, платить только за то, что я использую.

...