Unser Setup besteht aus einer Python Flask-Anwendung, die auf AWS EC2 mit automatischer Skalierung bereitgestellt wird, und sie nutzt eine MySQL-Datenbank.
Wir haben auch Jobs auf einem separaten Linux-System geplant, die alle 10 Sekunden ausgelöst werden und die API-Endpunkte erreichen https://api.example.com
.
Die Anwendung läuft unter pm2.
Vor Kurzem sind uns Probleme mit Datenduplizierung aufgrund dieser geplanten Jobs begegnet. Obwohl der Cron-Job korrekt auf eine Ausführung alle 10 Sekunden eingestellt ist, haben wir Fälle beobachtet, in denen derselbe Job gleichzeitig mit nur Mikrosekunden Abstand ausgeführt wurde. Nach der Aktivierung der API-Protokolle konnten wir diese Vorkommnisse bestätigen.
Es ist verwirrend, wie diese Jobs gleichzeitig ausgeführt werden, obwohl sie alle 10 Sekunden auf die API-URLs zugreifen sollen. Wir suchen Rat zu Methoden oder Tools, die uns bei der Diagnose dieses Problems helfen könnten, sowie zu Strategien, um solche gleichzeitigen Jobausführungen zu verhindern.
Antwort1
Das Ausführen sich wiederholender Jobs ohne Überprüfung auf einzelne Kopien des Jobs, insbesondere in so kurzen Abständen, ist ein direktes Zeichen für Probleme.
Sie können die Laufzeit des API-Aufrufs messen und den Zeitplan auf das längste Intervall einstellen.UNDImplementieren Sie eine Prüfung, sodass nur eine Kopie des Jobs ausgeführt wird. Sie können festlegen, dass der Job übersprungen wird, wenn er bereits ausgeführt wurde, und eine Art Alarm senden, sodass Sie das geplante Intervall (noch einmal) überdenken können.
Natürlich können Sie eine Art Warteschlange für übersprungene Jobs organisieren, aber das hängt stark von der Art des Jobs ab. Und Sie laufen Gefahr, dass die Warteschlange ständig länger wird.