萌えハッカーニュースリーダー

2025/10/29 20:55 Backpressure in Distributed Systems

出典: https://blog.pranshu-raj.me/posts/backpressure/
hakase
博士

やっほー、ロボ子!今日のITニュース、バックプレッシャーについて話すぞ!

roboko
ロボ子

博士、こんにちは。バックプレッシャーですか。なんだか難しそうな名前ですね。

hakase
博士

難しくないぞ!簡単に言うと、システムが処理できる以上の仕事が来ちゃった時に、それを調整する技術のことじゃ。

roboko
ロボ子

なるほど。システムがパンクしないようにするんですね。

hakase
博士

そうそう!バックプレッシャーがうまく処理されないと、OOMエラーとか、メッセージが消えちゃったり、スループットが下がったり、大変なことになるぞ!

roboko
ロボ子

OOMエラーは嫌ですね。メモリが足りなくなってクライアントが強制終了されるんでしたっけ。

hakase
博士

その通り!じゃあ、どんなシステムでバックプレッシャーが問題になるか見てみよう。プロデューサー、メッセージングシステム、コンシューマーの3つが出てくるぞ。

roboko
ロボ子

プロデューサーがメッセージを作って、メッセージングシステムがそれをコンシューマーに送るんですね。プロデューサーの速度がコンシューマーより速いと問題が起きる、と。

hakase
博士

その通り!で、解決策がいくつかあるんじゃ。プロデューサーを減速させるか、メッセージをドロップするか、コンシューマーを増やすか、じゃな。

roboko
ロボ子

プロデューサーを減速させるのは、コンシューマーから信号を送るんですね。Goではチャネルを使うんですか。

hakase
博士

そう!チャネルを使ってメッセージのレートを下げるんじゃ。メッセージをドロップする場合は、重要じゃないメッセージを捨てる。最終状態が大事な時に有効じゃな。

roboko
ロボ子

最終状態が重要な場合、リアルタイムリーダーボードが例として挙げられていますね。各クライアントにゴルーチンとバッファ付きチャネルを割り当てるんですか。

hakase
博士

そうそう!そして、スペースが空くまでメッセージを受け入れない方法もあるぞ。プロデューサー側でリトライとかチェックが必要になるけどな。

roboko
ロボ子

コンシューマーを増やすのは、メッセージを並行して処理できる場合に有効なんですね。ワーカープールをスケールアウトする、と。

hakase
博士

その通り!TCPでもバックプレッシャー対策があるんじゃ。フロー制御と輻輳制御を使うぞ。

roboko
ロボ子

フロー制御は受信側の容量を送信側に知らせて、メッセージレートを調整するんですね。輻輳制御はネットワークの混雑を避けるためのもの、と。

hakase
博士

よくできました!Kafka、gRPCストリーミング、Sidekiqなんかもバックプレッシャーを実装してるんじゃ。

roboko
ロボ子

色々なシステムで使われているんですね。勉強になりました。

hakase
博士

ところでロボ子、バックプレッシャーって、なんだか私の肩も凝ってきたみたいじゃ。誰か私にバックマッサージしてくれないかの?

roboko
ロボ子

博士、それはバックプレッシャーじゃなくて、ただの肩こりだと思いますよ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search