掌握 AWS 可能具有挑战性,尤其是在理解它的两项核心服务时:Amazon Simple Queue Service (SQS) 和 Amazon Simple Notification Service (SNS)。
尽管这两种服务都是云解决方案不可或缺的一部分,但它们经常被误解和误用。
在本文中,我将分解 SQS 和 SNS 的作用,找出它们的相同点和不同点,并演示如何一起使用这些服务来构建高性能云架构。
SQS 与 SNS:简短回答
如果您很着急,以下是主要区别:
SQS是一种基于轮询的消息队列服务,用于解耦服务,支持 A2A 通信和消息保留。
SNS是一种基于推送的实时消息通知服务,支持 A2A 和 A2P 通信。
继续阅读以获得更详细的解释,包括用例、架构图和最佳实践!
什么是 Amazon SQS?
Amazon Simple Queue Service (SQS) 是一种完全托 亚马逊数据库 管的消息队列服务,可促进软件组件之间的通信。SQS 使用队列来解耦微服务,使您能够在应用程序中创建异步工作流。
SQS 涉及三个核心组件:
生产者:这些是向队列发送消息的应用程序。
队列:队列存储消息,直到它们被处理。这些消息的保留期可以设置为 60 秒到 14 天之间的任何时间。
消费者:这些是从队列接收消息的服务。
Amazon SQS 架构图
Amazon SQS 架构图,包括主要组件。图片由作者提供。
SQS 提供两种类型的消息队列:
标准队列提供无限吞吐量、至少一次传送(即,始终会传送消息)和尽力而为排序。
FIFO 队列提供高吞吐量、一次性处理和先进先出传输(即,消息按照发送的准确顺序接收)。
有关这些队列的更多信息,请访问AWS 文档。
Amazon SQS 具有消息持久性设计,可以安全地存储所有消息,直到它们被处理为止,从而确保不会丢失消息。SQS 首先允许多次重试来处理给定的消息。如果在用尽所有尝试后仍无法处理某条消息,您可以将未处理的消息存储在死信队列中,然后可以对其进行检查和重新处理。
通过分离应用程序,Amazon SQS 具有许多优势。它可容纳高消息吞吐量,即使在流量负载较大的情况下也能确保高性能。此外,它还提供独立的扩展,确保每项服务根据其各自的需求获得足够的资源。它还通过加密消息并将其存储在多个服务器中来增强安全性和耐用性。
要了解有关此排队系统的更多信息,请查看我们的SQS 综合教程。
成为一名数据工程师
通过高级 Python 学习成为数据工程师
什么是 Amazon SNS?
Amazon Simple Notification Service (SNS) 是一种完全托管的消息传递服务,支持应用程序到应用程序 (A2A) 和应用程序到人 (A2P) 通信。它专为实时通知而设计,以可扩展且高效的方式向应用程序和最终用户传递消息。
与 SQS 类似,Amazon SNS 通过允许用户创建死信队列来存储无法处理的消息来支持消息持久性。
Amazon SNS 使用发布/订阅 (pub/sub) 消息传递模型,包含 3 个部分:
发布者:发布者是创建并向 SNS 主题发送消息的系统。
主题:主题是一个访问点,可以将消息传递到多个端点。
订阅者:订阅者或消费者是从主题接收消息的端点。
发布订阅系统架构图
SNS 消息传递模型架构图。图片来源:AWS
SNS 性能卓越,可以同时向多个订阅者发送消息。对于 A2A 通信,SNS 可以将消息传递到 AWS Lambda、Amazon Kinesis Firehose 甚至 Amazon SQS。对于 A2P 通信,SNS 可以通过文本、电子邮件或推送通知直接向用户发送消息。
如果您想掌握 AWS 并能够集成其多项服务来创建最佳解决方案,请考虑参加AWS 云技术和服务课程。
警报系统、扇出架构和实时通知等功能有助于 Amazon SNS 实现高稳健性和可靠性。由于其高消息吞吐量和 A2A 和 A2P 通信容量,SNS 通常是事件驱动架构中不可或缺的组件。
SQS 和 SNS 之间的核心区别
在 SQS 和 SNS 之间进行选择需要充分了解这些消息传递服务之间的差异。本节概述了区分两者的主要标准。
推送与基于投票
Amazon SQS 使用轮询系统,消费者定期轮询队列以检查是否有新消息。
Amazon SNS 是一种基于推送的系统,它会在某个主题上发布消息后立即自动将消息推送给订阅者。
收件人类型
Amazon SQS 仅支持 A2A 通信,可以将消息发送到其他 AWS 服务,例如 AWS EC2、AWS Lambda、AWS RDS 和 AWS Redshift。
Amazon SNS 支持 A2A 和 A2P 通信,以订阅者身份向 AWS 服务(例如 AWS S3、AWS EC2)和用户联系人(例如 SMS 和电子邮件)发送消息。