AWSのキュー(Queue)とワーカー(Worker)とは?わかりやすく解説!

AWSのシステム構成図や解説記事を見ていると、「キュー(Queue)」や「ワーカー(Worker)」という言葉が出てくることがあります。

でも、キューとワーカーはそれぞれ何をするのでしょうか?

この記事では、写真の縮小を例に、以下の内容をわかりやすく説明します。

  • キュー(Queue)とワーカー(Worker)とは?
  • AWSではキューとワーカーをどう組み合わせる?

キュー(Queue)とワーカー(Worker)とは?

写真の縮小を例に、Webアプリが出した依頼を、「キュー(Queue)」や「ワーカー(Worker)」がどう受け渡すのかを見てみましょう。

キュー(Queue)とワーカー(Worker)とは?

キュー(Queue)とは、あとで処理する依頼を一時的に預かる仕組みです。 依頼の内容を記録したデータを「メッセージ」と呼びます。

ワーカー(Worker)とは、キューからメッセージを受け取って、依頼された作業を実行するプログラムです。

写真のアップロードから縮小までの流れ

写真を3枚アップロードし、1枚につき1件のメッセージを送る例を考えます。キューに入るメッセージは、次の3件です。

メッセージ元の写真縮小後の横幅縮小版の保存先
1originals/123.jpg300ピクセルthumbnails/123.jpg
2originals/124.jpg300ピクセルthumbnails/124.jpg
3originals/125.jpg300ピクセルthumbnails/125.jpg
  • Webアプリが依頼を登録する
    • Webアプリは元の写真を保存し、写真ごとに縮小の依頼をキューに送ります。依頼を登録できたら、縮小版ができる前に「アップロード完了」と返せます。
  • キューが依頼を預かる
    • ここでは、キューに3件のメッセージがたまっていて、ワーカーが1件ずつ処理するとします。ワーカーが1件を処理している間、残りの2件はキューで待ちます。
  • ワーカーが1件を処理し、終わったメッセージを削除する
    • たとえば、ワーカーがメッセージ1を受け取ったとします。originals/123.jpg を読み込み、横幅300ピクセルに縮小して、thumbnails/123.jpg に保存します。保存できたら、メッセージ1だけをキューから削除します。その後、待っている2件のうち1件を受け取り、同じ手順を繰り返します。

ユーザーがあとから写真一覧を開くと、ブラウザがWebアプリに縮小版の作成状況を確認します。まだできていなければ画面に「準備中」と表示し、できていればWebアプリが画像を表示するためのURLをブラウザに返します。

このように、Webアプリが画像処理の完了を待たずにアップロードへの応答を返し、画像処理を別に進める方法を、この例では非同期処理と呼びます。

AWSではキューとワーカーをどう組み合わせる?

AWSでは、メッセージを預かるキューを Amazon SQS(Amazon Simple Queue Service) で作れます。ワーカーは、たとえば AWS Lambda や Amazon EC2 で動かせます。

次の図は、Amazon SQSで依頼を預かり、Lambda関数で写真を縮小する構成の例です。

AWSではキューとワーカーをどう組み合わせる?
構成誰がSQSからメッセージを受け取る?誰が写真を縮小する?
SQSとLambdaLambdaサービスが受け取り、関数に渡すLambda関数
SQSとEC2EC2上で動くワーカーが受け取るメッセージを受け取ったワーカー

Lambdaを使う場合は、SQSのキューとLambda関数を連携させます。LambdaサービスがSQSからメッセージを取得し、1件または複数件をまとめてLambda関数に渡します。

Lambda関数が、受け取ったメッセージをすべて正常に処理すると、Lambdaサービスがそのメッセージをキューから削除します。1件だけ受け取った場合はその1件を、複数件を受け取った場合はその複数件を削除します。

EC2を使う場合は、仮想サーバー上でワーカーを動かします。ワーカーがSQSにメッセージを取りに行くので、写真を縮小する処理に加えて、メッセージを受け取る処理もワーカー側で用意します。この記事でいう「EC2ワーカー」は、このEC2上で動くプログラムのことです。

あわせて読みたい

「キューイング」とは、データや作業を待ち行列に入れ、あとで処理できるようにすることです。以下の記事で「キューイング」について、詳しく説明していますので、興味のある方は下記のリンクからぜひチェックをしてみてください。

本記事のまとめ

  • キューは、あとで処理する依頼をメッセージとして預かる。
  • ワーカーはキューからメッセージを受け取って作業を実行する。処理を終えたメッセージはキューから削除する。
  • 受付と作業を分けると、Webアプリは作業の完了を待たずに受付結果を返せる。
  • AWSでは、SQSのメッセージを処理する役割を、Lambda関数やEC2上のプログラムに持たせられる。

お読みいただきありがとうございました。

スポンサーリンク