フロー制御
高速な送信側が、低速な受信側を圧倒しないようにする仕組み。ネットワーク層(TCP)、アプリケーション層(HTTP/2のストリーム)、データ基盤(Reactive Streams、Kafka)のいずれにもある。
TCPはスライディングウィンドウを使い、受信側がACKで空きバッファの量を通知する。HTTP/2ではストリーム単位と接続単位の両方でフロー制御を行う。Reactive Streams仕様(Java 9のFlow API、RxJava、Reactor)はrequest(n)というプロトコルを定め、消費側が速度を決める。バックプレッシャーは同じ考え方を消費側から見た呼び方だ。フロー制御がないと、負荷時にメモリ不足でのクラッシュやイベントの取りこぼしを招く。