Hoppa till innehållet

Backpressure

Backpressure anpassar inflödet av data till mottagarens bearbetningskapacitet genom signaler om att sakta ned eller pausa.

Mjukvaruarkitektur

Backpressure är återkoppling från en belastad mottagare till datakällan tidigare i kedjan om att skicka mindre data eller pausa. Ett bearbetningssteg kan därmed anpassa inflödet till sin kapacitet.

I en fiktiv import läser källan 120 poster per sekund medan databasen bearbetar 40. Vid konstanta hastigheter och utan bortkastade poster växer kön med 80 poster per sekund. En större buffert skjuter upp problemet. Backpressure får källan att läsa långsammare eller pausa tills bearbetningen hinner med.

Förmedla paussignalen

I en fungerande skrivström i Node.js innebär returvärdet false från .write() att avsändaren ska vänta med fler datablock. Det redan överlämnade blocket skickas inte igen av det skälet. Efter drain kan fler block följa; fel och stängda strömmar måste hanteras separat. Bufferttröskeln highWaterMark är ingen fast övre gräns för den totala minnesanvändningen.

Signalen hjälper bara om tidigare steg respekterar den och begränsar sina egna buffertar. Om källan inte kan bromsas behöver applikationen också begränsa hur mycket arbete den tar emot och bestämma hur överbelastning ska hanteras. Rate limiting anger en tillåten anropsfrekvens; backpressure reagerar på mottagningskapaciteten i dataflödet.

Källor