Sidekiq Job-Nebenläufigkeitsproblem

Wir haben ein Problem mit Sidekiq, das auf mehreren Pods läuft.

Szenario 1:
In der Entwicklung haben wir eine einzelne Replik, was bedeutet, dass ein einzelner Pod läuft. Hier haben wir keine Probleme.
Zu Ihrer Information:
Überprüft: forum_url/sidekiq/busy (1 Prozess läuft)

Szenario 2:
In Pre-Prod und Prod haben wir mehr als eine Replik (mehr als ein Pod läuft). Wir haben ein Sidekiq-Concurrency-Problem (der Job läuft, überspringt aber die Codeausführung).

Zu Ihrer Information:
Überprüft: forum_url/sidekiq/busy (Mehr als 1 Prozess läuft). Für jeden Pod läuft ein Sidekiq-Prozess.

Korrigieren Sie mich,
Ist es in Ordnung, mehr als einen Sidekiq-Prozess auszuführen?
Wenn nicht, wie kann das Job-Concurrency-Problem behoben werden?

Zu Ihrer Information, wir verwenden Discourse Docker.

Welche geeigneten Schritte sollte ich befolgen? Vielen Dank im Voraus.

Was genau meinen Sie mit „Concurrency Issue“? Können Sie das bitte näher erläutern? Was läuft genau aus der Reihe?

Ein Sidekiq-Job, der einer Warteschlange hinzugefügt wird, garantiert keine allgemeine Ausführungsreihenfolge, da es verschiedene Warteschlangen mit unterschiedlichen Prioritäten gibt, sodass einige Jobs anderen voraus sein können.

Auch „Überspringen der Codeausführung“. Können Sie das näher erläutern? Welcher Code? Wenn ein Job ausgeführt wird, wird der Code nicht übersprungen. Haben Sie Ihre /logs überprüft, ob nichts kaputtgeht?

Und seien Sie sich bewusst, dass Sie möglicherweise eine nicht unterstützte Installation ausführen, die die Ursache Ihrer Probleme sein könnte …

4 „Gefällt mir“

Hallo @merefield Danke für die Antwort

Was genau meinen Sie mit „Concurrency-Problem“? Können Sie das bitte näher erläutern? Was läuft aus der Reihe?

Wie oben erwähnt, laufen in der Pre-Prod- und Produktionsumgebung mehr als ein Sidekiq-Prozess.

Ich bin mir nicht sicher! Der Job könnte verwirrt sein, wenn er „tigert“, welcher Prozess er wegen des Multi-Worker-Prozesses nehmen soll.

Auch „Codeausführung übersprungen“. Können Sie das näher erläutern? Welcher Code? Wenn ein Job läuft, wird der Code nicht übersprungen. Haben Sie Ihre /logs überprüft, ob nichts fehlschlägt?

Wir führen einige benutzerdefinierte Sidekiq-Jobs aus, die einige benutzerdefinierte Statistiken in eine CSV-Datei exportieren. Der Job läuft periodisch. Manchmal findet der Dateiexport nicht statt. Der Job läuft ohne Fehlermeldung.

Zum Beispiel:

Zu Testzwecken, wenn ich diesen Trigger-Button klicke, läuft der Job, aber der Dateiexport findet manchmal nicht statt.

Zu Ihrer Information, in der Dev-Umgebung läuft derselbe Code, aber es gibt nur einen Sidekiq-Worker-Prozess. Hier funktioniert es gut. Ich frage mich, ob das Problem daran liegt, dass in der Prod/Pre-Prod-Umgebung mehr als ein Sidekiq-Prozess läuft.

Haben Sie Ihre /logs überprüft, ob nichts fehlschlägt?

Ja, wir haben keine Fehler im Zusammenhang mit dem Job erhalten.

Und seien Sie sich bewusst, dass Sie möglicherweise eine nicht unterstützte Installation ausführen

Wir verwenden die neueste Discourse-Version.

Danke

Sie müssen mit Nebenläufigkeit rechnen. Es ist ein Multithread-Batch-System.

Das tun einige Leute auch auf Kubernetes, aber das wird hier nicht unterstützt.

Ich denke, Sie müssen Ihrer Job einige Protokollierungen hinzufügen, um herauszufinden, was vor sich geht.

Das ist Ihr eigener benutzerdefinierter Code, richtig?

Wir haben bereits Protokolle in unserem benutzerdefinierten Code hinzugefügt. Kein Problem mit unserem Code.

Ja

Ja, wir verwenden einen Kubernetes-Cluster.

Nur eine Frage!

Sollte der Sidekiq nur einen Prozess ausführen? Oder ist es in Ordnung, mehr als einen Sidekiq-Prozess auszuführen?

Wie jedes anständige Batch-System ist es darauf ausgelegt, mehr als einen Job gleichzeitig auszuführen, sonst würde es nicht skalieren.

Stellen Sie sicher, dass Sie dies bei der Gestaltung Ihrer Jobs berücksichtigen.