当前位置: 首页 > news >正文

SQS (Simple Queue Service)简介

mazon Simple Queue Service (SQS)是一种完全托管的消息队列服务,可以让你分离和扩展微服务、分布式系统和无服务应用程序。

在讲解SQS之前,首先让我们了解一下什么是消息队列。

消息队列

还是举一个电商的例子,一个用户在电商网站下单后付款后,应用服务器马上查询/更新数据库,连接支付网关并查询支付状态,通知短信/邮件网关发送相关短信/邮件,更新库存系统,更新物流系统……最后返回信息给用户,“您的下单已成功”。

但是如果网站的访问数很大,或者正值促销活动(比如淘宝双11,京东618)呢?

这个时候每一个流程都是一个瓶颈,一旦某一个地方达到了瓶颈或者出现故障,又或者用户下单的时间比程序处理订单的时间还要久的情况下,都会让用户得不到成功下单的结果,或者得到结果的时间非常长,导致用户体验不好。

这个时候,我们就要考虑到应用程序的解耦(decouple)

我们可以引入消息队列,让不同的应用程序之间打断强连接的关系,互不干扰。

应用服务器在接收到用户付款的订单之后,就把相关的信息丢到消息队列,并且返回用户“您的下单已成功,请稍后查看详细订单状态”。

而支付网关、短信/邮件网关、库存系统、物流系统等等可以到消息队列里面拉取信息,并且进行相关的数据更新和操作。

这些操作可能不需要是实时的,但是至少能保证这些队列里的信息最终都会被执行。比如下单后我不一定马上能收到短信/邮件的通知,我可能5分钟/10分钟之后才收到这些信息通知,但这个并不影响正常的业务。

这样子,消息队列就起到了连接上层业务和下层业务的作用。

Amazon SQS相当于提供了一个分布式、高可用、高性能的消息队列服务。

SQS特点

SQS有两种不同类型的队列,它们分别是:

  • 标准队列(Standard Queue)
  • FIFO队列(先进先出队列)

标准队列

标准队列拥有无限的吞吐量,所有消息都会至少传递一次,并且它会尽最大努力进行排序。

标准队列是默认的队列类型。

FIFO队列

FIFO (First-in-first-out)队列在不使用批处理的情况下,最多支持300TPS(每秒300个发送、接受或删除操作)。

在队列中的消息都只会不多不少地被处理一次

FIFO队列严格保持消息的发送和接收顺序

更多关于标准队列和FIFO队列的区别,可以查看我需要哪种类型的队列?

SQS的其他特点

  • SQS是靠应用程序去拉取的,而不能主动推送给应用程序,推送服务我们使用SNS(Simple Notification Service)
  • 消息会以256 KB的大小存放
  • 消息会在队列中保存1分钟~14天,默认时间是4天
  • 可见性超时(Visibility Timeout)
    • 即当SQS队列收到新的消息并且被拉取走进行处理时,会触发Visibility Timeout的时间。这个消息不会被删除,而是会被设置为不可见,用来防止该消息在处理的过程中再一次被拉取
    • 当这个消息被处理完成后,这个消息会在SQS中被删除,表示这个任务已经处理完毕
    • 如果这个消息在Visibility Timeout时间结束之后还没有被处理完,则这个消息会设置为可见状态,等待另一个程序来进行处理
    • 因此同一个消息可能会被处理两次(或以上)
    • 这个超时时间最大可以设置为12小时
  • 标准SQS队列保证了每一个在队列内的消息都至少会被处理一次
  • 长轮询(Long Polling)
    • 默认情况下,Amazon SQS使用短轮询(Short Polling),即应用程序每次去查询SQS队列,SQS都会做回应(哪怕队列一直是空的)
    • 使用了长轮询,应用程序每次去查询SQS队列,SQS队列不会马上做回应。而是等到队列里有消息可处理时,或者等到设定的超时时间再做出回应。
    • 长轮询可以一定程度减少SQS的花销
http://www.lryc.cn/news/38151.html

相关文章:

  • 高速PCB设计指南系列(三)
  • 【C++】C++11——左右值|右值引用|移动语义|完美转发
  • [ROC-RK3399-PC Pro] 手把手教你移植主线Buildroot(基于2023.02-rc3版本)
  • 重温线性代数
  • 2023河北沃克HEGERLS甘肃金昌重型仓储项目案例|托盘式四向穿梭车智能密集存储系统在工业行业的创新应用
  • 软件测试的案例分析 - 闰年5
  • Linux文件基础I/O
  • HTML看这一篇就够啦,HTML基础大全,可用于快速回顾知识,面试首选
  • Altium Designer(AD)软件使用记录05-PCB叠层设计
  • ArcGIS动态表格批量出图
  • ChatGPT真神奇,但是也真焦虑
  • mos管驱动与米勒平台介绍、消除
  • 20230311英语学习
  • 【面试题】Nginx面试题汇总(无解答)
  • Java面试总结(六)
  • Windows逆向安全(一)C与汇编的关系
  • Lazada、Allegro、速卖通测评自养号技术(方法解析)
  • Vue3的composition API—setup函数, ref函数,reactive函数
  • 国外seo比较好的优化方法有哪些?
  • 【JavaEE进阶】——第一节.Maven国内源配置
  • dockerFile编写
  • jenkins扩展你的流水线
  • Golang模糊测试入门
  • ARM uboot 的移植4 -从 uboot 官方标准uboot开始移植
  • 不用索引怎么优化百亿数据? | MySQL性能优化篇
  • JavaScript(WebAPI)
  • idea集成GitHub
  • 软考高级信息系统项目管理师系列之四十一:项目组合管理
  • Spring——Spring整合Mybatis(XML和注解两种方式)
  • 【专项训练】布隆过滤器和LRU缓存