什么是 AWS SNS
Amazon SNS(Simple Notification Service)是 AWS 提供的一种 完全托管的发布/订阅(Pub/Sub)消息服务。 它用于在系统之间传递消息,可以实现 异步通信、事件分发、通知推送 等功能。
简单来说:
SNS = 消息广播系统,发布者发消息 → SNS Topic → 多个订阅者同时接收。
核心概念
| 概念 | 说明 |
|---|---|
| Topic(主题) | 消息通道,发布者将消息发到某个 Topic |
| Publisher(发布者) | 负责发布消息的应用或服务 |
| Subscriber(订阅者) | 接收消息的终端,可以是 HTTP(S) 端点、Email、SQS 队列、Lambda 等 |
| Subscription(订阅) | 订阅关系。订阅后 SNS 会推送消息到订阅者 |
| Message(消息) | 发布者发送的内容(文本、JSON 等) |
常见的使用场景
-
系统事件通知
- 当有新用户注册、订单生成、任务完成等事件时,发送通知到多个服务或用户。
-
分布式系统通信
- SNS 与 SQS(Simple Queue Service)结合:SNS 负责广播消息,SQS 负责解耦与持久化。
-
报警与监控
- 与 CloudWatch 结合,在系统异常时自动推送告警到邮箱、短信或 Webhook。
-
邮件与短信推送
- SNS 支持 Email、SMS 推送,适合发送简短的通知类消息。
-
事件触发工作流
- SNS 触发 AWS Lambda,进行后续逻辑处理(如图像分析、日志写入等)。
支持的订阅协议
| 协议 | 示例 |
|---|---|
| HTTP/HTTPS | 发送到 Webhook(常见于事件回调) |
| Email / Email-JSON | 发送邮件通知 |
| SQS | 推送到队列,供后台异步处理 |
| Lambda | 自动调用 AWS Lambda 函数 |
| SMS | 短信通知 |
| Platform Application Endpoint | 用于移动推送(iOS / Android) |
SNS 与其他 AWS 服务关系
| 服务 | 关系 |
|---|---|
| SQS | SNS 发布 → SQS 订阅,实现一对多异步解耦 |
| SES | SES 是邮件发送服务;SNS 是消息广播服务,SES 可以把发送结果事件(如退信、投递)发送到 SNS |
| EventBridge | SNS 偏向简单消息推送,EventBridge 偏向复杂事件总线(过滤与路由更强) |
示例流程
|
|
优缺点
优点
- 无需服务器维护,完全托管
- 支持多种协议和高并发
- 与其他 AWS 服务深度集成
- 消息可靠传递与重试机制
缺点
- 消息仅短暂保存(不像 SQS 有持久化队列)
- 不支持复杂过滤逻辑(EventBridge 更强)
- 消息顺序与去重需自行控制