Verlagern Sie lange oder zeitweise unzuverlässige Operationen in den Hintergrund, legen Sie einen stabilen Aufgabendatensatz an und sorgen Sie für eine robuste Verarbeitung. Definieren Sie Status, Idempotenz, Timeout, Wiederholungen, Prioritäten und Grenzen für Parallelität und zeigen Sie dem Nutzer dann Fortschritt, Ergebnis, eine sichere Abbruchmöglichkeit und die Möglichkeit, Fehler zu beheben.
Export, Import, Dokumenterstellung oder der Aufruf eines langsamen externen Systems müssen eine offene Webanfrage nicht blockieren. Eine Hintergrundaufgabe ermöglicht es der Anwendung, den Eingang schnell zu bestätigen und die Arbeit separat abzuschließen. Dadurch entsteht jedoch ein neuer Zustand: Das Ergebnis ist noch nicht fertig, und der Nutzer muss wissen, was mit seiner Anfrage geschieht.
Eine Queue allein sorgt noch nicht für Zuverlässigkeit. Die Verarbeitung kann wiederholt werden, ein Worker kann mitten in einer Operation abbrechen, und einzelne Aufgaben können um Kapazität konkurrieren. Ein gutes Design verbindet ein Zustandsmodell, Idempotenz, kontrollierte Wiederholungen, Prioritäten, Beobachtbarkeit und eine Benutzeroberfläche, die einen Fehler nicht hinter einer endlosen Ladeanzeige versteckt.
Entscheiden Sie, was asynchron sein soll
Eine Hintergrundaufgabe eignet sich, wenn ein Vorgang unvorhersehbar lange dauert, auf einen externen Dienst wartet, größere Datenmengen verarbeitet oder ohne geöffneten Browser weiterlaufen kann. Eine kurze lokale Änderung muss nicht allein wegen eines Architekturtrends über eine Queue laufen. Asynchronität erhöht die Zahl der Zustände, die gespeichert, erklärt, getestet und betrieben werden müssen.
Legen Sie den Zeitpunkt der Verantwortungsübernahme fest. Wenn die Anwendung meldet, dass sie eine Anfrage angenommen hat, muss ein dauerhafter Eintrag existieren, aus dem sich die Verarbeitung wiederherstellen lässt. Speichern Sie die Eingabe oder referenzieren Sie sie sicher, noch bevor Sie dem Benutzer antworten. Bei sensiblen Dateien legen Sie Zugriff und Aufbewahrungsdauer auch für temporäre Arbeitskopien fest.
Modellieren Sie Status und idempotente Verarbeitung
Zustände können Warten, Verarbeitung, Erfolg, behebbaren Fehler, dauerhaftes Scheitern und Abbruch unterscheiden. Definieren Sie Übergänge explizit, damit zwei Worker nicht gleichzeitig dieselbe Wirkung ausführen können. Ein Eintrag enthält Aufgabentyp, Verantwortlichen, Eingabereferenz, Versuch, Zeitlimit und die Korrelation mit dem Geschäftsobjekt. Legen Sie sensible Inhalte nicht direkt im allgemeinen Log der Warteschlange ab.
Ein Worker muss mit Wiederholungen nach einem Verbindungsverlust oder Prozessabsturz rechnen. Ein stabiler Idempotenzschlüssel, die Prüfung eines bereits vorhandenen Ergebnisses und Transaktionsgrenzen verhindern doppelte Rechnungen oder wiederholten Versand. Eine große Aufgabe kann in Schritte aufgeteilt werden, doch jeder Schritt braucht einen eigenen Status und eine klare Regel für die Fortsetzung nach einem Teilerfolg.
- eindeutige Kennung und Verantwortlicher der Aufgabe
- zulässige Übergänge zwischen Zuständen
- Zeitlimit und Wiederholungsregel
- idempotente Wirkung und nachvollziehbares Ergebnis
Steuern Sie Wiederholungen, Prioritäten und Kapazität
Ein vorübergehender Netzwerkfehler kann einen erneuten Versuch mit wachsendem Abstand und zufälliger Streuung rechtfertigen. Eine ungültige Eingabe wird durch Wiederholen nicht korrigiert und sollte mit einem nachvollziehbaren Ergebnis enden. Der Anbieter kann eine Zeit vorgeben, nach der ein erneuter Versuch möglich ist. Begrenzen Sie die Anzahl der Versuche und verschieben Sie ausgeschöpfte Aufgaben zur Diagnose in einen kontrollierten Ablauf.
Eine dringende Nutzeranfrage soll nicht hinter einem umfangreichen nächtlichen Export warten. Trennen Sie Queues oder Prioritäten nach Auswirkung und legen Sie Parallelitätslimits für die Datenbank und für externe APIs fest. Backpressure verhindert, dass Arbeit schneller angenommen wird, als das System sie bewältigen kann. Die Skalierung der Worker muss Rate Limits, Speicher und die Reihenfolge der Operationen berücksichtigen.
Zeigen Sie dem Nutzer den tatsächlichen Fortschritt
Zeigen Sie nach dem Absenden an, dass die Aufgabe wartet oder verarbeitet wird, und ermöglichen Sie es, die Seite gefahrlos zu schließen. Wenn Sie keinen exakten Prozentwert berechnen können, verwenden Sie Statusschritte statt einer scheinbar präzisen Anzeige. Ein Aufgabencenter kann Erstellungszeit, Urheber, Ergebnis und einen Link zur Ausgabe anbieten. Prüfen Sie die Berechtigung für den Status wie auch für die Ergebnisdatei jedes Mal erneut.
Ein Abbruch benötigt eine definierte Semantik. Manche Arbeit lässt sich vor dem Start stoppen, andere nur markieren, damit sie nicht mit dem nächsten Schritt fortgesetzt wird. Der Benutzer muss wissen, ob bereits eine Teilwirkung eingetreten ist. Bieten Sie bei einem Fehler eine verständliche Lösung, die Möglichkeit, die Eingabe zu korrigieren, oder den Support mit einer sicheren Kennung zu kontaktieren, nicht mit einer rohen Exception.
Überwachen Sie die Warteschlange und üben Sie betriebliche Eingriffe
Überwachen Sie das Alter der ältesten wartenden Aufgabe, die Warteschlangenlänge nach Typ, die Bearbeitungszeit, Wiederholungen, Fehlschläge und ausgeschöpfte Einträge. Die reine Anzahl der Nachrichten kann natürlich schwanken; knüpfen Sie Alarme an die Auswirkung und eine wachsende Verzögerung. Eine Korrelations-ID verbindet Nutzeranfrage, Aufgabe, externen Aufruf und Ergebnis, ohne den gesamten Inhalt zu protokollieren.
Ein Betriebsverfahren erklärt, wie man einen problematischen Typ pausiert, die Kapazität ändert, einen Eintrag sicher wiederholt und eine teilweise Wirkung bewertet. Ein massenhafter Neustart ohne Kontrolle kann einen Vorfall verschlimmern. Prüfen Sie nach einer Codeänderung die Kompatibilität bereits wartender Nachrichten. Der Verantwortliche entfernt regelmäßig veraltete Typen und kontrolliert die Aufbewahrungsdauer von Eingaben und Ergebnissen.
Häufige Fragen
Muss jede langsamere Operation über eine Queue laufen?
Nein. Berücksichtigen Sie die Dauer, die Zuverlässigkeit der Abhängigkeiten, die Notwendigkeit, nach dem Schließen der Seite fortzufahren, und die Kosten eines neuen Zustands. Eine einfache, kurze Operation kann Teil der regulären Anfrage bleiben.
Warum kann ein Hintergrundjob mehrfach ausgeführt werden?
Ein Worker kann die Wirkung abschließen und die Bestätigung verlieren oder mitten in der Verarbeitung abbrechen. Die Warteschlange stellt ein Element daher oft erneut zu. Ein idempotentes Design verhindert ein doppeltes geschäftliches Ergebnis.
Lässt sich der Fertigstellungsgrad in Prozent genau anzeigen?
Nur wenn die Arbeit messbar aufgeteilt ist und Sie den verbleibenden Umfang kennen. Bei einem unvorhersehbaren externen Schritt sind klar benannte Zustände und ein Hinweis auf die Wartezeit ehrlicher als erfundene Genauigkeit.