advanced
Backpressure
Учитывайте разницу скорости producer/consumer через stream return values, pipeline, queues, limits и memory-aware flow control.
Backpressure — сигнал, что downstream не успевает; producer должен замедлиться, иначе неограниченный буфер съест память.
В streams `writable.write(chunk)` возвращает `false`, когда буфер полон — пауза чтения до `'drain'`:
function pump(readable, writable) {
readable.on('data', (chunk) => {
const ok = writable.write(chunk);
if (!ok) readable.pause();
});
writable.on('drain', () => readable.resume());
}
`pipeline()` координирует это автоматически. Шире: ограниченные очереди задач, HTTP 429, pause у Kafka consumer, лимиты батча в БД.
На интервью: определение backpressure; ручная обработка vs pipeline; рост памяти при медленных клиентах.
Типовые ошибки: неограниченный массив чанков; игнор `highWaterMark`; нет таймаута на медленного consumer.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- pipeline для цепочек streams.
- Ограниченные очереди с drop/reject.
- Мониторинг глубины буфера и lag.
- Лимиты на gateway и в приложении.