メッセージキュー — 行列が速さの違いを吸収する
人気のチケット売り場を想像してください。お客さんは次々にやってきますが、窓口の係員が処理できる速さには限りがあります。もしお客さんと係員を直接つないでしまうと、混雑した瞬間に係員はパンクし、お客さんは「いま忙しいので無理です」と追い返されてしまいます。
そこで間に行列(キュー)を置きます。お客さんはとりあえず並ぶだけ。係員は自分のペースで先頭から1人ずつさばく。これがメッセージキューの発想です。下の図1で「発行」を連打して、行列がどうバッファ(緩衝材)として働くかを見てください。発行する側と処理する側が、互いの速さを気にしなくてよくなります。
QUEUE — 発行者はためるだけ / 処理係は自分のペースで先頭から取り出す
📨
発行者Producer
↑ 次に処理 あとから来た →
🧑🍳
処理係Consumer
待機中
発行した数 0
待ち行列 0
処理した数 0
図1 — メッセージキュー:発行者と処理係を行列が切り離す
キューが「速さの違い」を吸収する
連打して発行が処理を上回ると、行列はどんどん伸びます。でも発行者は一度も待たされません。逆に処理係は、行列が長かろうが空だろうが、いつも同じペースで先頭から取り出すだけ。二人は直接つながっておらず、行列を通してしかやりとりしない — これを疎結合(そけつごう)と呼びます。片方が忙しくても、もう片方は影響を受けません。
この仕組みのうれしさは3つ。急な負荷の波を吸収できる(バッファ)、処理係が一時的に落ちても行列にメッセージが残る(信頼性)、処理係を増やせば行列を速く減らせる(スケール)。注文を受ける処理と、重い後続処理(メール送信・画像変換など)を切り離すために、実システムで広く使われています。
用語ミニ辞書
- プロデューサー
- メッセージを発行して行列に入れる側。相手の処理を待たずに次へ進める。
- コンシューマー
- 行列の先頭から取り出して処理する側。自分のペースで進められる。
- バックプレッシャー
- 行列が溢れそうなとき発行側に「少し待って」と伝える流量調整の仕組み。
まとめ
メッセージキューは、発行する人と処理する人の間に行列を1本はさむだけの素朴な仕組みです。それだけで、速さの違いを吸収し、障害に強くなり、後から処理能力を足せるようになります。「直接呼ぶ」のをやめて「いったん並べる」に変えるだけで、システムはぐっとしなやかになる — それがキューの効きどころです。