Backpressure (englisch für Gegendruck) ist ein Mechanismus der Flusskontrolle: Ein langsamer Consumer signalisiert einem schnellen Producer, langsamer zu produzieren. Ohne diesen Gegendruck füllen sich unbegrenzte Warteschlangen, der Speicher wächst und das System kann zusammenbrechen (Out-of-Memory).
Funktionsweise
Backpressure gibt es auf mehreren Ebenen. Im TCP-Protokoll steuert ein Sliding Window, wie viele Daten der Empfänger noch aufnehmen kann — der Sender wartet, bis der Empfänger wieder Fensterplatz meldet. In der asynchronen Programmierung setzen die Reactive-Streams-Spezifikation (Publisher/Subscriber) auf Demand Signaling: Der Subscriber fordert über request(n) explizit eine bestimmte Anzahl von Elementen an, der Publisher liefert nicht mehr. Bekannte Umsetzungen sind Project Reactor, RxJava und Akka Streams.
Strategien im Überblick
- Blockieren: Der Producer wartet, bis der Consumer bereit ist (einfach, aber blockiert Ressourcen).
- Verwerfen (Dropping): Bei Überlast werden Elemente verworfen, etwa die ältesten oder neuesten, oder eine Stichprobe.
- Begrenzte Warteschlange: Eine Bounded Queue puffert eine begrenzte Menge; ist sie voll, greift eine definierte Überlast-Strategie.
- Pull-basiert: Der Consumer holt Daten aktiv in seinem eigenen Tempo (bevorzugt, wenn die Verarbeitungskapazität schwankt).
In Stream-Processing-Systemen wie Kafka oder Flink ist Backpressure ein zentrales Konzept, damit eine langsame Verarbeitungsstufe nicht zum Engpass für das ganze System wird. Abzugrenzen ist Backpressure vom Rate Limiting (begrenzt eingehende Anfragen zum Schutz des Dienstes) und vom Circuit Breaker (schaltet bei Fehlern ab, statt den Fluss zu drosseln).
Verwandte Grundlagen: Circuit Breaker, Retry-Logik, Message Broker, Event Sourcing, Mikroservice, Verteilte Systeme, Resilienz.