Amazon SNS和Amazon SQS有什么区别?

我不明白我什么时候会使用SNS和SQS,为什么他们总是耦合在一起?

SNS是一个分布式的发布 – 订阅系统。 当发布者将其发送到SNS时,消息被推送给订阅者。 SQS是分布式排队系统。 消息不被推送给接收者。 接收者必须轮询SQS来接收消息。 消息不能同时被多个接收器接收。 任何一个接收者都可以收到消息,处理并删除它。 其他接收器稍后不会收到相同的消息。 轮询固有地在SQS中的消息传递中引入了一些延迟,不像信息立即被推送给订户的SNS。 SNS支持多个端点,如电子邮件,短信,http端点和SQS。 如果你想让未知数量和types的用户接收消息,你需要SNS。

你不必总是把SNS和SQS结合起来。 您可以让SNS发送邮件到SQS以外的电子邮件,短信或httpterminal。 将SNS与SQS耦合是有优势的。 您可能不希望外部服务与主机build立连接(防火墙可能会阻止从外部连接到主机的所有传入连接)。 由于大量的消息,您的终点可能会死亡。 电子邮件和短信可能不是您快速处理邮件的select。 通过将SNS与SQS耦合,您可以按自己的节奏收到消息。 它允许客户端脱机,容忍networking和主机故障。 你也达到保证交货。 如果您将SNSconfiguration为将消息发送到http端点或电子邮件或SMS,则多次发送消息失败都可能导致消息丢失。

SQS主要用于分离应用程序或集成应用程序。 消息可以在短时间内(最多14天)存储在SQS中。 SNS向几个用户分发几个消息副本。 例如,假设您想要将应用程序生成的数据复制到多个存储系统。 您可以使用SNS并将这些数据发送给多个订阅者,每个订阅者将收到的消息复制到不同的存储系统(s3,主机上的硬盘,数据库等)。

来自aws doc:

Amazon SNS允许应用程序通过“推送”机制向多个订阅者发送时间紧迫的消息,无需定期检查或“轮询”更新。

Amazon SQS是由分布式应用程序通过轮询模型交换消息的消息队列服务,可用于分离发送和接收组件,而无需每个组件同时可用。

http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html

来自@Srikanth的好回答。 为此我会补充说SQS可以用于批处理。 当您轮询队列时,您可以一次获取多条消息并批量处理。您可能会因为性能或成本原因而想要这样做。 你不能用SNS做到这一点。