すのふら

すのふら

日々の備忘録

Amazon SQSについて勉強

AWS 認定ソリューションアーキテクト – アソシエイトを受けるため、改めてAmazon Web Service(AWS)の勉強をする。

今回もこの本を一読したうえで機能単位で勉強していく。

Amazon Single Queue Service(SQS)

プロセス間通信などのスレッド間通信に使用されるコンポーネントでデータを伝達するポーリング型キューサービス

送信元から来たデータをキューとして保持しておいて、受信先が拾ってくるのを待っているシステム。(PULL方式)

SQLの特徴

  • セキュリティ:利用ユーザのアクセス制御やメッセージのサーバーサイド暗号化が可能
  • 耐久性:複数のサーバやデータセンターに全メッセージを重複して保持する
  • 可用性:分散キューモデルを採用することでメッセージの送信/受信の可用性を向上させる
  • スケーラビリティ:ほぼ無制限のTPS(Transactions Per Secound)をサポート
  • フルマネージド型
  • 初期投資不要

SQSの構成要素

大きく二つの要素がある。

メッセージサイズ
メッセージ保持期間

メッセージサイズ

プロデューサが生成するデータを指す。
メッセージは画像などの大きいデータは送信することができない。最大256KBまで


メッセージ保持期間

メッセージをキューイングする。
分散キュー。
削除されないメッセージはデフォルトで4日間保持する。
保持期間は60秒から最大14日間まで。


SQSの利用ケース


バッファリング


ワークキュー


リクエストのオフロード

ターゲットのファンアウト

並列処理構成


キューの特徴

スタンダードキューとFIFOキューの二つが存在する。
また、キューのメッセージ取得方法は、ショートポーリングとロングポーリングで二つ存在する。


キューの種類

スタンダードキュー

スループットが無制限である代わりに、同じメッセージを2回は配信する可能性がある。
また、送信順番も変更される可能性がある。

同じメッセージ複数回配信してしまう可能性がある場合、問題があるので以下のように設計することで回避が可能。
プロデューサ側のメッセージに重複排除用のIDなどの情報を設定し、DynamoDBなどを活用して処理済みでないことを判定する仕組みを導入する。


FIFOキュー

1回のみ配信し、先入先出で順序性を保つことができる一方で、1秒間300件の送信、受信、削除しかできない。
スタンダードキューに加えて若干課金額が赤い。


メッセージの取得方法

ショートポーリング

キューに問い合わせしたときにSQS上にメッセージがない(キューが空)の状態でも空であるというリターンをする。
短い期間で問い合わせを数回行うので課金額が高くなる。

複数存在するSQSキューを順番に回って複数のキューを取得するような場合に使用する。


ロングポーリング

キューに問い合わせしたときにSQS上にメッセージがない(キューが空)の状態の場合は、タイムアウド時間までメッセージがやってくるか待つ。
タイムアウトは最大20秒。

一般的にはこっちを使用する。


可視性タイムアウト

複数のコンシューマ(送信先)が同じメッセージをPULLしないように、処理中のものは一定期間(30秒)見えない状態にしておく機能のこと。
複数のコンシューマが同じメッセージを処理するのを防ぐのが目的。

コンシューマ側がもし処理中にアプリケーション側でエラーになり、キューを処理できなかった場合は再度見えるようになりほかのコンシューマが処理できるようになる。

スタンダードキューはそもそもメッセージを複数送信する可能性があるため、可視性タイムアウトで対応しきれない可能性があるのが注意点。


遅延キュー

リトライ処理など一旦準備が整うではさせたくないなど、メッセージの処理を一定期間させたくない場合に使用する。
その期間はメッセージをPULLできない(無敵時間的なやつ)


デッドレターキュー

正常処理できないメッセージがキューに存在し続けてしまうと、後続が永遠と処理がされなくなる問題があるため、キューの受信数を超過した場合に、別のキュー置き場に移動するというもの。

キューがうまく処理できない原因を徴する場合に使用する。


KMSを使用してのサーバーサイド暗号化

KMSを使用してキュー内のメッセージ本文を暗号化できる(KMSを使用しなければできない。つまりデフォルトではできないのが注意)


SQSを使用した優先度順の設定

ふたつのSQSキューを用意することで優先度を分けることができる。