Vai al contenuto

Backpressure

La backpressure adatta il flusso di dati in ingresso alla capacità del destinatario attraverso segnali di rallentamento o pausa.

Architettura software

La backpressure è il segnale con cui un destinatario saturo chiede alla sorgente a monte di inviare meno dati o di fermarsi temporaneamente. Una fase di elaborazione può così adeguare il flusso in ingresso alla propria capacità.

In un’importazione fittizia, la sorgente legge 120 record al secondo mentre il database ne elabora 40. A ritmi costanti e senza scartare record, il lavoro arretrato cresce di 80 record al secondo. Un buffer più grande rimanda il problema. La backpressure rallenta o sospende la lettura alla sorgente finché l’elaborazione riesce a tenere il passo.

Trasmettere il segnale di pausa

In uno stream di scrittura Node.js funzionante, il valore false restituito da .write() indica di attendere prima di inviare altri blocchi. Il blocco già passato non viene inviato nuovamente per questo motivo. Dopo drain si possono inviare altri blocchi; errori e stream chiusi richiedono una gestione separata. La soglia del buffer highWaterMark non è un limite rigido alla memoria totale utilizzata.

Il segnale è utile solo se le fasi a monte lo rispettano e limitano i propri buffer. Se la sorgente non può rallentare, l’applicazione deve anche limitare il lavoro accettato e definire come reagire al sovraccarico. Il rate limiting stabilisce una frequenza di richieste consentita; la backpressure reagisce alla capacità di ricezione nel flusso.

Fonti