使用Amazon Simple Notification Service从云端推送消息

Amazon Simple Notification Service (SNS) 概述

Amazon 推出了名为 Simple Notification Service (SNS) 的新服务,旨在为监控应用、工作流系统、移动应用或其他基于通知的应用提供从云端设置、发布和发送通知的功能。

SNS 与 SQS 的区别

Amazon 已有另一项通知服务 Simple Queue Service (SQS),采用基于轮询的消息传递方式。SQS 用于分布式应用之间的通信,消息被发送到队列中存储,等待客户端消费。客户端定期轮询队列,检索感兴趣的消息。这种方式解耦了消息的发送者和接收者。

与 SQS 不同,SNS 采用推送方式进行通知。应用程序或管理员使用 GUI 工具创建 TopicAccess Point,这些点由主题或事件类型标识。主题的所有者决定谁可以发布/订阅,以及使用哪些通信协议(HTTP、HTTPS、Email、Email-JSON、SQS 队列)。感兴趣的客户端订阅这些访问点,并提供接收通知的 URL 或电子邮件地址。当应用程序想要发送消息时,它会将消息发送到访问点,SNS 负责传递过程。

消息格式与内容

通过电子邮件发送的消息仅包含发布者发送的邮件正文,旨在发送给应该阅读这些消息的人。其他协议使用 JSON 包进行自动处理,包含以下信息:

  • MessageId: 每个通知的唯一标识符。
  • Timestamp: 通知发布的时间(GMT)。
  • Topic: 消息发布到的主题。
  • Type: 传递消息的类型,设置为“Notification”。
  • UnsubscribeURL: 取消订阅该主题的链接。
  • Message: 消息的有效载荷(正文)。
  • Subject: 主题字段(如果作为可选参数包含在发布 API 调用中)。
  • Signature: 消息、MessageId、Subject(如果存在)、Type、Timestamp 和 Topic 值的 Base64 编码“SHA1withRSA”签名。
  • SignatureVersion: 使用的 Amazon SNS 签名版本。

消息传递的可靠性

如果消息无法传递,SNS 系统会存储消息并稍后重试,直到客户端接收。消息在多个系统和数据中心中冗余存储。需要注意的其他技术细节包括:

  • SNS 不保证 100% 的消息传递,建议在传递关键时发送通知到 SQS 队列。
  • 由于 SNS 系统的分布式特性,订阅者可能会多次接收同一消息。
  • SNS 不保证消息按发布顺序接收。
  • 消息发布后无法删除。
  • Amazon 选择创建自己的 API,而不是使用开放协议如 AMQP 或 OASIS WS Notification,这意味着锁定在 AWS 生态系统中。

消息长度与成本

消息当前最大长度为 8KB。成本为每 100,000 条 HTTP 通知 $0.06,每 100,000 封电子邮件 $2。每月前 100,000 条 HTTP 通知和 1,000 封电子邮件免费。SQS 消息不收费。此外,与 Amazon SNS 的数据传输 IN/OUT 相关的费用也需考虑。

阅读 9
0 条评论