Amazon SQSの解説(AWS認定クラウドプラクティショナーシラバス用語)

Amazon SQSの解説(AWS認定クラウドプラクティショナーシラバス用語)
目次

Amazon SQSとは

Amazon SQS(Simple Queue Service)は、AWSが提供するフルマネージド型のメッセージキューイングサービスです。システムを構成する異なるソフトウェアコンポーネント間で、データ(メッセージ)を安全かつ確実に送受信するための一時的な保管庫(キュー)の役割を果たします。あるプログラムが処理要求(メッセージ)をSQSのキューに送信(プッシュ)し、別のプログラムが自身のペースでそのキューからメッセージを取り出して(プル)処理を行います。このように、システム同士が直接通信して待ち合わせるのではなく、間にSQSを挟むことで互いの処理速度や状態に依存しないアーキテクチャを作ることができます。これを「疎結合(Decoupling)」と呼び、システム全体の拡張性、信頼性、耐障害性を飛躍的に高めるためのクラウドネイティブな設計において、極めて重要な役割を担うサービスです。

具体例

SQSの役割は、人気レストランの「注文受付システム(ウェイティングリスト)」に例えることができます。お客様(送信側)が次々と来店し注文をしますが、厨房(受信側)のコックは一度に数人分しか料理を作れません。もしお客様とコックが直接やり取りすると、コックが忙しい間はお客様を門前払いすることになりシステムが破綻します。そこで、ホールスタッフが注文を伝票に書いて一旦「注文待ちのレール(SQS)」に並べます。コックは自分のペースで伝票を1枚ずつ取り出して料理を作ります。これにより、注文が殺到しても伝票が溜まるだけで、注文自体を取りこぼすことはありません。
実際のシステムでの利用シーンは以下の通りです。

  • ECサイトの注文処理: セール時に大量の購入リクエストが発生した場合、Webサーバーは即座に「注文データ」をSQSに書き込んでユーザーに完了画面を返します。裏側の在庫引き当てや決済処理のサーバーは、SQSからデータを取得して順番に重い処理を実行します。これにより、Webサイトのレスポンス低下やダウンを防ぎます。
  • 画像のバッチ処理: ユーザーがアップロードした大量の高解像度画像をサムネイルに変換する際、変換リクエストをSQSに溜め、複数のワーカーサーバーが手分けして非同期で処理を行います。

もう少し詳しく

SQSは、システム間を「非同期」で連携させるためのサービスです。送信側(プロデューサー)はキューにメッセージを入れるだけでタスクが完了し、受信側(コンシューマー)はキューを定期的に確認(ポーリング)してメッセージを取得します。
SQSには大きく分けて2種類のキューが存在します。1つ目は「標準キュー」です。こちらは1秒間にほぼ無制限のトランザクション(スループット)を処理できる非常に強力なキューですが、分散システムの特性上、メッセージの順序が入れ替わったり、ごく稀に同じメッセージが2回配信されたりする「少なくとも1回の配信(At-Least-Once)」という仕様になっています。
2つ目は「FIFO(First-In-First-Out)キュー」です。こちらは名前の通り、メッセージが送信された順番を厳格に守って処理させることができ、さらに重複配信も絶対に防ぐ(Exactly-Once)設計になっています。金融取引や決済システムなど、処理の順番が絶対に入れ替わってはいけない、あるいは二重処理が許されない厳密なシステムで利用されます。ただし、標準キューに比べると1秒間に処理できるメッセージ数(スループット)に制限があります。用途に応じてこれらを使い分けるのが一般的なアーキテクチャ設計となります。

試験でのポイント

試験では、Amazon SQSは「疎結合(Decoupling)」「非同期処理」「マイクロサービス間の連携」といったキーワードとともに頻繁に出題されます。「システムのコンポーネントを分離したい」「ピーク時の負荷を平準化したい」「ワーカーインスタンスの負荷を軽減したい」といったシナリオの問題が出たら、SQSを利用したメッセージキューイングが最適な解決策となります。
また、よく似た用途のメッセージングサービスである「Amazon SNS (Simple Notification Service)」との決定的な違いを問われることがあります。SNSは「プッシュ型」で、メッセージが発生した瞬間に登録された複数の宛先(メール、SMS、Lambdaなど)に一斉にリアルタイム配信(ブロードキャスト)します。一方、SQSは「プル型(ポーリング型)」で、処理側のプログラムが自身の都合の良いタイミングでキューからメッセージを取りに行きます。この「一斉送信のSNS」と「キューに溜めて順次処理するSQS」の違いを明確に理解しておくことが得点源になります。

関連する用語

システム同士の依存関係を減らし、一部が停止しても全体に影響が及ばないようにする設計思想である「疎結合(Decoupling)」、一つの大きなシステムを小さな独立したサービスの集合体として構築する「マイクロサービスアーキテクチャ」、およびSQSとしばしば組み合わせて利用される、メッセージを一対多で一斉配信するプッシュ型サービスの「Amazon SNS」などが関連用語です。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