FIG-022

メッセージキュー — 行列が速さの違いを吸収する

分散システム 2026.06.15 公開 読了 約10分

人気のチケット売り場を想像してください。お客さんは次々にやってきますが、窓口の係員が処理できる速さには限りがあります。もしお客さんと係員を直接つないでしまうと、混雑した瞬間に係員はパンクし、お客さんは「いま忙しいので無理です」と追い返されてしまいます。

そこで間に行列(キュー)を置きます。お客さんはとりあえず並ぶだけ。係員は自分のペースで先頭から1人ずつさばく。これがメッセージキューの発想です。下の図1で「発行」を連打して、行列がどうバッファ(緩衝材)として働くかを見てください。発行する側と処理する側が、互いの速さを気にしなくてよくなります。

QUEUE — 発行者はためるだけ / 処理係は自分のペースで先頭から取り出す
📨
発行者Producer
↑ 次に処理 あとから来た →
🧑‍🍳
処理係Consumer
待機中
発行した数 0
待ち行列 0
処理した数 0
処理係の速さ 1.4秒に1件
← 速い遅い →
図1 — メッセージキュー:発行者と処理係を行列が切り離す

キューが「速さの違い」を吸収する

連打して発行が処理を上回ると、行列はどんどん伸びます。でも発行者は一度も待たされません。逆に処理係は、行列が長かろうが空だろうが、いつも同じペースで先頭から取り出すだけ。二人は直接つながっておらず、行列を通してしかやりとりしない — これを疎結合(そけつごう)と呼びます。片方が忙しくても、もう片方は影響を受けません。

この仕組みのうれしさは3つ。急な負荷の波を吸収できる(バッファ)、処理係が一時的に落ちても行列にメッセージが残る(信頼性)、処理係を増やせば行列を速く減らせる(スケール)。注文を受ける処理と、重い後続処理(メール送信・画像変換など)を切り離すために、実システムで広く使われています。

用語ミニ辞書
プロデューサー
メッセージを発行して行列に入れる側。相手の処理を待たずに次へ進める。
コンシューマー
行列の先頭から取り出して処理する側。自分のペースで進められる。
バックプレッシャー
行列が溢れそうなとき発行側に「少し待って」と伝える流量調整の仕組み。

まとめ

メッセージキューは、発行する人と処理する人の間に行列を1本はさむだけの素朴な仕組みです。それだけで、速さの違いを吸収し、障害に強くなり、後から処理能力を足せるようになります。「直接呼ぶ」のをやめて「いったん並べる」に変えるだけで、システムはぐっとしなやかになる — それがキューの効きどころです。