Redis
 sql >> Datenbank >  >> NoSQL >> Redis

delayed_jobs vs resque vs beanstalkd?

Für meine Projekte werde ich mich mit Collectiveidea/delayed_job in Rails2 und 3 sehr wohl fühlen. Ich kenne Beanstalkd nicht, aber ich werde es bald versuchen :-). Ich habe die Vorschläge in der entsprechenden Dokumentation befolgt. Ich werde darüber berichten.

Resque vs DelayedJob

Wie schneidet Resque im Vergleich zu DelayedJob ab und warum sollten Sie sich für eines entscheiden?

  • Resque unterstützt mehrere Warteschlangen
  • DelayedJob unterstützt feinkörnigere Prioritäten
  • Resque Worker sind widerstandsfähig gegen Speicherlecks/Bloat
  • DelayedJob-Worker sind extrem einfach und leicht zu ändern
  • Resque erfordert Redis
  • DelayedJob erfordert ActiveRecord
  • Resque kann nur JSONable Ruby-Objekte als Argumente in eine Warteschlange stellen
  • DelayedJob kann jedes Ruby-Objekt als Argumente in seine Warteschlange stellen
  • Resque enthält eine Sinatra-App zur Überwachung dessen, was vor sich geht
  • DelayedJob kann innerhalb Ihrer Rails-App abgefragt werden, wenn Sie eine Schnittstelle hinzufügen möchten

Wenn Sie Rails entwickeln, haben Sie bereits eine Datenbank und ActiveRecord. DelayedJob ist super einfach einzurichten und funktioniert super. GitHub hat es viele Monate lang verwendet, um fast 200 Millionen Jobs zu verarbeiten.

Wählen Sie Reque if:

  • Sie benötigen mehrere Warteschlangen
  • Numerische Prioritäten sind Ihnen egal / nicht gefallen
  • Sie müssen nicht jedes Ruby-Objekt dauerhaft speichern
  • Sie haben potenziell riesige Warteschlangen
  • Sie möchten sehen, was los ist
  • Du erwartest viel Scheitern / Chaos
  • Sie können Redis einrichten
  • Der Arbeitsspeicher geht Ihnen nicht aus

Wählen Sie DelayedJob, wenn:

  • Sie mögen numerische Prioritäten
  • Sie erledigen nicht jeden Tag eine gigantische Menge an Jobs
  • Ihre Warteschlange bleibt klein und wendig
  • Es gibt nicht viel Misserfolg / Chaos
  • Sie möchten einfach alles in die Warteschlange werfen
  • Sie möchten Redis nicht einrichten

Wählen Sie Beanstalkd, wenn:

  • Sie mögen numerische Prioritäten
  • Sie möchten eine extrem schnelle Warteschlange
  • Du willst deinen Arbeitsspeicher nicht verschwenden
  • Sie möchten viele Jobs bedienen
  • Sie können JSONable Ruby-Objekte in einer Warteschlange als Argumente verwenden
  • Sie benötigen mehrere Warteschlangen

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

Ein netter Vergleich der Warteschlangen-Backend-Geschwindigkeit:

                 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

Ich wünsche Ihnen einen schönen Tag!

P.S. Es gibt einen RailsCast über resque, Delayed Job (überarbeitete Version) und Beanstakld. Schau mal!

P.S.S. Meine Lieblingswahl ist jetzt Sidekiq ( sehr einfach, schnell und effizient für einfache Aufgaben ), sehen Sie sich diese Seite zum Vergleich an.