📝

Amazon Simple Queue Serviceってなんだろ?

2021/04/25に公開約4,400字

Amazon Simple Queue Service (SQS)について調べてみました。

Amazon SQS(サーバーレスアプリのためのメッセージキューサービス)| AWS

概要

  • 完全マネージド型のメッセージキューイングサービス
  • マイクロサービス、分散システム、およびサーバーレスアプリケーションの切り離しとスケーリングが可能
  • メッセージ指向ミドルウェアの管理や運用に関連する複雑さやオーバーヘッドを排除できるため、開発者が差別化作業に集中することができる
  • あらゆる量のソフトウェアコンポーネント間でメッセージを送信、保存、受信
  • メッセージが失われることはなく、他のサービスを利用可能にしておく必要もない
  • 標準キューとFIFO キューがある

メリット

  • 管理オーバーヘッドの排除
    • 前払い料金、メッセージングソフトウェアの取得、インストール、設定が不要
    • キューが動的に作成され自動的にスケール
  • 機密データを安全に保つ
    • サーバー側の暗号化 (SSE) によって各メッセージの本文を暗号化
    • AWS Key Management Service (KMS) の統合
    • 暗号化キーが使用されるたびに AWS KMS によって AWS CloudTrail に記録
  • 確実にメッセージを配信
    • メッセージすべての複数のコピーが複数のアベイラビリティーゾーンで冗長的に保存
  • 伸縮自在に、コスト効率良くスケールする
    • アプリケーションで伸縮自在にスケールされるため、容量計画や事前プロビジョニングについて心配する必要がない
    • キューあたりのメッセージ数に制限はなく、標準キューではほぼ無制限のスループットが提供

よくある質問 - Amazon SQS | AWS

Q: 自社製や市販パッケージのメッセージキューイングシステムと比較して、Amazon SQS にはどのようなメリットがありますか?

  • ハードやソフトの管理が不要

Q: Amazon SQS と Amazon SNS の違いは何ですか?

  • SNSはプッシュ型
    • サブスクライバー(通知を受け取る側)に任意のタイミングでメッセージを送信できる
    • ポーリング不要
  • SQSはポーリングでメッセージをやり取りする
    • 分散型アプリで使用
    • コンポーネントの送受信を切り離す

Amazon SQS と Amazon MQ の違いは何ですか?

  • 既存アプリのメッセージング機能をクラウドに移行する場合はMQ
  • 新しいアプリでメッセージング機能を構築する場合はSQS、SNS

Amazon SQS にはメッセージの順序付け機能がありますか?

  • FIFOキューでは順序保証
  • 標準キューでは順序保証されない(ベストエフォート)

Q: Amazon SQS では、メッセージの配信は保証されていますか?

  • 標準キューでは1回以上(複数回配信の可能性もある)
  • FIFOキューでは1回だけ

Q: Amazon SQS と Amazon Kinesis Streams の違いは何ですか?

  • SQS は、分散アプリケーションのコンポーネント間でデータを移動し、これらのコンポーネントを分離する場合に役立つ
  • Amazon Kinesis クライアントライブラリ (KCL) では、特定のパーティションキーのすべてのレコードが同じレコードプロセッサに提供されるため、同じ Amazon Kinesis ストリームから読み取りを行う複数のアプリケーションを構築することが容易
    • カウント、集計、フィルタリングの実行など

Q: Amazon SQS の無料利用枠で何ができますか?

  • 毎月 100 万件のリクエストまで無料

特徴 - Amazon SQS | AWS

標準キュー

  • 無制限のスループット
    • API アクションあたり、ほぼ無制限の数の 1 秒あたりのトランザクション (TPS) をサポート
  • 少なくとも 1 回の配信
    • メッセージは少なくとも 1 回は確実に配信されますが、複数のメッセージのコピーが配信されることもあります
  • ベストエフォート型の順序付け
    • メッセージが送信されたときと異なる順序で配信されることがあります。

image.png

