Frage

Hier sind meine Bedürfnisse:

  • Enqueue_in (10. Stunden, ...) (DJ -Syntax ist perfekt.)
  • Multiplizieren Sie die Arbeiter gleichzeitig. (Resque oder Beantalkd sind dafür gut, aber nicht DJ)
  • Muss Push and Pop von 100 Jobs pro Sekunde bewältigen. (Ich muss einen Test durchführen, um sicherzustellen, aber ich denke, DJ kann nicht so viele Jobs erledigen.)

Resque und BeaneStalkd machen nicht das Enqueue_in.

Es gibt ein Plugin (Resque_Scheduler), das es tut, aber ich bin mir nicht sicher, wie stabil es ist.

Unsere Umgebung ist bei Amazon und sie haben die Beantalkd kostenlos für die Amazon -Instanzen eingeführt, das ist ein Plus für uns, aber ich bin mir immer noch nicht sicher, welche Option hier die beste Option ist.

Wir betreiben Rails 2.3, aber wir bringen es bald auf Schienen 3.0.3.

Aber was ist meine beste Wahl hier? Vermisse ich ein anderes Juwel, das diesen Job besser macht?

Ich bin der Meinung, dass meine einzige Option, die jetzt tatsächlich funktioniert, der Resque_Scheduler ist.

Bearbeiten:

Sidekiq (https://github.com/mperham/sidekiq) ist eine weitere Option, die Sie überprüfen sollten.

War es hilfreich?

Lösung

Für meine Projekte werde ich mich sehr komfortabel fühlen CollectiveIdea/Delyed_job in Rails2 und 3. Ich kenne Beantalkd nicht, aber ich werde es bald versuchen :-). Ich habe die Vorschläge in der Resque -Dokumentation befolgt. Ich werde es melden.

Resque vs DelayedJob

Wie vergleicht sich Resque mit DelyedJob und warum sollten Sie einen über den anderen auswählen?

  • Resque unterstützt mehrere Warteschlangen
  • Delyedjob unterstützt feinere, körnige Prioritäten
  • Reseque -Arbeiter sind widerstandsfähig gegen Speicherlecks / aufblähen
  • Delyedjob -Mitarbeiter sind extrem einfach und leicht zu ändern
  • Resque benötigt Redis
  • DelayedJob erfordert Activerecord
  • Resque kann Jsonable Ruby -Objekte nur als Argumente in eine Warteschlange stellen
  • Delayedjob kann jedes Ruby -Objekt in seine Warteschlange als Argumente platzieren
  • Resque enthält eine Sinatra -App zur Überwachung, was los ist
  • DelayedJob kann in Ihrer Rails -App aus abgefragt werden, wenn Sie eine Schnittstelle hinzufügen möchten

Wenn Sie Rails -Entwicklung durchführen, haben Sie bereits eine Datenbank und Activerecord. Delayedjob ist super einfach zu richten und funktioniert großartig. Github nutzte es für viele Monate, um fast 200 Millionen Arbeitsplätze zu verarbeiten.

Wählen Sie Resque, wenn:

  • Sie benötigen mehrere Warteschlangen
  • Sie kümmern sich nicht darum / mögen numerische Prioritäten nicht
  • Sie müssen nie jedes Rubinobjekt halten
  • Sie haben möglicherweise riesige Warteschlangen
  • Sie möchten sehen, was los ist
  • Sie erwarten viel Versagen / Chaos
  • Sie können Redis einrichten
  • Sie laufen nicht zu kurz RAM

Wählen Sie DelayedJob, wenn:

  • Sie mögen numerische Prioritäten
  • Sie machen nicht jeden Tag eine gigantische Menge an Arbeitsplätzen
  • Ihre Warteschlange bleibt klein und flink
  • Es gibt nicht viel Versagen / Chaos
  • Sie möchten leicht alles in die Warteschlange werfen
  • Sie möchten Redis nicht einrichten

Wählen Sie BeaneStalkd, wenn:

  • Sie mögen numerische Prioritäten
  • Sie möchten eine extrem schnelle Warteschlange
  • Du willst dich nicht verschwenden, Ram
  • Sie möchten eine hohe Anzahl von Arbeitsplätzen bedienen
  • Sie sind in Ordnung mit Jsonable Ruby -Objekten in einer Warteschlange als Argumente
  • Sie benötigen mehrere Warteschlangen

In keiner Weise ist Resque ein "besserer" DelyedJob. Stellen Sie also sicher, dass Sie das Tool auswählen, das für Ihre App am besten geeignet ist.

Ein nettes Vergleich der Warteschlangengeschwindigkeit:

                 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

Einen schönen Tag noch!

PS Es gibt einen Railscast über Resque, Verzögerter Job (überarbeitete Version) und Beanstakld. Guck mal!

Pps meine Lieblingsschara ist jetzt Sidekiq (Sehr einfach, schnell und effizient für einfache Jobs), schauen Sie sich an diese Seite zum Vergleich.

Andere Tipps

Amazon BeaneStalk ist nicht Beantalkd.

BeaneStalkd - Die Warteschlange hat verzögerte Jobs, die erst dann aus der Warteschlange reserviert werden, bis die angegebene Anzahl von Sekunden vergangen ist. Wenn das was ist Enqueue_in(10.hours, ... ) bedeutet, dann ist es nur syntaktischer Zucker, um die Anzahl der Sekunden zu berechnen und bis dahin keinen Job zur Verfügung zu stellen.

Nur eine kleine Notiz: Delayed_job 3.0+ Unterstützt benannte Warteschlangen

object.delay(:queue => 'tracking').method    
Delayed::Job.enqueue job, :queue => 'tracking'    
handle_asynchronously :tweet_later, :queue => 'tweets'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top