Warum warten Nachrichten in Amazon SQS so lange?

Ein Export bleibt aus, obwohl die API antwortet. Mit Nachrichtenalter, Verarbeitungsstatus und Dead-Letter Queue finden Sie heraus, wo die Verzögerung beginnt.

Schwarzweißfoto eines Gabelstaplerfahrers zwischen Palettenregalen
Fotografie: Jimmy Nilsson Masth / Unsplash

Ein Nutzer fordert einen Export an. Die Website nimmt den Auftrag an und soll später einen Downloadlink anzeigen. Doch die Datei erscheint nicht. Wenn Ihre Exporte über eine Standardwarteschlange in Amazon SQS laufen, prüfen Sie, wie lange Nachrichten dort liegen und was die verarbeitenden Prozesse damit machen. Bei gleicher Anzahl wartender Nachrichten kann sich die Warteschlange nach einer Lastspitze schnell leeren oder minutenlang stehen bleiben.

Die Wartezeit vom gewünschten Fertigstellungstermin ableiten

Bestimmen Sie zuerst, wann der Export verfügbar sein soll. Soll die Datei innerhalb von 5 Minuten nach Annahme der Anfrage bereitstehen und planen Sie 1 Minute für Erstellung und Bereitstellung ein, bleiben höchstens 4 Minuten Wartezeit. Diese Zahlen dienen als Beispiel. Setzen Sie die Alarmschwelle so, dass genug Zeit für die Auswertung und Zustellung des Alarms bleibt.

Beobachten Sie in CloudWatch die Metrik ApproximateAgeOfOldestMessage. Sie schätzt das Alter der ältesten unverarbeiteten Nachricht in Sekunden. Daran erkennen Sie, dass sich Arbeit bereits in der Warteschlange verzögert. Ob das Ziel eingehalten wurde, messen Sie in der Anwendung von der Annahme der Anfrage bis zur Bereitstellung der Datei. SQS sieht weder die Schritte vor dem Einreihen noch das Ergebnis beim Nutzer.

Prüfen, ob Nachrichten auf Abholung oder Abschluss warten

Zeigen Sie ApproximateNumberOfMessagesVisible und ApproximateNumberOfMessagesNotVisible auf derselben Zeitachse an. Die erste Metrik schätzt die Zahl der abrufbaren Nachrichten. Die zweite erfasst Nachrichten, die ein Worker bereits abgeholt und noch nicht gelöscht hat. Steigen Alter und Zahl der abrufbaren Nachrichten bei wenigen Nachrichten in Bearbeitung, prüfen Sie, ob die Worker laufen und aus der vorgesehenen Warteschlange lesen können. Die Wartezeit bis zum ersten Abruf ergibt sich näherungsweise aus der Differenz zwischen ApproximateFirstReceiveTimestamp und SentTimestamp. SQS kann beide Werte als Systemattribute der Nachricht zurückgeben.

Sind mehr Nachrichten in Bearbeitung und werden nur wenige Exporte fertig, prüfen Sie Verarbeitungsdauer, Fehler und Antwortzeiten des Speichers. Nach Ablauf des Visibility Timeout kann ein weiterer Worker eine ungelöschte Nachricht abrufen. Ordnen Sie wiederholte Abrufe in den Anwendungslogs derselben Export-ID zu. Die SQS-Zähler für Abrufe und Löschvorgänge können Wiederholungen enthalten. Messen Sie den Erfolg anhand fertiggestellter Exporte.

Nachrichten beobachten, die wiederholt zurückkehren

In einer Standardwarteschlange kann SQS eine wiederholt abgeholte und ungelöschte Nachricht ans Ende verschieben. Die Altersmetrik kann diese Nachricht dann auslassen. Erfassen Sie deshalb Verarbeitungsfehler pro Auftrag und bei eingerichteter Dead-Letter Queue (DLQ) deren ApproximateNumberOfMessagesVisible. Die DLQ nimmt Nachrichten auf, die nach Erreichen der eingestellten Abrufgrenze aus der Hauptwarteschlange verschoben wurden.

Bei einer verschobenen Nachricht zählt die Altersmetrik der DLQ ab dem Zeitpunkt des Verschiebens. Wie lange der Nutzer wartet, ergibt sich aus dem in der Anwendung gespeicherten Anfragezeitpunkt. Beheben Sie die Fehlerursache, bevor Sie Nachrichten in die Hauptwarteschlange zurückführen. Stellen Sie sicher, dass die erneute Ausführung desselben Auftrags keinen zusätzlichen Export und keine doppelte Benachrichtigung erzeugt.

Nach der Behebung die ältesten offenen Aufträge prüfen

Prüfen Sie nach der Korrektur, ob das Nachrichtenalter sinkt und wieder Exporte fertig werden. Fügen Sie Worker hinzu, wenn diese mehr Arbeit abwickeln können, ohne Speicher oder Datenbank zu überlasten. Suchen Sie noch offene Anfragen anhand ihrer ID und prüfen Sie ihren Status in der Anwendung und in der DLQ.

Führen Sie einen Testexport über den üblichen Ablauf durch. Messen Sie die Zeit von der Anfrage bis zum Öffnen der Datei und klären Sie, was aus den während der Störung verzögerten Anfragen geworden ist. Ein neuer Export kann gelingen, während ein älterer Auftrag noch einen Eingriff braucht.

  • Die Wartezeit danach bemessen, wann der Nutzer das Ergebnis braucht.
  • Alter, abrufbare Nachrichten und Nachrichten in Bearbeitung gemeinsam anzeigen.
  • Wiederholte Abrufe und die Anzahl der Nachrichten in der DLQ prüfen.
  • Die Verfügbarkeit neuer und verspäteter Exporte bestätigen.

Was Sie mitnehmen

Am Nachrichtenalter erkennen Sie, wann Sie die Warteschlange untersuchen sollten. Zähler und Logs helfen bei der Wahl des nächsten Schritts. Prüfen Sie zur Bestätigung der Wiederherstellung, wann Nutzer ihre fertigen Dateien erhalten.

Dokumentation und weiterführende Links

Mgr. Martin Hlavaj, MBA

Softwareentwickler

Alle Artikel

Erfahren Sie frühzeitig von Ausfällen.

Fügen Sie Ihre Website oder API zu UpBot hinzu und bestimmen Sie, wer den Alarm erhält.

Kostenlos überwachen