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 и в приложении.