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

在这里插入图片描述

文章目录

    • 一、前言
    • 二、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.rhkb.cn/news/227052.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop之Yarn 详细教程

1、yarn 的基本介绍和产生背景 YARN 是 Hadoop2 引入的通用的资源管理和任务调度的平台,可以在 YARN 上运行 MapReduce、Tez、Spark 等多种计算框架,只要计算框架实现了 YARN 所定义的 接口,都可以运行在这套通用的 Hadoop 资源管理和任务调…

[足式机器人]Part4 南科大高等机器人控制课 CH12 Robotic Motion Control

本文仅供学习使用 本文参考: B站:CLEAR_LAB 笔者带更新-运动学 课程主讲教师: Prof. Wei Zhang 课程链接 : https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch12 Robotic …

uni-appcss语法

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

PPT录制视频的方法,轻松提升演示效果!

在现代工作和学习中,ppt是一种常见的演示工具,而将ppt转化为视频形式更能方便分享和传播。本文将介绍两种ppt录制视频的方法,每一种方法都将有详细的步骤和简要的介绍,通过这些方法,你可以轻松将ppt制作成视频&#xf…

秋招复习篇之代码规范

目录 前言 1、变量命名 2、代码空格 1)操作符左右一定有空格, 2)分隔符(, 和;)前一位没有空格,后一位保持空格,例如: 3)大括号和函数保持同一行,并有一个空格…

双语!性能优越|融合黏菌和差分变异的量子哈里斯鹰算法SDMQHHO

前面的文章里卡卡介绍了哈里斯鹰优化算法(Harris Hawks Optimization, HHO).HHO是 Heidari等[1]于2019年提出的一种新型元启发式算法,设计灵感来源于哈里斯鹰在捕食猎物过程中的合作行为以及突然袭击的狩猎风格,具有需调参数少、原理简单易实现、局部搜索…

4.20 构建onnx结构模型-Reduce

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Reduce 结点进行分析 方式 方法…

002文章解读与程序——中国电机工程学报EI\CSCD\北大核心《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机优化》已提供下载资源

👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆下载资源链接&#x1f4…

Java——猫猫图鉴微信小程序(前后端分离版)

目录 一、开源项目 二、项目来源 三、使用框架 四、小程序功能 1、用户功能 2、管理员功能 五、使用docker快速部署 六、更新信息 审核说明 一、开源项目 猫咪信息点-ruoyi-cat: 1、一直想做点项目进行学习与练手,所以做了一个对自己来说可以完成的…

【Linux系统化学习】进程终止的奥秘

个人主页点击直达:小白不是程序媛 Linux专栏:Liunx系统化学习 代码仓库:Gitee 目录 获取函数返回值 退出码 进程退出的场景 错误码 信号终止异常代码 进程的终止 main函数直接return exit函数 _exit函数 获取函数返回值 在C语言学…

Linux驱动开发学习笔记6《蜂鸣器实验》

目录 一、蜂鸣器驱动原理 二、硬件原理分析 三、实验程序编写 1、 修改设备树文件 (1)添加pinctrl节点 (2)添加BEEP设备节点 (3)检查PIN 是否被其他外设使用 2、蜂鸣器驱动程序编写 3、编写测试AP…

uniapp多级动态表单规则

最近有个新的业务、主要涉及多层级的动态表单提交,其中又涉及很多类型,踩了很多坑之后,终于研发完毕。 传来的数据格式处理 传来的数据格式涉及比较多的内容,以下举例一个,涉及到规则的填写 规则写法有两种&#xff…

数据结构(一)

本文是在原本数据结构与算法闯关的基础上总结得来,加入了自己的理解和部分习题讲解 原活动链接 邀请码: JL57F5 目录 算法和数据结构1、什么是算法?2、什么是数据结构?3、算法和数据结构之间的关系4、时间复杂度5、数据结构 : 什么是数组&#xff1f…

帆软FineBi V6版本经验总结

帆软FineBi V6版本经验总结 BI分析出现背景 ​ 现在是一个大数据的时代,每时每刻都有海量的明细数据出现。这时大数据时代用户思维是:1、数据的爆炸式增长,人们比起明细数据,更在意样本的整体特征、相互关系。2、基于明细的“小…

城市分站优化系统源码:提升百度关键排名 附带完整的搭建教程

城市分站优化已成为企业网络营销的重要手段,今天来给大家分享一款城市分站优化系统源码。 以下是部分代码示例: 系统特色功能一览: 1.多城市分站管理:该系统支持多个城市分站的管理,用户可以根据业务需求,…

Uniapp软件库全新带勋章功能(包含前后端源码)

源码介绍: Uniapp开发的软件库全新带勋章功能,搭建好后台 在前端找到 util 这个文件 把两个js文件上面的填上自己的域名,电脑需要下载:HBuilderX 登录账号 没有账号就注册账号, 然后上传文件,打包选择 “…

企业私有云容器化架构

什么是虚拟化: 虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在70年代的 System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM&#x…

Unity中Shader裁剪空间推导(在Shader中使用)

文章目录 前言一、在Shader中使用转化矩阵1、在顶点着色器中定义转化矩阵2、用 UNITY_NEAR_CLIP_VALUE 区分平台矩阵3、定义一个枚举用于区分当前是处于什么相机 二、我们在DirectX平台下,看看效果1、正交相机下2、透视相机下3、最终代码 前言 在上一篇文章中&…

图像的颜色及Halcon颜色空间转换transfrom_rgb/trans_to_rgb/create_color_trans lut

图像的颜色及Halcon颜色空间转换 文章目录 图像的颜色及Halcon颜色空间转换一. 图像的色彩空间1. RGB颜色 2. 灰度图像3. HSV/ HSI二. Bayer 图像三. 颜色空间的转换1. trans_from_rgb算子2. trans_to_rgb算子3. create_color_trans_lut算子 图像的颜色能真实地反映人眼所见的真…

关于“Python”的核心知识点整理大全51

目录 17.2.2 添加自定义工具提示 bar_descriptions.py 17.2.3 根据数据绘图 python_repos.py 17.2.4 在图表中添加可单击的链接 python_repos.py 17.3 Hacker News API hn_submissions.py 17.4 小结 往期快速传送门👆(在文章最后)&a…