【バックプレッシャー】
バックプレッシャー とは?
💡 「もうムリ!」と下流が上流にブレーキをかける交通渋滞の信号
📌 このページのポイント
- 消費者が処理しきれないデータを生産者に「遅くして」と伝える仕組み
- バッファが溢れてデータが失われたりクラッシュするのを防ぐ
- Reactive Streams仕様で標準化され、RxJava・Project Reactorなどで実装されている
- ドロップ・バッファリング・スロットリングなど複数の対処戦略がある
バックプレッシャーって何のことなの?
データを送る側(生産者)と受け取る側(消費者)の速度差を調整する仕組みだよ。消費者が「処理が追いつかないから少し待って!」と生産者に伝えるイメージだね。
速度が合わないとどうなるの?
消費者のバッファが溢れてデータが捨てられたり、最悪システムがクラッシュしたりするんだ。バックプレッシャーがないシステムは水道の蛇口を全開にしてコップで受けようとするようなものだよ。
どうやって「待って!」って伝えるの?
Reactive Streamsという仕様では、消費者が「次はN件処理できる」とリクエスト数を明示して生産者に伝えるんだよ。生産者はそれ以上送らないように制御するんだ。
追いつかないときの対処法は他にもあるの?
いくつか戦略があるよ。一時的にメモリにためるバッファリング、データを間引くドロップ、そして最も安全な生産者を遅くするスロットリングがあるんだ。状況に応じて選ぶことが大切だよ。
どんな場面で使われるの?
まとめ:ざっくりこれだけ覚えればOK!
「バックプレッシャー」って出てきたら「処理が追いつかないときに上流を抑制する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Back Pressure」 = 背圧・逆圧
💬 流体力学の用語で、パイプの下流から上流へかかる圧力のことを指すんだよ。データ処理でも同じように「下流が詰まったら上流を押し返す」イメージで使われているんだ