❤️
キュー(Queue)初心者
状況
- 読んでいた学術書に「Redis」と「Apache Kafka」なるものが出てきて、「どちらもメッセージキューとしても使われる」との説明があったが理解できず
- そもそもよく聞くけど理解していない「キュー(Queue)」についてまず調べてみようと思い記載
内容
キュー(Queue)とは
- データを順番に管理するための構造または仕組みのこと
- 具体的には、「先入れ先出し(FIFO: First In, First Out)」の原則に基づいて動作する
最初に追加されたデータが最初に取り出される形 - プログラミングやシステム設計で頻繁に使われる概念
- 例えばタスク管理、バックグラウンド処理、データ転送などで活用
日常の具体例:レジの行列
「キュー」は、データやタスクを「順番通りに処理する仕組み」のことを指す
日常の具体例として、スーパーのレジの行列を考えてみる
- お客さん(タスク)が、レジ(処理者)に並ぶ
- 最初に並んだお客さんが、順番にレジで会計を済ませる(先入れ先出し: FIFO)
- 後から来たお客さんは、先に並んだ人が処理されるまで待つ必要がある
特徴
- 順番通りに処理される(公平性)
- お客さんがレジにたどり着くまで、順番待ちが必要
ITで使用される例
- プリントジョブの管理(最初に送ったプリント命令が最初に処理される)
- ゲームサーバでのログイン待機列
次にメッセージキューについて調べてみました。
メッセージキューとは
- アプリケーション間で非同期的にメッセージ(データ)をやり取りするための仕組み
- メッセージは、通常、キューという構造で管理され、送信者(プロデューサー)がメッセージをキューに追加し、受信者(コンシューマー)がそのメッセージを取り出して処理する
日常の具体例:宅配便の集荷・配達
「メッセージキュー」は、異なるシステム間で非同期的にデータ(メッセージ)をやり取りする仕組み
日常の具体例として、宅配便の集荷と配達の流れを考えてみる
-
荷物の集荷(プロデューサー)
- 各家庭や店舗が荷物(データやタスク)を宅配便会社(メッセージキュー)に預ける
- 宅配便会社は、荷物を中央倉庫(キュー)に集める
-
倉庫での保管(キュー)
- 預けられた荷物が倉庫に並べられ、配送順に保管される
-
配送(コンシューマー)
- 配達員が順番に荷物を受け取り、配送先に届ける
- 受取人が不在でも、荷物は倉庫で保管されて後で再配達可能
特徴
- 非同期性:送り手(荷物を出す人)と受け手(荷物を受け取る人)が同時に活動する必要がない
- タスクの確実性:配達が失敗しても再試行できる
- 柔軟性:複数の受け手がいても並列に処理できる
ITの例
- メール送信キュー(大量のメールを順番に送信)
- オンラインショッピングでの注文データの処理(支払い情報→在庫管理→配送準備)
キューとメッセージキューの比較
キュー(レジの行列)
- 特徴: データやタスクを順番通りに処理
- 日常例: レジでの順番待ち
- 制限: 処理する側と待つ側が、同じ空間(システム内)で同時に動作している必要がある
メッセージキュー(宅配便)
- 特徴: システム間でタスクやデータを非同期的にやり取り
- 日常例: 宅配便で荷物を預けて順次配送
- 利点: 配送者と受取人が同時に動作していなくても問題なし
まとめ
- キューは単純に「順番待ちの仕組み」(例: レジの行列)を提供すること
- メッセージキューは、異なるシステムやプロセス間で「タスクやメッセージを非同期的にやり取りする仕組み」(例: 宅配便の流れ)を実現すること
- 使う場面に応じて、単純なキューか、高度なメッセージキューを選択するのがポイント
- キュートな名前に反して超重要な仕組みだとわかった。
Discussion