Question

Voici mes besoins:

  • Enqueue_in (10.hours, ...) (syntaxe DJ est parfait.)
  • les travailleurs se multiplient, en même temps. (Resque ou beanstalkd sont bons pour cela, mais pas DJ)
  • Doit gérer et pousser pop de 100 emplois par seconde. (Je vais devoir effectuer un test pour vous assurer, mais je pense que DJ ne peut pas gérer ce grand nombre d'emplois)

Resque et beanstalkd ne font pas la enqueue_in.

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

Notre environnement est sur amazon, et ils roulèrent le beanstalkd gratuitement pour qui a amazon cas, qui est un plus pour nous, mais je ne suis toujours pas sûr de ce qui est la meilleure option ici.

Nous courons rails 2.3 mais nous apportons à la vitesse des rails 3.0.3 bientôt.

Mais ce qui est ici mon meilleur choix? Suis-je manque un petit bijou qui fait ce travail mieux?

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

Edit:

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

Était-ce utile?

La solution

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

Resque vs DelayedJob

Comment comparer Resque à DelayedJob, et pourquoi choisir l'un sur l'autre?

  • Resque prend en charge plusieurs files d'attente
  • supports de DelayedJob à grain plus fin priorités
  • travailleurs Resque résistent aux fuites de mémoire / ballonnement
  • les travailleurs DelayedJob sont extrêmement simples et faciles à modifier
  • Resque nécessite Redis
  • DelayedJob nécessite ActiveRecord
  • Resque ne peut placer des objets JSONable Ruby sur une file d'attente comme arguments
  • DelayedJob peut placer un objet Ruby sur sa file d'attente comme arguments
  • Resque comprend une application Sinatra pour surveiller ce qui se passe
  • DelayedJob peut être interrogé à partir de votre application Rails si vous souhaitez ajouter une interface

Si vous faites le développement Rails, vous avez déjà une base de données et ActiveRecord. DelayedJob est super facile à installer et fonctionne très bien. GitHub utilisé pendant plusieurs mois pour traiter près de 200 millions d'emplois.

Choisissez Resque si:

  • Vous avez besoin de plusieurs files d'attente
  • Vous ne vous souciez pas / ne pas aimer les priorités numériques
  • Vous n'avez pas besoin de persister tous les objets Ruby jamais
  • Vous avez des files d'attente potentiellement énormes
  • Vous voulez voir ce qui se passe
  • Vous vous attendez à beaucoup d'échec / chaos
  • Vous pouvez configurer Redis
  • Vous n'êtes pas en cours d'exécution sur RAM court

Choisissez DelayedJob si:

  • Vous aimez les priorités numériques
  • Vous ne faites pas une quantité gigantesque d'emplois chaque jour
  • Vos séjours de file d'attente petite et agile
  • Il n'y a pas un échec beaucoup / chaos
  • Vous voulez jeter facilement quoi que ce soit sur la file d'attente
  • Vous ne voulez pas configurer Redis

Choisissez beanstalkd si:

  • Vous aimez les priorités numériques
  • Vous voulez file d'attente extrêmement rapide
  • Vous ne voulez pas vous perdre RAM
  • Vous voulez servir nombre élevé d'emplois
  • Vous êtes très bien avec JSONable Ruby objets sur une file d'attente comme arguments
  • Vous avez besoin de plusieurs files d'attente

En aucun cas, est Resque une « meilleure » DelayedJob, alors assurez-vous de choisir l'outil qui est le mieux pour votre application.

Une belle comparaison de faire la queue vitesse de back-end :

                 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

Bonne journée!

P.S. Il y a un Railscast sur le resque , Delayed Job ( révisé Version ) et Beanstakld . Jetez un coup d'oeil!

P.P.S. Mon choiche préféré est maintenant Sidekiq (très simple, rapide et efficace pour les travaux simples), un coup d'oeil à cette page pour la comparaison.

Autres conseils

Amazon Beanstalk est pas beanstalkd.

beanstalkd - la file d'attente - n'ont des emplois en retard, qui ne seront pas réservés hors de la file d'attente jusqu'à avoir passé le nombre de secondes. Si tel est ce moyen de Enqueue_in(10.hours, ... ), alors il est juste du sucre syntaxique pour calculer le nombre de secondes, et ne pas faire un travail disponible jusque-là.

Just a small note: delayed_job 3.0+ supports named queues

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top