Zum Inhalt springen

Backpressure

Backpressure passt den Datenzufluss an die Verarbeitungskapazität des Empfängers an, indem dieser eine Verlangsamung oder Pause signalisiert.

Softwarearchitektur

Backpressure ist die Rückmeldung eines ausgelasteten Empfängers an die vorgelagerte Datenquelle, weniger oder vorübergehend keine weiteren Daten zu liefern. So kann ein Verarbeitungsschritt den Zufluss an seine Kapazität anpassen.

In einem fiktiven Import liest die Quelle 120 Datensätze pro Sekunde, während die Datenbank 40 verarbeitet. Bei gleichbleibenden Raten und ohne verworfene Datensätze wächst der Rückstand um 80 Datensätze pro Sekunde. Ein größerer Puffer verschiebt das Problem. Backpressure lässt die Quelle langsamer lesen oder pausieren, bis die Verarbeitung wieder nachkommt.

Ein Pausensignal weitergeben

Bei einem funktionsfähigen Node.js-Schreibstream signalisiert der Rückgabewert false von .write() eine Pause vor weiteren Datenblöcken. Der bereits übergebene Block wird deshalb nicht nochmals gesendet. Nach drain können weitere Blöcke folgen; Fehler und geschlossene Streams brauchen eigene Behandlung. Der Puffer-Schwellenwert highWaterMark ist dabei keine feste Obergrenze für den gesamten Speicherverbrauch.

Das Signal hilft nur, wenn die vorgelagerten Schritte es beachten und ihre eigenen Puffer begrenzen. Lässt sich die Quelle nicht bremsen, braucht die Anwendung zusätzlich eine begrenzte Aufnahme und einen festgelegten Umgang mit Überlast. Rate Limiting legt eine zulässige Anfragerate fest; Backpressure reagiert auf die Aufnahmefähigkeit im Datenfluss.

Quellen