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.