キュー

キューは、処理の依頼を一列に並べて、順番に受け渡す仕組みです。

キュー のアイキャッチ図解
まずは、こう考えるとつかみやすいです。

キューは、チケット売り場の行列に似ています。来た順に並び、窓口が空いたら先頭から処理が始まります。

ひとことで言うと

キューは、処理の依頼を一列に並べて、サーバーが空いたタイミングで順番にこなしていく仕組みです。

依頼が来た瞬間にすべて処理するのではなく、いったん列に積んで、処理側が順に取り出す形をとります。 メール一括送信・画像変換・外部APIへの通知など、「すぐ終わらなくてよい処理」に向いています。

たとえ話でもう少し詳しく

キューは、チケット売り場の行列に近いです。

  • お客さんは来た順に並ぶ
  • 窓口は先頭から1人ずつ対応する
  • 窓口が混んでいても、列に並んでいれば必ずいつか順番が来る

システムでも同じです。 ユーザーが「注文確定」ボタンを押したとき、確認メール送信や在庫更新を画面の表示に間に合わせる必要はありません。 依頼をキューに積んでおき、裏側のサーバーが空いたときに順番に処理すれば、画面はすぐに返答でき、重い処理も確実にこなせます。

よく出る場面・使いどころ

  • 注文後の確認メールを大量に送りたいとき
  • 画像や動画のアップロード後にサムネイルを生成したいとき
  • 外部APIへの通知を失敗しても再送できる形にしたいとき
  • 処理の波を平準化して、サーバーへの瞬間的な負荷を抑えたいとき

似た言葉との違い

  • cron
    • 決まった時刻に定期実行する仕組み
    • キューは、依頼が来たタイミングで積まれ、空き次第処理される
  • サーバーレス
    • 処理単位でサーバーを起動する実行形態
    • キューと組み合わせて、イベントをトリガーに関数を動かす構成もよく使われる
  • webhook
    • 出来事が起きたとき、相手のURLへ直接知らせる仕組み
    • キューは一度列に積んでから処理するため、通信失敗時の再試行がしやすい

実務で気にするポイント

  • 処理の順序保証が必要かどうかを確認する
  • 失敗した依頼を再試行する仕組みと、諦める上限を決める
  • 積みっぱなしになっていないか、列の長さを監視する
  • 同じ依頼が2回処理されても問題ない設計にしておく

注意: キューに積んだ処理は「いつか確実に終わる」と思われがちですが、詰まったり失敗し続けたりすることがあります。列の長さや失敗件数を監視して、止まっていれば気づける仕組みを用意することが大切です。