SNSとSQSをいつ使用しますか?また、なぜそれらは常に一緒に結合されているのですか?
8 に答える
SNSは分散パブリッシュ サブスクライブシステムです。メッセージは、パブリッシャーから SNS に送信されると、サブスクライバーにプッシュされます。
SQSは分散キューイングシステムです。メッセージは受信者にプッシュされません。受信者はSQSからメッセージをポーリングまたはプルする必要があります。複数の受信者が同時にメッセージを受信することはできません。任意の受信者がメッセージを受信し、処理して削除できます。他の受信者は、後で同じメッセージを受信しません。ポーリングは、メッセージがすぐにサブスクライバーにプッシュされる SNS とは異なり、SQS でのメッセージ配信に本質的にある程度の遅延をもたらします。SNS は、電子メール、SMS、HTTP エンドポイント、SQS などのいくつかのエンド ポイントをサポートしています。不明な数とタイプのサブスクライバーにメッセージを受信させたい場合は、SNS が必要です。
SNS と SQS を常に結合する必要はありません。SQS とは別に、SNS からメール、SMS、または HTTP エンドポイントにメッセージを送信できます。SNS を SQS と結合することには利点があります。外部サービスがホストに接続することを望まない場合があります (ファイアウォールは、外部からホストへのすべての着信接続をブロックする場合があります)。
大量のメッセージが原因で、エンドポイントが停止する可能性があります。電子メールと SMS は、メッセージを迅速に処理するための選択肢ではないかもしれません。SNSとSQSを連携させることで、自分のペースでメッセージを受け取ることができます。これにより、クライアントをオフラインにして、ネットワークおよびホストの障害に耐えることができます。また、確実な配送を実現します。メッセージを HTTP エンドポイントまたは電子メールまたは SMS に送信するように SNS を構成する場合、メッセージの送信に何度か失敗すると、メッセージがドロップされる可能性があります。
SQS は主に、アプリケーションの分離またはアプリケーションの統合に使用されます。メッセージは SQS に短期間 (最大 14 日間) 保存できます。SNS は、メッセージの複数のコピーを複数のサブスクライバーに配布します。たとえば、アプリケーションによって生成されたデータを複数のストレージ システムにレプリケートするとします。SNS を使用してこのデータを複数のサブスクライバーに送信し、それぞれが受信したメッセージを異なるストレージ システム ( S3、ホストのハードディスク、データベースなど) にレプリケートすることができます。
簡単な言葉で、
SNS - プッシュ メカニズムを使用してサブスクライバーにメッセージを送信し、プルする必要はありません。
SQS - 分散アプリケーションがポーリング モデルを介してメッセージを交換するために使用するメッセージ キュー サービスであり、送信コンポーネントと受信コンポーネントを切り離すために使用できます。
一般的なパターンは、SNS を使用してメッセージを Amazon SQS キューに発行し、メッセージを 1 つまたは複数のシステム コンポーネントに非同期で確実に送信することです。
Amazon SNS FAQからの参照。