Resque gegen Sidekiq? [geschlossen]

127

Ich verwende derzeit Resquefür meinen Hintergrundprozess, aber in letzter Zeit habe ich viel Ärger gehört sidekiq. Könnte jemand vergleichen / unterscheiden?

Insbesondere möchte ich wissen, ob es eine Möglichkeit gibt, programmgesteuert zu überwachen, ob ein Auftrag in abgeschlossen ist sidekiq

Bhushan Lodha
quelle
71
Ich bin so aufgeregt zu sehen, dass diese Frage nicht als "für SO nicht geeignet" abgeschlossen wurde.
Dogweather
51
Können wir aufhören, all die guten Fragen zu schließen, bitte Leute. Ich weiß, dass es ziemlich breit ist, es ist auch ziemlich wichtig und ziemlich interessant.
Superluminary
19
Eines Tages werden sie eine Site erfinden, auf der Programmierer Fragen stellen können, und diese Site wird subjektive Antworten ermöglichen. Fragen, die aufgrund ihrer Relevanz ignoriert oder sogar abgestimmt werden können.
Baash05
4
@ baash05 und es wird Quora heißen!
Nakhli
6
Es wird Yahoo Answers heißen und die Qualität wird durch den Boden sinken.
Halfer

Antworten:

130

Resque:

Vorteile:

Nachteile

  • führt einen Prozess pro Worker aus (verwendet mehr Speicher);
  • wiederholt keine Jobs (jedenfalls sofort).

Sidekiq:

Vorteile

  • führt Thread pro Worker aus (verbraucht viel weniger Speicher);
  • weniger Gabelung (arbeitet schneller);
  • Weitere Optionen sofort einsatzbereit.

Nachteile

  • [riesig] erfordert Thread-Sicherheit Ihres Codes und aller Abhängigkeiten . Wenn Sie thread-unsicheren Code mit Threads ausführen, fragen Sie nach Problemen.
  • funktioniert bei einigen Rubinen besser als bei anderen (jruby wird empfohlen, die Effizienz bei der MRT wird aufgrund von GVL (Global VM Lock) verringert).
Sergio Tulentsev
quelle
19
Woher wissen Sie, ob Sie "Thread unsicherer Code" ausführen?
Dogweather
4
Wenn Sie beispielsweise den Status in globalen Variablen speichern, sind Sie in Schwierigkeiten :) Was die Edelsteine ​​betrifft, finden Sie hier einige im Wiki .
Sergio Tulentsev
25
@mrbrdo Du kannst nicht falscher sein. GVL hat nichts mit der Thread-Sicherheit Ihres Ruby-Codes zu tun. Bei der GVL geht es um die Thread-Sicherheit des Ruby-Interpreter-Codes (MRI C-Code).
Radarek
2
Ich muss dem "Profi" auf Resque widersprechen, der sagt "Sie können jeden Rubin verwenden". In der heutigen README for Resque heißt es tatsächlich: "Wir würden gerne Nicht-MRT-Rubine unterstützen, aber sie können Fehler aufweisen." github.com/resque/resque/blob/master/README.md#requirements
JellicleCat
2
Ich würde Sidekiq besonders vermeiden, wenn Sie planen, JavaScript in Ihren Jobs mit therubyracer auszuführen. Kein Fehler von Sidekiq an sich, aber das Multithreading verursacht Probleme für den Therubyracer. Siehe github.com/cowboyd/therubyracer/issues/206
Jeremy Burton
10

Aus der Frage:

Insbesondere möchte ich wissen, ob es eine Möglichkeit gibt, programmgesteuert zu überwachen, ob ein Auftrag in sidekiq abgeschlossen ist

Hier ist eine Lösung dafür:

  1. Sidekiq :: Status Juwel
  2. Batch-API (Sidekiq Pro) - Verwendung
Gurpartap Singh
quelle