Gå til indholdet

Backpressure

Backpressure tilpasser datastrømmen til modtagerens behandlingskapacitet gennem signaler om at sænke tempoet eller holde pause.

Softwarearkitektur

Backpressure er den tilbagemelding, en belastet modtager sender til datakilden tidligere i kæden om at levere færre data eller holde pause. Et behandlingstrin kan dermed tilpasse tilførslen til sin kapacitet.

I en fiktiv import læser kilden 120 poster i sekundet, mens databasen behandler 40. Ved konstante hastigheder og uden kasserede poster vokser køen med 80 poster i sekundet. En større buffer udskyder problemet. Backpressure får kilden til at læse langsommere eller holde pause, indtil behandlingen kan følge med.

Send pausesignalet videre

I en fungerende Node.js-skrivestrøm betyder returværdien false fra .write(), at der skal holdes pause før flere datablokke. Den allerede afleverede blok sendes ikke igen af den grund. Efter drain kan flere blokke følge; fejl og lukkede strømme skal håndteres særskilt. Bufferens tærskel highWaterMark er ikke en fast øvre grænse for det samlede hukommelsesforbrug.

Signalet hjælper kun, hvis de tidligere trin respekterer det og begrænser deres egne buffere. Kan kilden ikke sænke tempoet, må applikationen også begrænse, hvor meget arbejde den tager imod, og fastlægge håndteringen af overbelastning. Rate limiting fastsætter en tilladt forespørgselsrate; backpressure reagerer på modtagekapaciteten i datastrømmen.

Kilder