AWS SNS 与 SQS – 主要区别是什么?

在构建现代分布式系统和事件驱动架构(event-driven architectures)时,消息传递服务是关键组件。AWS 提供了两项广泛使用的、完全托管的消息服务(fully managed message services):Amazon Simple Notification Service(SNS)和 Amazon Simple Queue Service(SQS)。虽然两者在功能上有相似之处,但它们的底层原理、使用场景和优势差异显著。

本文将由 Oncloud AI 为您详细解析 SNS 与 SQS 的主要区别,帮助您根据实际需求选择合适的服务。

 

什么是Amazon SNS?

 

 

Amazon Simple Notification Service(SNS)是一种基于“发布-订阅模型(pub/sub)”的推送通知系统(push notification system),支持将消息推送给多个订阅者(messages to multiple subscribers)。它支持两种类型的目标:应用到应用(A2A)和应用到个人(A2P)。

SNS 支持的 A2A 目标包括:
  • AWS Lambda
  • Amazon SQS
  • Amazon Kinesis Data Firehose
  • AWS Event Fork 管道
  • HTTP 端点

 

SNS 支持的 A2P 目标包括:
  • 短信 (SMS)
  • 电子邮件
  • 应用内通知
  • AWS Chatbot
  • 寻呼机职责

 

SNS 提供标准主题和 FIFO 主题。标准主题性能高,延迟低;而 FIFO 主题支持消息顺序和去重,适用于要求严格消息顺序的业务场景。

 

什么是 Amazon SQS?

 

Amazon Simple Queue Service(SQS)是一种基于轮询(polling)的异步处理服务(asynchronous processing service),用于将系统模块解耦,实现后台任务和异步工作负载。

SQS 的使用模式是生产者将消息发送到队列中,消费者按需轮询队列并获取消息进行处理。SQS 提供两种类型的队列:

  • 标准队列:支持高吞吐量、至少一次投递
  • FIFO 队列(fifo queues):保证消息顺序和唯一性

SQS 支持设置保留期(message retention),最长可达 14 天,还支持死信队列(Dead Letter Queue, DLQ),用于处理多次失败的消息,提高消息可靠性(reliable message delivery)。

 

SNS 与 SQS 的主要区别

 

1. 推送 vs 轮询
  • SNS 是基于推送的服务,一旦消息发布,就立即传递给所有订阅者。
  • SQS 是基于轮询的服务,消息发布后存储在队列中,等待消费者轮询处理。
2. 多对多 vs 多对一
  • SNS 支持多对多的关系,一个 SNS topic 可有多个发布者和订阅者。
  • SQS 通常为多对一关系,多个生产者可以发送消息,但消息通常由一个消费者处理。
3. 消息持久性
  • SNS 不保证消息持久性,如果在消费者不可用时推送消息,该消息将被丢弃。
  • SQS 提供强大的持久化机制,确保消息被接收或通过 DLQ 进行后续处理。
4. 消息重试机制
  • SNS 默认无重试机制,若推送失败则消息丢失。
  • SQS 提供重试机制及 DLQ,可设置最大重试次数。
5. 批处理能力
  • SNS 只支持单条消息推送。
  • SQS 支持批量处理(batch processing),标准队列每批最多可处理 10,000 条消息,FIFO 队列最多 10 条。

 

使用场景对比

 

适合使用 SNS 的场景:
  • 需要推送消息到多个不同系统或平台
  • 实时通知用户(如短信、邮件、App 通知)
  • 实现扇出模式(fan-out pattern)广播消息到多个订阅者

 

适合使用 SQS 的场景:
  • 后台任务处理,需支持异步与持久性
  • 系统组件之间解耦,避免直接通信
  • 对消息可靠性、重试机制要求高
  • 批量处理消息

 

扇出模式:SNS 与 SQS 结合使用

在一些场景中,您可以将 SNS 与 SQS 结合使用。例如,SNS 将消息发布到多个 SQS 队列,每个队列对应一个处理逻辑。这种方式称为“扇出模式”。

示例:

  1. 用户上传图片
  2. SNS 发布上传事件
  3. 多个 SQS 队列接收消息:
    • 队列 A:图片识别
    • 队列 B:缩略图生成
    • 队列 C:通知用户

 

通过该模式,您可以实现可靠的异步处理和模块解耦。

 

EventBridge 与 Kinesis:其他选择

除了 SNS 和 SQS,AWS 还提供其他消息和事件服务:

Amazon EventBridge
  • 事件总线服务,支持事件过滤、路由
  • 可将事件发送至 SNS、SQS、Lambda 等目标
  • 适用于复杂的事件处理逻辑
Amazon Kinesis
  • 用于处理和分析实时流数据
  • 支持高吞吐和复杂的数据处理

 

总结

Amazon SNS 与 Amazon SQS 是构建可扩展、高可用系统的核心组件。SNS 适用于实时推送通知和一对多场景,而 SQS 更适合异步处理与系统解耦。

选择合适的服务不仅能提升系统性能,也能降低耦合性和维护成本。

Oncloud AI 作为 AWS 官方合作伙伴,提供包括 AWS 代付、AWS 云服务器迁移、SQS/SNS 架构咨询、云服务托管等专业服务。如有需求,欢迎扫描页面底部二维码联系我们!

更多探索

Tell me what you need