Redis
 sql >> Database >  >> NoSQL >> Redis

delay_jobs vs resque vs beanstalkd?

Per i miei progetti mi sentirò molto a mio agio con collectidea/delayed_job in rails2 e 3. Non conosco beanstalkd, ma lo proverò presto :-). Ho seguito i suggerimenti nella documentazione resque. Lo segnalerò.

Resque vs DelayedJob

Come si confronta Resque con DelayedJob e perché dovresti sceglierne uno rispetto all'altro?

  • Resque supporta più code
  • DelayedJob supporta priorità più dettagliate
  • I lavoratori di Resque sono resilienti alle perdite di memoria / rigonfiamenti
  • Gli operatori DelayedJob sono estremamente semplici e facili da modificare
  • Resque richiede Redis
  • DelayedJob richiede ActiveRecord
  • Resque può posizionare solo oggetti JSONable Ruby su una coda come argomenti
  • DelayedJob può inserire qualsiasi oggetto Ruby nella sua coda come argomento
  • Resque include un'app Sinatra per monitorare cosa sta succedendo
  • Puoi eseguire query su DelayedJob dall'app Rails se desideri aggiungere un'interfaccia

Se stai sviluppando Rails, hai già un database e ActiveRecord. DelayedJob è semplicissimo da configurare e funziona alla grande. GitHub lo ha utilizzato per molti mesi per elaborare quasi 200 milioni di lavori.

Scegli Ripeti se:

  • Hai bisogno di più code
  • Non ti interessa/non ti piacciono le priorità numeriche
  • Non hai bisogno di rendere persistenti tutti gli oggetti Ruby mai
  • Hai code potenzialmente enormi
  • Vuoi vedere cosa sta succedendo
  • Ti aspetti molti fallimenti/caos
  • Puoi configurare Redis
  • Non stai esaurendo la RAM

Scegli Lavoro ritardato se:

  • Ti piacciono le priorità numeriche
  • Non stai facendo una quantità enorme di lavori ogni giorno
  • La tua coda rimane piccola e agile
  • Non c'è molto fallimento/caos
  • Vuoi mettere facilmente qualsiasi cosa in coda
  • Non vuoi configurare Redis

Scegli Beanstalkd se:

  • Ti piacciono le priorità numeriche
  • Vuoi una coda estremamente veloce
  • Non vuoi sprecare RAM
  • Vuoi servire un numero elevato di lavori
  • Stai bene con oggetti JSONable Ruby su una coda come argomenti
  • Hai bisogno di più code

Resque non è in alcun modo un DelayedJob "migliore", quindi assicurati di scegliere lo strumento migliore per la tua app.

Un bel confronto tra la velocità del back-end in coda:

                 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

Buona giornata!

PS C'è un RailsCast su resque, Delayed Job (versione rivista) e Beanstakld. Dai un'occhiata!

P.P.S. La mia scelta preferita ora è Sidekiq (molto semplice, veloce ed efficiente per lavori semplici), dai un'occhiata a questa pagina per un confronto.