メッセージング サービスは、最新の分散システムとイベント駆動型アーキテクチャを構築する際の重要なコンポーネントです。 AWSは広く利用されている2つの完全に管理されたメッセージサービス: Amazon Simple Notification Service (SNS) と Amazon Simple Queue Service (SQS)。これら 2 つには機能上の類似点がありますが、その基本原理、使用シナリオ、利点は大きく異なります。
この記事では、Oncloud AI が SNS と SQS の主な違いを詳細に分析し、実際のニーズに基づいて適切なサービスを選択できるようにします。
Amazon SNS とは何ですか?
Amazon Simple Notification Service (SNS) は、複数のサブスクライバーへのメッセージのプッシュをサポートする「pub/sub モデル」に基づくプッシュ通知システムです。 App-to-App (A2A) と App-to-Person (A2P) の 2 種類の宛先をサポートします。
SNS がサポートする A2A ターゲットは次のとおりです。
- AWS ラムダ
- アマゾンSQS
- Amazon Kinesis データファイアホース
- AWS イベントフォークパイプライン
- HTTPエンドポイント
SNS でサポートされている A2P ターゲットは次のとおりです。
- テキストメッセージ(SMS)
- 電子メール
- アプリ内通知
- AWS チャットボット
- ポケベルの役割
SNS は標準トピックと FIFO トピックを提供します。標準トピックはパフォーマンスが高く、レイテンシが低いのに対し、FIFO トピックはメッセージの順序と重複排除をサポートしており、厳密なメッセージの順序を必要とするビジネス シナリオに適しています。
Amazon SQS とは何ですか?
Amazon Simple Queue Service (SQS)はポーリングベースの非同期処理サービスシステム モジュールを分離し、バックグラウンド タスクと非同期ワークロードを実装するために使用されます。
SQS の使用モデルは、プロデューサーがキューにメッセージを送信し、コンシューマーが要求に応じてキューをポーリングして処理するメッセージを取得するというものです。 SQS は次の 2 種類のキューを提供します。
- 標準キュー: 高スループットと少なくとも1回の配信をサポート
- FIFOキュー: メッセージの順序と一意性を保証する
SQSサポート設定メッセージの保持最大14日間、またサポートされていますデッドレターキュー (DLQ)複数の障害が発生したメッセージを処理し、信頼性の高いメッセージ配信を改善するために使用されます。
SNSとSQSの主な違い
1. プッシュ vs 投票
- SNSはプッシュベースメッセージが公開されると、すぐにすべての購読者に配信されます。
- SQSは世論調査に基づくメッセージは公開されるとキューに保存され、コンシューマーがポーリングして処理するまで待機します。
2. 多対多と多対1
- SNS は多対多の関係をサポートします。 SNS トピックには複数のパブリッシャーとサブスクライバーが存在する場合があります。
- SQS は通常、多対 1 の関係であり、複数のプロデューサーがメッセージを送信できますが、メッセージは通常 1 つのコンシューマーによって処理されます。
3. メッセージの永続性
- SNS はメッセージの永続性を保証しません。コンシューマーが利用できないときにメッセージがプッシュされた場合、メッセージは破棄されます。
- SQS は、メッセージが DLQ を通じて後で受信または処理されることを保証する強力な永続化メカニズムを提供します。
4. メッセージ再試行メカニズム
- SNS にはデフォルトでは再試行メカニズムがありません。プッシュが失敗すると、メッセージは失われます。
- SQS は再試行メカニズムと DLQ を提供し、再試行の最大回数を設定できます。
5. バッチ処理機能
- SNS は単一メッセージのプッシュのみをサポートします。
- SQS はバッチ処理をサポートします。標準キューはバッチごとに最大 10,000 件のメッセージを処理でき、FIFO キューはバッチごとに最大 10 件のメッセージを処理できます。
使用シナリオの比較
SNSの利用に適したシナリオ:
- 複数の異なるシステムやプラットフォームにメッセージをプッシュする必要がある
- ユーザーにリアルタイムで通知する(SMS、メール、アプリ通知など)
- 複数のサブスクライバーにメッセージをブロードキャストするためのファンアウトパターンを実装する
SQS の使用に適したシナリオ:
- バックグラウンドタスク処理は非同期性と永続性をサポートする必要がある
- 直接通信を避けるためにシステムコンポーネントを分離する
- メッセージの信頼性と再試行メカニズムに対する高い要件
- メッセージのバッチ処理
ファンアウトモード: SNSとSQSの組み合わせ
シナリオによっては、SNS を SQS と組み合わせて使用できます。たとえば、SNS は、それぞれが処理ロジックに対応する複数の SQS キューにメッセージを公開します。このアプローチは「ファンアウト モード」と呼ばれます。
例:
- ユーザーがアップロードした写真
- SNS公開アップロードイベント
- 複数の SQS キューがメッセージを受信します。
- キューA: 画像認識
- キューB: サムネイル生成
- キューC: ユーザーに通知
このパターンにより、信頼性の高い非同期処理とモジュールの分離を実現できます。
EventBridge vs. Kinesis: その他の選択肢
SNS と SQS に加えて、AWS は他のメッセージングおよびイベントサービスも提供しています。
Amazon イベントブリッジ
- イベントのフィルタリングとルーティングをサポートするイベントバスサービス
- イベントは SNS、SQS、Lambda などのターゲットに送信できます。
- 複雑なイベント処理ロジックに適しています
アマゾンキネシス
- リアルタイムストリーミングデータの処理と分析
- 高スループットと複雑なデータ処理をサポート
要約する
Amazon SNS と Amazon SQS は、スケーラブルで可用性の高いシステムを構築するための中核コンポーネントです。 SNS はリアルタイムのプッシュ通知や 1 対多のシナリオに適していますが、SQS は非同期処理やシステムの分離に適しています。
適切なサービスを選択すると、システムのパフォーマンスが向上するだけでなく、結合および保守コストも削減されます。
オンクラウドAI 弊社はAWS公式パートナーとして、AWS決済、AWSクラウドサーバー移行、SQS/SNSアーキテクチャコンサルティング、クラウドサービスホスティングなどの専門サービスを提供しています。ご要望がございましたら、ページ下部のQRコードをスキャンしてお問い合わせください。