❤️

キュー(Queue)初心者

2025/01/15に公開

状況

  • 読んでいた学術書に「Redis」と「Apache Kafka」なるものが出てきて、「どちらもメッセージキューとしても使われる」との説明があったが理解できず
  • そもそもよく聞くけど理解していない「キュー(Queue)」についてまず調べてみようと思い記載

内容

キュー(Queue)とは

  • データを順番に管理するための構造または仕組みのこと
  • 具体的には、「先入れ先出し(FIFO: First In, First Out)」の原則に基づいて動作する
    最初に追加されたデータが最初に取り出される形
  • プログラミングやシステム設計で頻繁に使われる概念
    • 例えばタスク管理、バックグラウンド処理、データ転送などで活用

日常の具体例:レジの行列
「キュー」は、データやタスクを「順番通りに処理する仕組み」のことを指す
日常の具体例として、スーパーのレジの行列を考えてみる

  1. お客さん(タスク)が、レジ(処理者)に並ぶ
  2. 最初に並んだお客さんが、順番にレジで会計を済ませる(先入れ先出し: FIFO)
  3. 後から来たお客さんは、先に並んだ人が処理されるまで待つ必要がある

特徴

  • 順番通りに処理される(公平性)
  • お客さんがレジにたどり着くまで、順番待ちが必要

ITで使用される例

  • プリントジョブの管理(最初に送ったプリント命令が最初に処理される)
  • ゲームサーバでのログイン待機列

次にメッセージキューについて調べてみました。

メッセージキューとは

  • アプリケーション間で非同期的にメッセージ(データ)をやり取りするための仕組み
  • メッセージは、通常、キューという構造で管理され、送信者(プロデューサー)がメッセージをキューに追加し、受信者(コンシューマー)がそのメッセージを取り出して処理する

日常の具体例:宅配便の集荷・配達
「メッセージキュー」は、異なるシステム間で非同期的にデータ(メッセージ)をやり取りする仕組み
日常の具体例として、宅配便の集荷と配達の流れを考えてみる

  1. 荷物の集荷(プロデューサー)
    • 各家庭や店舗が荷物(データやタスク)を宅配便会社(メッセージキュー)に預ける
    • 宅配便会社は、荷物を中央倉庫(キュー)に集める
  2. 倉庫での保管(キュー)
    • 預けられた荷物が倉庫に並べられ、配送順に保管される
  3. 配送(コンシューマー)
    • 配達員が順番に荷物を受け取り、配送先に届ける
    • 受取人が不在でも、荷物は倉庫で保管されて後で再配達可能

特徴

  • 非同期性:送り手(荷物を出す人)と受け手(荷物を受け取る人)が同時に活動する必要がない
  • タスクの確実性:配達が失敗しても再試行できる
  • 柔軟性:複数の受け手がいても並列に処理できる

ITの例

  • メール送信キュー(大量のメールを順番に送信)
  • オンラインショッピングでの注文データの処理(支払い情報→在庫管理→配送準備)

キューとメッセージキューの比較

キュー(レジの行列)

  • 特徴: データやタスクを順番通りに処理
  • 日常例: レジでの順番待ち
  • 制限: 処理する側と待つ側が、同じ空間(システム内)で同時に動作している必要がある

メッセージキュー(宅配便)

  • 特徴: システム間でタスクやデータを非同期的にやり取り
  • 日常例: 宅配便で荷物を預けて順次配送
  • 利点: 配送者と受取人が同時に動作していなくても問題なし

まとめ

  • キューは単純に「順番待ちの仕組み」(例: レジの行列)を提供すること
  • メッセージキューは、異なるシステムやプロセス間で「タスクやメッセージを非同期的にやり取りする仕組み」(例: 宅配便の流れ)を実現すること
  • 使う場面に応じて、単純なキューか、高度なメッセージキューを選択するのがポイント
  • キュートな名前に反して超重要な仕組みだとわかった。

Discussion