我什么时候会使用 SNS 和 SQS,为什么它们总是耦合在一起?
SNS 是一个分布式 发布订阅 系统。消息在发布者发送到 SNS 时 被推送给订阅者。
SQS* 是分布式 排队 系统。消息 不会 推送给接收者。接收者必须从 SQS 轮询或拉取 消息。多个接收者不能同时接收消息。任何一个接收者都可以接收、处理和删除消息。其他接收者稍后不会收到相同的消息。与 SNS 不同,轮询在 SQS 中的消息传递中固有地引入了一些延迟,后者将消息立即推送给订阅者。SNS 支持多个端点,例如电子邮件、SMS、HTTP 端点和 SQS。如果您希望未知数量和类型的订阅者接收消息,则需要 SNS。 *
您不必总是耦合 SNS 和 SQS。除了 SQS,您还可以让 SNS 向电子邮件、SMS 或 HTTP 端点发送消息。将 SNS 与 SQS 耦合具有优势。您可能不希望外部服务与您的主机建立连接(防火墙可能会阻止从外部到您的主机的所有传入连接)。
您的端点可能会因为大量消息而死亡。电子邮件和 SMS 可能不是您快速处理消息的选择。通过将 SNS 与 SQS 耦合,您可以按照自己的节奏接收消息。它允许客户端离线,容忍网络和主机故障。您还可以实现有保证的交付。如果您将 SNS 配置为向 HTTP 端点或电子邮件或 SMS 发送消息,则多次发送消息失败可能会导致消息被丢弃。
SQS主要用于解耦应用程序或集成应用程序。消息可以在 SQS 中存储很短的时间(最长 14 天)。SNS 将多个消息副本分发给多个订阅者。例如,假设您想将应用程序生成的数据复制到多个存储系统。您可以使用 SNS 并将此数据发送给多个订阅者,每个订阅者将其接收到的消息复制到不同的存储系统(S3、主机上的硬盘、数据库等)。