Inicio / Blog / Backpressure
Sistemas distribuidos

Backpressure en los sistemas cotidianos

Cuando una API, un productor webhook o una interfaz genera trabajo más rápido de lo que un servicio puede terminarlo, una cola absorbe el pico pero no elimina la falta de capacidad. Sin una señal de retorno, el backlog crece hasta agotar latencia, memoria, almacenamiento o paciencia. Backpressure hace visible y acotado ese desequilibrio.

Lee la profundidad junto a llegadas y procesamiento

Comportamiento ilustrativo; importa la diferencia entre llegadas y finalizaciones
EstableLlegadas por debajo de la capacidad; la cola vuelve a su nivel normal.
SaturadoLlegadas superiores al servicio; aumentan volumen y antigüedad.
RecuperaciónMenos admisión y capacidad libre vacían el backlog.

La profundidad por sí sola es ambigua. Combínala con ritmos de entrada y finalización, antigüedad del mensaje más viejo, reintentos y saturación de consumidores. Una cola larga puede ser normal en lotes; un mensaje antiguo en una operación interactiva puede ser un incidente. Estima el tiempo de vaciado con capacidad sobrante y nuevas llegadas, no como si la cola estuviera detenida.

Acota cada buffer

FronteraMecanismoCompensación
Entrada HTTPLímite de tasa, concurrencia y 429/503 con indicación de reintentoProtege el servicio; exige reintentos responsables del cliente
Entrega del brokerLímite de prefetch/lote y acknowledgements explícitosAcota mensajes en vuelo; muy bajo reduce rendimiento
WorkersConcurrencia y tamaño de cola limitadosMemoria predecible; el exceso espera o se rechaza
Base de datosPool de conexiones, bulkhead y control de admisiónEvita colapsos, pero puede aumentar latencia aguas arriba
NavegadorDebounce, cancelar solicitudes obsoletas y limitar paralelismoReduce demanda repetida; puede retrasar actualizaciones

Una cola ilimitada en memoria no es resiliencia: convierte la sobrecarga en consumo creciente y un fallo posterior. Define límites de cola y payload, expiración y qué hacer con el exceso: rechazar, combinar, persistir o descartar. Las sugerencias de escritura pueden eliminarse; una conciliación financiera, no.

Usa feedback, no solo más workers

Añadir consumidores ayuda si la dependencia también tiene capacidad. Si la base de datos o la API asociada ya está saturada, más workers aumentan la contención y los reintentos. Limita concurrencia en la frontera, utiliza backoff exponencial con jitter y respeta las indicaciones del proveedor. Un circuit breaker necesita una prueba de reapertura y una política segura para vaciar la cola.

En flujos ordenados, particiona por una clave estable para que un mensaje defectuoso no bloquee particiones ajenas. Con entrega al menos una vez, confirma después del éxito durable y haz idempotentes los efectos. Ajusta visibility timeout o acknowledgement al tiempo normal de proceso y prevé extensión controlada para trabajos largos.

Explica a los clientes qué puede aceptar el sistema

Backpressure forma parte del contrato de API. Devuelve un estado claro de sobrecarga, Retry-After cuando convenga e identificador de correlación. Para aceptación asíncrona, confirma solo después de guardar el trabajo de forma durable y ofrece consulta de estado o callback. No anuncies aceptación si la tarea solo existe en memoria volátil.

Señales operativas útiles

Representa a la vez entradas y finalizaciones, percentiles de antigüedad, mensajes en vuelo, reintentos, volumen DLQ, uso de consumidores y saturación de dependencias. Alerta por crecimiento sostenido y tiempo de vaciado, no por un umbral fijo desconectado del tráfico. Durante la recuperación, comunica si la cola está drenando y evita tormentas sincronizadas de reintentos.

Relacionado: arquitectura con colas y límites de API como arquitectura de producto.

En resumen

Backpressure es una política de capacidad expresada con buffers acotados, concurrencia controlada y respuestas explícitas ante sobrecarga. Mide cuánto trabajo llega y termina, protege la dependencia más lenta y decide qué aplazar o rechazar antes de que lo decida el sistema.

Referencias