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.