メッセージキュー

luagate/message-queue-introメッセージキュー入門21クラウド・インフラ

上から下へ、全 21 枚そのまま並べています。

発表モードで開く

メッセージキュー入門

メッセージキュー

処理を後回しにする 〜頼みごとを並べて捌く〜

1
1

目次

今日の流れ

1. メッセージキューとは

2. 同期と非同期の違い

3. プロデューサーとコンシューマー

4. メリットと運用の注意

5. まとめと振り返り

2
2
メッセージキュー入門 - イントロ

今日のゴール

この時間で身につけてほしいことです。

  • メッセージキューが「処理を後回しにする」しくみだと分かる
  • 同期処理と非同期処理の違いを説明できる
  • プロデューサーとコンシューマーの役割が分かる
  • 間にキューを挟む理由を説明できる
  • 障害に強くスケールしやすい理由が分かる
10
3
メッセージキュー入門 - イントロ

メッセージキュー とは

頼みごとを一度ためておき、受け取った側があとで順に処理するしくみです。

メッセージキュー(Message Queue)

処理してほしい内容をメッセージとして一時的にためておく待ち行列。送る側と処理する側の間に挟むことで、相手の都合に合わせて後からまとめて捌ける。

処理依頼をメッセージとしてためる

送る側はためたらすぐ次へ進める

処理する側は自分のペースで取り出す

注文を受けてあとで調理するのに似ている

11
4
メッセージキュー入門 - イントロ

キュー = 注文の待ち行列

レストランの注文票のように、依頼を並べて順に捌くイメージです。

依頼を預ける
  • やってほしいことを投函
  • 返事を待たず次へ
順番に並ぶ
  • 来た順にためる
  • あふれず受け止める
後で処理
  • 処理係が取り出す
  • 空いた時に捌く
12
5

メッセージキュー入門 - 同期と非同期

2

第2部 同期と非同期

待つか、後回しにするか

20
6
メッセージキュー入門 - 同期と非同期

同期処理 と 非同期処理

結果を待ってから進むか、依頼だけして先に進むかの違いです。

同期処理 / 非同期処理

同期処理は依頼した結果が返るまで待って次に進む方式。非同期処理は依頼だけして待たずに先へ進み、処理は別で進める方式。キューは非同期を支える道具。

同期は結果が出るまで待つ

非同期は待たずに先へ進める

非同期は依頼を預けて後で処理する

重い処理を後回しにできる

21
7
メッセージキュー入門 - 同期と非同期

同期だけ と キューで非同期

重い処理をその場で待つか、キューに預けて先に進むかで体験が変わります。

同期だけの場合

  • 重い処理を最後まで待つ
  • 利用者が待たされる
  • 一気に来ると詰まる
  • 1つ失敗すると全体が止まる

キューで非同期にすると

  • 依頼を預けてすぐ応答する
  • 利用者は待たされない
  • 混雑をキューが吸収する
  • 失敗しても後でやり直せる
22
8
メッセージキュー入門 - 同期と非同期

非同期処理の流れ

依頼を受け付けたらすぐ返事をし、実際の処理は後ろで進めます。

1. 依頼を受け付け

内容をメッセージにしてキューへ

2. すぐ応答

受け付けましたと先に返す

3. 後ろで処理

処理係がキューから取り出す

4. 完了を反映

終わったら結果を記録・通知

23
9

メッセージキュー入門 - 登場人物

3

第3部 登場人物

プロデューサーとコンシューマー

30
10
メッセージキュー入門 - 登場人物

キューを挟んだ構成

送る側と処理する側の間にキューを置くと、互いの都合に縛られず動けます。

  • プロデューサーがメッセージを送る
  • キューがメッセージをためておく
  • コンシューマーが取り出して処理する
  • 送る側と処理する側は直接つながらない
  • 片方が忙しくても、もう片方は待たない
31
11
メッセージキュー入門 - 登場人物

プロデューサー と コンシューマー

キューを挟む2つの役割を整理します。役割が分かれているのがポイントです。

役割
主な仕事

プロデューサー

メッセージを送る側

依頼をキューへ投入する

キュー

間にある待ち行列

メッセージをためて渡す

コンシューマー

メッセージを処理する側

取り出して実行する

32
12
メッセージキュー入門 - 登場人物

なぜ間にキューを挟むのか

直接つなぐ代わりにキューを挟むと、負荷の波をならし、結びつきもゆるめられます。

負荷の平準化
  • 急な集中を吸収する
  • あふれず順に捌く
疎結合にする
  • 互いを直接知らなくてよい
  • 片方の変更に強い
ペースを分離
  • 送る速さと処理の速さを分ける
  • それぞれ最適化できる
33
13

メッセージキュー入門 - メリット

4

第4部 メリットと注意

強さと、気をつけること

40
14
メッセージキュー入門 - メリット

メッセージキューのメリット

後回しにできることで、システムは強く、伸ばしやすくなります。

障害に強い
  • 処理係が落ちても依頼は残る
  • 復旧後にやり直せる
スケールしやすい
  • 処理係を増やせば速く捌ける
  • 混雑時に台数を足せる
待たせない
  • 受け付けてすぐ応答
  • 体感が軽くなる
41
15
メッセージキュー入門 - メリット

順序と再試行

後回しにするからこそ、順番と「失敗したらどうするか」を意識します。

順序保証 / 再試行

メッセージを送った順に処理したい場合は順序の扱いに注意が必要。処理に失敗したメッセージは、あとでもう一度試す(再試行)しくみで取りこぼしを防ぐ。

並列処理だと順番が前後しうる

順序が重要なら設計で工夫する

失敗したら時間をおいて再試行

同じ処理を2回しても平気な作りが安心

42
16
メッセージキュー入門 - メリット

処理係の数と捌ける量(イメージ)

コンシューマーを増やすほど、ためた依頼を速く捌けます。あくまでイメージです。

680 1分あたりの処理件数5444082721360
1001分あたりの処理件数
1901分あたりの処理件数
3601分あたりの処理件数
6801分あたりの処理件数
処理係1台
処理係2台
処理係4台
処理係8台

出典: 処理係を増やした効果の概念図(概算)

43
17
メッセージキュー入門 - まとめ
クイズ

振り返りクイズ

今日の内容を確認しましょう。

送る側と処理する側の間にメッセージキューを挟む主な狙いはどれ?

A
通信を暗号化するため
B
負荷を平準化し疎結合にするため
C
データを完全に消すため
D
CPUを高速化するため
50
18
メッセージキュー入門 - まとめ
答え

振り返りクイズ 解答

送る側と処理する側の間にメッセージキューを挟む主な狙いはどれ?

A
通信を暗号化するため
B
負荷を平準化し疎結合にするため
C
データを完全に消すため
D
CPUを高速化するため

キューを挟むと急な集中を吸収して負荷を平準化でき、送る側と処理する側が直接結びつかない疎結合になります。暗号化やCPU高速化とは別の役割です。

51
19
メッセージキュー入門 - まとめ

質疑・次回予告

今日のまとめと、次に学ぶテーマです。質問があればここで受け付けます。

今日のおさらい
  • キューは依頼をためて後回しにする
  • 非同期で待たせず混雑も吸収
  • 障害に強くスケールしやすい
次回予告
  • ログとモニタリング 〜健康診断〜
  • システムの状態を見守るしくみ
52
20
"

メッセージキューは「処理を後回しにする」工夫。依頼をいったん預けることで、待たせず・混雑に負けず・障害にも強いシステムをつくれます。

メッセージキュー入門

53
21