[ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择

news2024/11/23 11:05:22

在这里插入图片描述

文章目录

    • 一、前言
    • 二、Amazon SNS 服务(Amazon Simple Notification Service)
    • 三、Amazon SQS 服务(Amazon Simple Queue Service)
    • 四、SNS 与 SQS 的区别(本文重点
      • 4.1 基于推送和轮询区别
      • 4.2 消费者数量对应关系不同
      • 4.3 消费者类型的不同
      • 4.4 持久性不同
      • 4.5 可靠性重试策略不同
      • 4.6 批处理数量不同
    • 五、如何选择 SNS 与 SQS 服务
    • 六、SNS 与 SQS 服务使用案例
      • 6.1 社交网络服务云监控警报(SNS 案例)
      • 6.2 处理选票案例(SQS 案例)
      • 6.3 SNS 和 SQS 的组合 - 扇出模式
    • 七、文末总结

一、前言

AWS 提供许多出色的消息传递服务。他们最著名的两项服务是 Amazon Simple Notification Service (SNS) 和 Amazon Simple Queue Service (SQS)。虽然两者的使用方式非常相似,但它们是完全不同的服务。

这篇博文将向您解释相同点、不同点以及如何选择哪种服务。最后,我将向您展示一些示例用例和一种常见的事件驱动模式。

二、Amazon SNS 服务(Amazon Simple Notification Service)

Amazon 的 SNS 是一项完全托管的发布和订阅服务。发布者向某个主题发送消息,并且许多消费者/订阅者订阅了该主题。这种关系是多对多的。一个主题可以有多个发布者和多个订阅者。

在这里插入图片描述

SNS 在发送方式上有所区别。它可以是应用程序到应用程序A2A应用程序到个人A2P

  • 应用程序到应用程序(Application to Application A2A)目的地是:

    • AWS Lambda
    • 亚马逊SQS
    • 亚马逊 Kinesis Data Firehose
    • AWS 事件分支管道
    • HTTP 端点
  • 应用到个人(Application to Person A2P)目的地是:

    • 短信
    • 电子邮件
    • 应用内通知
    • AWS 聊天机器人
    • 寻呼机任务

SNS 性能超强。消息将在几毫秒内发布。

一种常见的模式是扇出模式(fan-out pattern),它允许将一个事件扇出到 AWS 内的各个订阅者。稍后我将在用例部分更详细地介绍该模式。

SNS 允许标准主题或 FIFO 主题。 FIFO 主题有消息排序,而标准主题则没有消息排列。对于 FIFO 主题,有更严格的限制!

三、Amazon SQS 服务(Amazon Simple Queue Service)

AWS SQS 是一种完全托管的分布式排队服务。 SQS 是基于轮询的,而不是基于推送的。即使它通常看起来像是一个基于推送的系统,但事实并非如此。 Amazon SQS 通常用于将系统相互解耦并启用异步工作负载

在这里插入图片描述

Amazon SQS 的主要模式是让生产者将消息发送到队列。消息在队列中保留一段定义的时间(默认为 4 天,最多 14 天)。消费者可以通过检查队列是否有新消息来按照自己的时间表获取消息。

如果消费者处理消息,如果成功,该消息将被删除。否则,它也可能被其他消费者捡起。

SQS 通过其重新驱动策略提供了许多重试消息的功能。您可以定义重试次数和死信队列,以防消息失败。 死信队列 (DLQ) 用于处理有错误的消息。如果消息无法处理,它们将被发送到 DLQ,以通知应用程序开发人员有关问题的信息,并可选择保存消息以在原始队列中重播。

在 AWS 中,DLQ 指的是“Dead Letter Queue”(死信队列)。它是一种用于处理消息系统中处理失败消息的机制。当消息因某种原因无法被消费者成功处理时,这些失败的消息通常会被发送到死信队列中。这种机制通常用于消息队列服务(比如 Amazon SQS - Simple Queue Service 或者 Amazon SNS - Simple Notification Service)中,以确保失败的消息不会丢失,并且可以被进一步分析或重新处理。

死信队列有助于识别处理失败的消息,可以对失败的消息进行分析、排查原因,并采取适当的措施,比如重新处理消息或者通知相关人员进行干预。

SQS 具有多对一的关系。您可以将消息从许多不同的生产者发送到队列,但只能定义一个消费者。消费者是另一个应用程序,通常是一些计算实例,例如 Lambda、EC2 或 Fargate。

有两种不同类型的队列:标准队列和先进先出(FIFO)队列。后者将使消息保持有序。

四、SNS 与 SQS 的区别(本文重点

我们知道这两种服务都以某种方式处理消息。这两种服务都可以实现更好的解耦。后端API和后台逻辑的执行是松耦合的,不再有联系。

但也存在显着差异。让我们来看看所有这些对比表格

SNSSQS
推送/轮询的差异推送轮询
消费者数量对应关系多对多多对一
消费者类型A2A 或 A2PA2A
持久性
可靠性/重试
批处理

下面对于 SNS 与 SQS 的区别进行详细说明一下

4.1 基于推送和轮询区别

主要区别在于服务的基础。 SQS 是基于轮询的,SNS 是基于推送的服务。

这意味着 SNS 只是将所有消息转发给订阅的消费者,而 SQS 确实将消息保存在队列中并等待它们被获取。这是各个方面的显着差异。例如,SQS 架构中的延迟会稍高一些,因为仍然需要考虑轮询。另一方面,SQS 的持久性和可靠性要好得多,因为消息会在短时间内正确保存。

4.2 消费者数量对应关系不同

第二个区别是关系的类型。两种服务都可以接收来自不同生产者的消息。这意味着这两项服务具有多对x关系。

主要区别在于 SNS 可以有很多订阅者,而 SQS 只能有一个消费者

SNS 订阅者的当前限制为每个主题 12,500,000 名订阅者。可以说是非常多!这意味着您可以有很多消费者来处理您的消息。

另一方面,SQS 只能有一个消费者。该消费者正在处理该消息,然后删除该消息。

4.3 消费者类型的不同

SNS 将消息发送到应用程序或直接发送到个人,或两者都有。这意味着它支持各种不同的消费者类型。

另一方面,SQS 消息通常会使用 SQS API 来获取。因此每个支持 AWS SDK 的客户端都可以使用它。通常,队列中的消息将从 AWS Lambda 获取,因为存在与 SQS 和 Lambda 的本机集成。但也可以使用 SQS API 简单地拾取和删除消息。也可以在本地 PC 上进行操作。

4.4 持久性不同

SQS 中的消息将保存一段时间。这称为保留期。保留期限可以在 1 分钟到 14 天之间,默认值为 4 天。如果在该时间范围内未收到该消息,该消息将被自动删除。

然而,在SNS中,不存在持久性。无法保证消息一定会送达。如果消费者不可用,则消息将不会被传递。

这可以对可靠性产生很大的影响。例如,如果消费者在 SNS 中不可用,则消息将不会被传递。或者,如果消费者没有成功结束,消息就会消失。 SQS 增加了很多可靠性。扇出模式可用于将两者结合起来,但稍后会详细介绍该部分。

4.5 可靠性重试策略不同

在这里插入图片描述

SQS 能够添加重新驱动策略。此策略定义在将失败的消息移至死信队列(DLQ)之前应重试多少次。 DLQ 处理失败的消息。例如,可以将失败的消息保存在存储桶中并通知开发人员。

当客户端失败时,SNS 不提供重试。如果消费者不可用或消费者无法处理消息(例如,推送通知无法通过),则无法重复该消息。这是由于 SNS 的异步特性造成的。

4.6 批处理数量不同

在这里插入图片描述

SQS 允许你批量将多条消息合并为一条消息。您可以定义参数batch_size。对于标准队列,批量大小最多可以为 10,000 条记录;对于 FIFO 队列,批量大小最多可以为 10 条。

SNS 一次只能处理一条消息,因此无法进行批处理。

冷知识(12/29/2023 23:40 更新)无论是SNS,还是 SQS 都有消息大小限制,消息体大小不能超过 256KB。
标准队列(Standard Queue):

  • 最大消息大小为 256KB(以二进制计量),其中包括消息体、属性和标签。

FIFO 队列:

  • 最大消息大小为 256KB(以二进制计量),与标准队列相同。 此外,FIFO 队列还有 5 条限制条件:发送者 ID、消息分组
  • ID、消息去重 ID、消息属性和延迟发送消息属性的总大小不得超过 256KB。

五、如何选择 SNS 与 SQS 服务

如果你是架构师,在设计架构的时候,对于 SNS 与 SQS 服务应该如何选择呢,或者说,我什么时候选择 SNS,什么时候选择 SQS。

下面是根据自身经验,总结的一些一般建议:

如果出现以下情况,请使用 SNS:

  • 你有很多订阅者
  • 你需要向消费者发送短信、电子邮件或应用程序通知类型
  • 你想要使用扇出模式同时向许多订阅者发送消息(稍后会详细介绍)

如果出现以下情况,请使用 SQS:

  • 你只需要一名订阅者
  • 持久性和错误处理非常重要(每条消息都需要传递)
  • 你需要批量处理你的请求
  • 你只想解耦应用程序并启用异步后台处理

六、SNS 与 SQS 服务使用案例

为了方便大家理解,这里列举几个SNS 与 SQS 服务使用案例。

6.1 社交网络服务云监控警报(SNS 案例)

例如一个警报将会被触发,你想要向 10 个不同的电子邮件地址发送消息,并向一些手机发送短信。持久性、批处理和重试并不重要。这种场景非常可能在 SAA/SAP 认证考试中提出来,所以你要知道使用什么服务。

在这里插入图片描述

6.2 处理选票案例(SQS 案例)

你的应用程序以同步方式执行所有任务,并且你的用户需要等待 API 返回。通过添加 SQS 队列,你可以运行后台任务并解耦整个应用程序。 你需要同时处理大量消息。 SQS 可以通过批量处理所有消息来解决这个问题。

在这里插入图片描述

你主持了一场创业秀,同时获得了大量的选票。你需要处理这些投票。让你的 API 处理所有这些事情是不可行的,并且你不希望您的用户等待处理它们所需的时间。

你可以使用 SQS 来实现这一点。当用户投票时,你的 API 会向 SQS 发送一条消息。你的 API 将向最终用户返回 200 OK,最终用户会获得超快的响应。

实际的业务逻辑是解耦的。 SQS 和 Lambda 将处理剩下的事情。在这种情况下,许多消息将被批处理在一起,并且将生成许多 lambda 函数。这就是可扩展性的例子。

6.3 SNS 和 SQS 的组合 - 扇出模式

到目前为止,在本文中,我们已经将 SNS 和 SQS 视为两种不同的服务。有一种常见的模式将这两种服务结合在一起。这称为扇出模式

扇出模式描述了发布到 SNS 的消息将同时发送到多个端点的场景。对于这样的模式,一条消息可能会触发多次执行。这允许异步处理。

这里列举一个社交媒体网络的案例:

在这里插入图片描述

假设你现在在一个论坛媒体发送帖子,对于发布的每个帖子,可能需要采取多项操作的地方:

  • SQS 队列 1:将帖子翻译成不同语言
  • SQS 队列 2:将帖子转换为音频
  • SQS 队列 3:更新用户统计信息(帖子数量)
  • 电子邮件:通知关注者有新帖子
  • 应用消息通知:通知关注者有关新帖子的信息

七、文末总结

本文向您介绍了 AWS 服务 Amazon Simple Queue Service (SQS) 和 Amazon Simple Notification Service (SNS)。这些服务构建了许多分布式和解耦应用程序的基础。

SNS 是多对多的发布/订阅模型,适合多订阅者和通知类消息。相反,SQS 是基于队列的多对一模型,重视消息持久性和可靠性。文中提供了选择服务的指南,包括适用场景和使用案例。文章最后介绍了扇出模式,即如何结合使用 SNS 和 SQS,以实现消息同时发送到多个端点。

该服务已存在多年,是 AWS 的主要支柱之一。 使用这些服务构建可靠且高性能的应用程序至关重要。

[ 本文作者 ]   bluetata
[ 原文链接 ]   https://bluetata.blog.csdn.net/article/details/135293801
[ 最后更新 ]   12/29/2023 18:18
[ 版权声明 ]   如果您在非 CSDN 网站内看到这一行,
说明网络爬虫可能在本人还没有完整发布的时候就抓走了我的文章,
可能导致内容不完整,请去上述的原文链接查看原文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1343804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年PMP考试新考纲-PMBOK第七版-【模型、方法和工件】真题解析

今天我们继续来看第七版PMBOK的考题,前面已经介绍了新考纲下最近几年价值交付系统、项目管理原则、项目绩效域、裁剪方面的部分真题和详细解析,今天来看PMBOK第七版的第四部分【模型、方法和工件】这个章节相关的真题。 PMBOK第七版中专门把模型、方法和…

在markdown中添加视频的两种方法

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 方式一源代码: 方式二结尾语网络的梦想 markd…

Android MVC 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 Controller:负责业务逻辑 持有关系: 1、View 持有 Controller 2、Controller 持有 Model 3、Model 持有 View 辅助工具:ViewBinding 执行流程:View >…

STM32CubeMX教程8 TIM 通用定时器 - 输出比较

目录 1、准备材料 2、实验目标 3、实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.1、外设初始化函数调用流程 3.2.2、外设中断函数调用流程 3.2.3、添加其他必要代码 4、常用函数 5…

云服务器ECS运维管理

目录 实时掌握CPU、内存使用情况 实时掌握存储的使用情况 定期对云服务器数据做好备份 定期检查云服务器的安全运行情况 要想保证云服务器长期稳定的使用,除了依靠阿里云(云服务提供商)的技术支持,自身必要的安全维护手段也是…

Halcon区域生长的几种算法regiongrowing/regiongrowing_mean/watersheds

Halcon区域生长的几种算法 文章目录 Halcon区域生长的几种算法1. regiongrowing 算子2. regiongrowing_mean算子3. 分水岭算法 如果想要获得具有相似灰度的相连区域,可以使用区域生长法寻找相邻的符合条件的像素。区域生长法的基本思想是,在图像上选定一…

Zookeeper之手写一个分布式锁

前言 我之前写了一篇快速上手ZK的文章:https://blog.csdn.net/qq_38974073/article/details/135293106 本篇最要是进一步加深学习ZK,算是一次简单的实践,巩固学习成果。 设计一个分布式锁 对锁的基本要求 可重入:允许同一个应…

QT/C++ 远程数据采集上位机+服务器

一、项目介绍: 远程数据采集与传输 课题要求:编写个基于TCP的网络数据获取与传输的应用程序; 该程序具备以下功能: 1)本地端程序够通过串口与下位机(单片机)进行通信,实现数据采集任务 2)本地端程序能将所获取下位机数据进行保存(如csv文本格式等); 3…

JavaWeb——前端之JSVue

接上篇笔记 4. JavaScript 概念 跨平台、面向对象的脚本语言,使网页可交互与Java语法类似,但是不需要变异,直接由浏览器解析1995年Brendan Eich发明,1997年成为ECMA标准(ECMA制定了标准化的脚本程序设计语言ECMAScr…

Mysql5.7主从数据库同步失败(日记文件错误)解决记录

记录一次Mysql主从数据库同步失败(日记文件错误)解决记录 查看同步状态: 具体错误: 检查mysql数据库日记 2021-06-10T03:45:43.522398Z 1 [ERROR] Error reading packet from server for channel : event read from binlog did not pass crc check; the…

NFC与ZigBee技术在智慧农业物联网监测系统中的应用

近年来,我国农业物联网技术飞速发展,基于物联网技术的智能农业监测系统有望得到较大规模的推广应用。但传统的物联网农业监测系统其网络结构层次单一,多采用基于有线或无线结构的节点-上位机数据采集模式,节点数据访问模式缺乏灵活…

音频、视频插座

音频、视频插座 常用电子元器件类型 DC电源插座 文章目录 音频、视频插座前言一、音频、视频插座二、DC电源插座1. 镀铜锡DC插座2. 镀镍DC插座总结前言 音频和视频插座在设计上具有特定的接口类型和标准,以确保兼容性和信号传输的质量。在选择插座时,需要根据设备的接口类…

云计算:OpenStack 配置云主机实例的存储挂载并实现外网互通

目录 一、实验 1. 环境 2.配置存储挂载 3.云主机实例连接外部网络(SNAT) 4.外部网络连接云主机实例(DNAT) 二、问题 1.云主机 ping 不通外部网络 2.nova list 查看云主机列表报错 3.nova list 与 virsh list --all有何区…

【音视频 ffmpeg 学习】 RTMP推流 mp4文件

1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。 2.RTMP协议中基本的数据单元称为消息(Message)。 3.当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk&#xff…

docker-compose Install TeamCity

前言 TeamCity 是一个通用的 CI/CD 软件平台,可实现灵活的工作流程、协作和开发实践。允许在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 系统支持 docker download TeamCity TeamCity 文档参考项目离线包百度网盘获取

Spring Boot学习随笔- 集成MyBatis-Plus,第一个MP程序(环境搭建、@TableName、@TableId、@TableField示例)

学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 引言 MyBatis-Plus是一个基于MyBatis的增强工具,旨在简化开发,提高效率。它扩展了MyBatis的功能,提供了许多实用的特性,…

Qt/C++音视频开发62-电子放大/按下选择区域放大显示/任意选取区域放大

一、前言 电子放大这个功能思考了很久,也是一直拖到近期才静下心来完整这个小功能,这个功能的前提,主要得益于之前把滤镜打通了,玩出花样来了,只要传入对应的滤镜字符串,就可以实现各种各样的效果&#xf…

学习笔记:R语言基础

文章目录 一、R语言简介二、选择R的原因三、R基本数据对象(一)向量(二)矩阵(三)数组(四)因子(五)列表(六)数据框(七&#…

LLM之RAG实战(十一)| 使用Mistral-7B和Langchain搭建基于PDF文件的聊天机器人

在本文中,使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序,可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few-…

数据结构入门到入土——ArrayList与顺序表

目录 一,线性表 二,顺序表 1.接口实现 三,ArrayList简介 四,ArrayList使用 1.ArrayList的构造 2.ArrayList常见操作 3.ArrayList的遍历 4.ArrayList的扩容机制 五,ArrayLisit的具体使用 杨辉三角 一&#x…