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を使用しなければできない。つまりデフォルトではできないのが注意)