Uma Nota Tranquila sobre Backpressure
Quando um produtor rápido encontra um consumidor lento, algo precisa ceder. A pergunta é o quê — e backpressure é como um sistema bem-comportado responde.
Três opções honestas
- Bufferizar — absorver o pico, até a memória dizer não.
- Descartar — descartar carga de propósito, e admitir isso nas métricas.
- Desacelerar — empurrar de volta no produtor para que ele alivie.
Cada uma é um trade-off. O erro é fingir que você não fez nenhum.
async function* throttle<T>(src: AsyncIterable<T>, max: number) {
let inFlight = 0
for await (const item of src) {
while (inFlight >= max) await tick()
inFlight++
yield item
}
}
Os sistemas em que mais confio são os que são honestos sobre seus limites.
