Amazon SNS vs Amazon SQS
社内で通知機能を実装する際にAmazon SNSとAmazon SQSどっちがいいかという議題が上がったんですがよくわかってなかったので調べました
tl;dr
名前は似てるがそもそもやってることが全然違う
Amazon SNSは pub/sub メッセージングの機能を提供するサービス。複数のエンドポイントに同時にメッセージを送ることができ、エンドポイントもウェブサーバー、Lambdaなどに対応し、Amazon SQSにもメッセージを送ることができる
Amazon SQSは キューイングサービス。メッセージをSQSにenqueueし、単一のレシーバーがdequeueする。メッセージをpushすることはできないし、複数のレシーバーが同じメッセージを受け取ることもできない
Amazon SNS
フルマネージドのpub/subメッセージングサービス
pub/subメッセージングについては以前書きました
publisher (メッセージを送る側)はEC2だろうがRDSだろうがLamdbaだろうが何のサービスであってもAmazon SNSのトピックにメッセージをpublishします
Amazon SNSは、トピックをsubscribeしているsubscriber (メッセージを受け取る側)へメッセージを送信します
subscriberには個人のサーバーやLambda、Amazon SQSなどを使用することができます
Amazon SQS
フルマネージドのメッセージキューイングサービス
サービス間でのメッセージの送信、保存、受信ができます
一方のサービスでメッセージをAmazon SQSへ送信する
もう一方のサービスがAmazon SQSからメッセージを取り出す、と行った方法でメッセージを送信する
使い分けは?
pub/subメッセージングの良いところは、publisherとsubscriberが多対多でもメッセージの送信が簡単にできることだと思います
なので送りたいメッセージの受け手のサービスが複数なのか、それとも1つなのかである程度判断できるかなといった印象です (個人の意見です)