64 votes

retards_emplois vs resque vs beanstalkd?

Voici mes besoins:

  • Enqueue_in(10.heures, ... ) (DJ syntaxe est parfait.)
  • Multipliez les travailleurs, en même temps. (Resque ou beanstalkd sont bon pour cela, mais pas le DJ)
  • Doit gérer le push et pop de 100 emplois d'une seconde. (J'aurai besoin de faire un test pour être sûr, mais je pense que DJ ne peut pas gérer ce nombre d'emplois)

Resque et beanstalkd ne pas faire le enqueue_in.

Il y a un plugin (resque_scheduler) qui ne fait que ça, mais je ne suis pas sûr de la façon stable, il est.

Notre environnement est sur amazon, et ils ont déployé la beanstalkd gratuitement pour qui a amazon cas, c'est un plus pour nous, mais je ne suis toujours pas sûr de ce qui est la meilleure option ici.

Nous lançons rails 2.3 mais nous amenant à la vitesse de rails 3.0.3 bientôt.

Mais qu'est-ce que mon meilleur choix ici? Ai-je raté un autre joyau qui fait ce travail mieux?

Je sens que ma seule option qui fonctionne réellement, c'est maintenant le resque_scheduler.

Edit:

Sidekiq (https://github.com/mperham/sidekiq) est une autre option que vous devriez vérifier.

137voto

andrea Points 2709

Pour mes projets, je ne me comfortbale avec collectiveidea/delayed_job dans rails2 et 3. Je ne sais pas beanstalkd, mais je vais essayer bientôt :-). J'ai suivi les suggestions de l'resque de la documentation. Je vais le signaler.

Resque vs DelayedJob

Comment ne Resque comparer à DelayedJob, et pourquoi voudriez-vous choisir l'un plutôt que l'autre?

  • Resque prise en charge de plusieurs files d'attente
  • DelayedJob supporte plus fine des priorités
  • Resque travailleurs sont résistants à des fuites de mémoire / ballonnement
  • DelayedJob les travailleurs sont extrêmement simple et facile à modifier
  • Resque nécessite Redis
  • DelayedJob nécessite ActiveRecord
  • Resque ne peut le mettre JSONable objets Ruby sur une file d'attente comme arguments
  • DelayedJob pouvez placer n'importe Rubis sur l'objet de sa file d'attente comme arguments
  • Resque comprend un Sinatra application pour le suivi de ce qui se passe
  • DelayedJob peut être interrogé à partir de votre application Rails, si vous souhaitez ajouter une interface

Si vous êtes en train de faire les Rails du développement, vous avez déjà une base de données et ActiveRecord. DelayedJob est super facile à installer et fonctionne très bien. GitHub utilisé pour beaucoup de mois pour le traitement de près de 200 millions d'emplois.

Choisissez Resque si:

  • Vous avez besoin de plusieurs files d'attente
  • Vous ne vous inquiétez pas / n'aime numérique priorités
  • Vous n'avez pas besoin de persister chaque Ruby objet jamais
  • Vous avez potentiellement énormes files d'attente
  • Vous voulez voir ce qu'il se passe
  • Vous attendez beaucoup de l'échec ou du chaos
  • Vous pouvez configurer Redis
  • Vous n'êtes pas en cours d'exécution court de la RAM

Choisissez DelayedJob si:

  • Vous aimez numérique priorités
  • Vous n'êtes pas d'effectuer une quantité gigantesque d'emplois chaque jour
  • Votre file d'attente reste petit et agile
  • Il n'y a pas beaucoup d'échec / chaos
  • Vous voulez facilement jeter quoi que ce soit sur la file d'attente
  • Vous ne voulez pas installer Redis

Choisissez Beanstalkd si:

  • Vous aimez numérique priorités
  • Vous souhaitez extrêmement rapide de la file d'attente
  • Vous ne voulez pas vous gâcher la RAM
  • Vous souhaitez répondre à nombre élevé d'emplois
  • Vous êtes très bien avec JSONable objets Ruby sur une file d'attente comme arguments
  • Vous avez besoin de plusieurs files d'attente

N'est en aucune façon Resque une "meilleure" DelayedJob, alors assurez-vous de choisir l'outil qui convient le mieux à votre application.

Une belle comparaison de la mise en attente du backend de vitesse:

                 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

Have a nice day!

P. S. Il y a un RailsCast sur resque, Retardé d'Emploi (version révisée) et Beanstakld. Avoir un coup d'oeil!

P. P. S. Mon préféré choiche est maintenant Sidekiq ( très Simple, Rapide et efficace pour des travaux simples ), jetez un oeil à cette page à des fins de comparaison.

8voto

Alister Bulman Points 12913

Amazon Beanstalk n'est pas Beanstalkd.

Beanstalkd - la file d'attente - contient des travaux différés qui ne seront pas réservés en dehors de la file d'attente avant la fin du nombre de secondes indiqué. Si tel est ce que Enqueue_in(10.hours, ... ) signifie, alors il ne reste plus que du sucre syntaxique pour calculer le nombre de secondes, et ne pas rendre un travail disponible avant cette date.

8voto

altuure Points 95

Juste une petite remarque: delay_job 3.0+ prend en charge les files d'attente nommées

 object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X