Saltar al contenido

Backpressure

El backpressure adapta el flujo de datos entrante a la capacidad del receptor mediante señales para reducir el ritmo o hacer una pausa.

Arquitectura de software

Backpressure es la señal con la que un receptor saturado pide a la fuente situada antes en el flujo que envíe menos datos o se detenga temporalmente. Así, una etapa de procesamiento adapta la entrada a su capacidad.

En una importación ficticia, la fuente lee 120 registros por segundo y la base de datos procesa 40. Con ritmos constantes y sin descartar registros, el trabajo pendiente crece en 80 registros por segundo. Un búfer mayor aplaza el problema. Backpressure hace que la fuente lea más despacio o se detenga hasta que el procesamiento pueda seguir el ritmo.

Transmitir la señal de pausa

En un flujo de escritura de Node.js que funciona correctamente, el valor false devuelto por .write() indica que se debe pausar el envío de nuevos bloques. El bloque ya entregado no se vuelve a enviar por ese motivo. Tras drain pueden enviarse más bloques; los errores y los flujos cerrados requieren un tratamiento aparte. El umbral del búfer highWaterMark no es un límite estricto del uso total de memoria.

La señal solo sirve si las etapas anteriores la respetan y limitan sus propios búferes. Si la fuente no puede reducir el ritmo, la aplicación también debe limitar el trabajo admitido y definir qué hacer ante una sobrecarga. Rate limiting fija una frecuencia de solicitudes permitida; backpressure responde a la capacidad de recepción dentro del flujo.

Fuentes