2014-07-07 14 views
6

Ich muss einige Hintergrundverarbeitung implementieren, um 1) E-Mails senden, 2) einige API-Aufrufe zu tun. Und welches System ich auch verwende, ich werde mich auch mit einer Art Cron-Scheduler verbinden (Wann immer es wahrscheinlich ist). Ich bin neugierig, ich erkenne, dass es eine Reihe wirklich cooler Hintergrundverarbeitungs-Edelsteine ​​gibt (Delayed Job, Sidekiq, Resque), aber ich verstehe auch, dass man Hintergrundverarbeitung mit nur einer Rake-Aufgabe pro Ryan Bates Video machen kann: http://railscasts.com/episodes/127-rake-in-background.Was ist der Unterschied zwischen der Ausführung von Rake-Aufgaben im Hintergrund und der Verwendung von Juwelen wie "Verzögerter Job", "Resque" oder "Sidekiq"?

Was sind die Vor-/Nachteile der Verwendung eines Edelsteins vs eine Rake-Aufgabe, Hintergrundprozess? Eine Sache an letzterem, die mich betrifft, ist, dass man jedes Mal, wenn eine Rake-Task aufgerufen wird, eine neue Umgebung erstellen muss, was für das Gedächtnis schrecklich teuer ist.

Bitte beachten Sie, ich brauche keinen Vergleich der Edelsteine. Diese Serie hat hier einen tollen Job gemacht: http://www.sitepoint.com/series/comparing-ruby-background-processing-libraries/

Antwort

3

Parallelität. Sie können N Mitarbeiter haben, die E-Mails parallel versenden. Mit Rake haben Sie einen einzigen Thread, das Versenden vieler E-Mails dauert eine Weile.

+0

Ja, die Zeit ist nicht super wichtig, da es bereits asynchron ist, und ehrlich gesagt habe ich nicht so viele E-Mails. Schneller Gedanke, das Aufwirbeln einer neuen Umgebung ist kein großes Problem mit dem Rake-Ansatz? – james

1

Ein weiterer großer Unterschied, der für mich eine Pause war, war, dass die Rake-Aufgabe im Hintergrund vom gleichen Heroku-Dyno abläuft, aber die anderen Add-ons erfordern einen separaten Arbeiter-Dyno.

EDIT, im Fall, dass googeln jemand, gerade gelernt, dass in Sidekiq Sie die gleichen Arbeiter dyno verwenden können, finden Sie in diesem Tutorial: https://coderwall.com/p/fprnhg

0

Ein weiterer großer Unterschied könnte die Werkzeuge ein Juwel wie sidekiq Ihnen das zu handhaben gibt Hintergrundjobs.

Wenn Sie beispielsweise einen geplanten Hintergrundjob verarbeiten müssen, um beispielsweise mehrere CSV-Dateien täglich zu lesen, müssen Sie möglicherweise das Ergebnis dieser Verarbeitung verarbeiten oder zumindest sehen, Messwerte lesen und im Falle eines Fehlers erneut versuchen usw. Ich denke, dass Sie das mit einer Rake-Aufgabe selbst schreiben müssten.

In meinem Fall (ich habe hier googeln), ich brauche eine sehr einfache und nicht so schwere Aufgabe geplant und asynchron, also gehe ich mit einer Rake-Aufgabe und ich erspare mir durch die Installation, Konfiguration und ein Juwel wie sidekiq (so einfach es auch sein mag) mit seinen Abhängigkeiten vom Server zu pflegen.