AWS SQSのまとめ(AWS DVA対策)

AWS DVA

AWS Certified Developer – Associate(DVA) 対策として、Amazon SQSの特徴をまとめました。

Amazon SQS(Simple Queue Service)とは

Amazon SQSは、完全マネージド型のメッセージキューイングサービス。

ポイント

  • キューの種類(標準キュー、FIFOキュー)の理解
  • それぞれのキュー(標準キュー、FIFOキュー)でできることの理解

標準キューとFIFOキュー

標準キュートFIFOキューの比較表

項目標準キューFIFOキュー
スループットほぼ無制限のAPIコールをサポート。
ユースケースとしては、リアルタイムデータストリーミングなどの大量のメッセージを素早く処理する場合
最大300件/秒のAPIコールをサポート
バッチ処理を利用すると3,000件/秒のメッセージを処理可能。
メッセージの配信回数少なくとも1回の配信が保証される。(2回配信されることがある)1回のみ配信。
メッセージの順序ベストエフォート型。メッセージを送信された順に配信しようとするが、保証はされない。各メッセージ配信グループ内のメッセージを送信した順序どおりに取り出し可能。
・可視性タイムアウト(デフォルト30秒)
・メッセージの保持期間(デフォルト4日)
・配信遅延(デフォルト0秒)
・メッセージ受信待機時間(デフォルト0秒)
・デッドレターキュー
その他の設定メッセージタイマー・コンテンツベースの重複除外
・高スループットFIFOの有効化

キューの構成

  • プロデューサー(送信アプリ):キューにメッセージを送信する
  • コンシューマー(受信アプリ):キューからメッセージを受信する
  • キュー:プロデューサーから送信されたメッセージを保存する場所。

可視性タイムアウト/ChangeMessageVisibility/DeleteMessage

  • メッセージをコンシューマー(受信アプリ)が ReceiveMessageリクエストで取得すると、SQSはそのメッセージを「処理中」とみなして、他のコンシューマーから一時的に見えなくする期間を設定する。これが「可視性タイムアウト(Visibility Timeout)」。
  • 可視性タイムアウトの時間内に処理が終わらない場合は、ChangeMessageVisibilityリクエストで可視性タイムアウトを延長できる。また、処理が終わったメッセージはDeleteMessageリクエストで削除する。
  • 削除しない場合、「メッセージの保持期間(デフォルト4日)」の設定に従い、キューに残り続けることになり、コンシューマーから何度も取得されることになる。

ショートポーリングとロングポーリング

  • ReceiveMessageリクエストでキューからメッセージを受信するときに、WaitTimeSecondsパラメーター(メッセージ受信待機時間)を設定することができる。WaitTimeSecondsはレスポンスを返さずにキューに利用可能なメッセージがないか待機する時間。この値が0ならショートポーリング、1~20ならロングポーリング。
  • WaitTimeSeconds(メッセージ受信待機時間)はキューにも設定されている(デフォルト0)し、ReceiveMessageリクエストのWaitTimeSecondsパラメーターで指定することもできる。

ReceiveMessageリクエストで指定できるパラメーター

  • MaxNumberOfMessages:返されるメッセージの最大数。1~10の値を設定する。デフォルト1
  • WaitTimeSeconds:メッセージ受信待機時間。1~20の値を設定する。デフォルト0

ショートポーリング(WaitTimeSeconds=0)の動作

  • ReceiveMessageリクエストをコールした時に、メッセージが見つからなくてもレスポンスを即座に返す。
  • いくつかのSQSサーバーをピックアップし、メッセージを検索する。
  • 1度のReceiveMessageリクエストですべてのメッセージが返されない場合があるが、リクエストを繰り返すことですべてのメッセージが取得される(以下の例では、Cが取得されない)

ショートポーリングの例

※キューに格納されたメッセージは複数のサーバーに分散して保存されている。

ロングポーリング(WaitTimeSeconds=1~20)の動作

  • ReceiveMessageリクエストをコールした時に即座にレスポンスを返さず、WaitTimeSecondsで指定した時間メッセージが取得できるのを待つ。
  • 全てのSQSサーバーに対してメッセージの有無を確認し、MaxNumberOfMessagesで指定した最大数までメッセージを取得し、レスポンスを返す。

ロングポーリングの例

※キューに格納されたメッセージは複数のサーバーに分散して保存されている。

遅延キューとメッセージタイマー

遅延キュー(配信遅延)

  • キューにメッセージを保存後、コンシューマーに対してのメッセージ配信を遅らせる機能
  • 0~900秒の間で「キュー」に設定する。(デフォルト 0)
  • この設定は「キュー全体」に適用される

注意

  • 標準キューの場合、配信遅延の設定を変更しても、既にキューにあるメッセージの遅延には影響しない。(遡及性なし)
  • FIFOキューの場合は、配信遅延の設定を変更すると、既にキューにあるメッセージの遅延に影響する。(遡及性あり)

メッセージタイマー(標準キューのみ)

  • メッセージの配信を個別に遅れさせる機能
  • SendMessageリクエストのDelaySecondsパラメーターで指定した時間が経過するまで、キューに送信されたメッセージは可視化されない。
  • DelaySecondsパラメーターを指定したメッセージだけ、可視化が遅れる=個別に遅延時間を指定できる
  • FIFOキューはメッセージタイマーをサポートしていない
  • 遅延キューの設定よりも、メッセージタイマーが優先される

この記事がどなたかのお役に立てれば幸いです。
もし間違いを見つけた場合は、コメントで教えていただけると助かります。

コメント