FIFO キュー

  • 高スループット
    • デフォルトでは、FIFO キューは毎秒最大 300 件のメッセージをサポート (毎秒送信、受信、または削除オペレーション 300 件)
    • オペレーションあたり 10 件のメッセージ (最大) というバッチ処理を実行する場合、FIFO キューは 1 秒あたり最大 3,000 件のメッセージをサポート可能
    • FIFO の高スループットモードを有効にすると、バッチ処理ありで 1 秒あたり最大 30,000 件のメッセージ、バッチ処理なしで 1 秒あたり最大 3,000 件のメッセージをサポート
  • 1 回だけの処理
    • メッセージは 1 度配信されると、ユーザーがそれを処理して削除するまでは使用可能な状態に保たれます。キューでメッセージの重複が起きることはありません。
  • 先入れ先出し配信
    • メッセージが送信または受信された順序が厳密に保持されます (先入れ先出し)。

image.png

動画

https://www.youtube.com/watch?v=avfc0gQ7X0A

https://www.youtube.com/watch?v=8cAk1_GSV0g

AWS再入門ブログリレー SQS編 | Developers.IO

Amazon Simple Queue Service(SQS)とは?

  • フルマネージド型のメッセージキューサービス
  • 「メッセージをSQSの送信」、「SQSからメッセージをポーリング」
  • 軽い受付処理をした結果をSQSに登録し、別のサーバーからメッセージをポーリングし、重い処理を済ませる
  • SQS側で処理予定のタスクをバッファーでき、スパイク的なアクセスに耐えれる構成を作成できる
  • SQSに登録されているキューに基づいてSQSをポーリングし、処理を行うサーバーをスケールする事ができる
  • SQSをトリガーにLambdaをキックし、サーバーレスが捗る
「注文はチーズバーガー→お会計130円です→チーズバーガーを作成→チーズバーガーを返す」

ような同期的なアプリケーションを

「レジ側: 注文はチーズバーガー→お会計130円です(SQSにキューを登録)」

「厨房側: SQSをポーリング、チーズバーガーを作成、チーズバーガーを返す」

のように、レジと厨房を非同期で処理できるため、レジでは注文と会計のみの仕事に集中もできますし、何よりチーズバーガーを作る作業は厨房に丸投げするため、お客様にも待たさずに次々と注文を受け付けられます。

前提知識

  • メッセージをSQSに送信するアプリケーションのことを「プロデューサー」と呼ぶ
  • SQSからメッセージをポーリングするアプリケーションのことを「コンシューマー」と呼ぶ
  • SQSに送信できる最大サイズは256KB
  • SQS側での最長保持期間は14日

SQSのタイプ

  • 標準キュー
    • 順不同な可能性がある
    • 複数回配信される可能性がある
    • ほぼ無制限に送信ができる
  • FIFOキュー
    • 順番配信
    • 重複キューの削除
    • 一回だけの配信
    • 1秒に送信できるキューに制限がある

SQSのライフサイクル

  • 可視性タイムアウト
    • コンシューマーがメッセージを受信してから可視性タイムアウトの間、他のコンシューマーなどにキューを配信しない
  • メッセージ保持期間
    • SQSにメッセージ保持する期間
    • SQSに登録されてから処理されずにSQSに溜まったメッセージが削除されるまでの期間

コンソール

まとめ

今回はAmazon Simple Queue Service (SQS)について調べてみました。
以下がポイントでした。

  • 完全マネージド型のメッセージキューイングサービス
  • 分散型アプリで使用
  • 標準キューとFIFO キューがある
  • 標準キューは順不同、複数回配信、無制限に送信
  • FIFOキューは順番配信、重複キューの削除、一回だけの配信、1秒に送信できるキューに制限がある
  • 可視性タイムアウトの間、他のコンシューマーなどにキューを配信しない
  • SQSに送信できる最大サイズは256KB
  • SQS側での最長保持期間は14日

参考になれば幸いです。

Discussion

ログインするとコメントできます