什么是 SQS?17 Mar 2025 | 5 分钟阅读 - SQS 代表 简单队列服务 (Simple Queue Service)。
- SQS 是 AWS 中提供的第一个服务。
- Amazon SQS 是一项 Web 服务,允许您访问消息队列,该队列可用于存储消息,等待计算机处理它们。
- Amazon SQS 是一个分布式队列系统,使 Web 服务应用程序能够快速可靠地对应用程序中一个组件生成的消息进行排队,以便由另一个组件使用,其中队列是等待处理的消息的临时存储库。
- 借助 SQS,您可以在软件组件之间发送、存储和接收任意数量的消息,而不会丢失消息。
- 使用 Amazon sqs,您可以分离应用程序的组件,以便它们可以独立运行,从而简化组件之间的消息管理。
- 分布式应用程序的任何组件都可以将消息存储在队列中。
- 消息可以包含多达 256 KB 的任何格式的文本,例如 json、xml 等。
- 应用程序的任何组件稍后都可以使用 Amazon SQS API 以编程方式检索消息。
- 队列充当生成和保存数据的组件与接收数据进行处理的组件之间的缓冲区。 这意味着队列解决了生产者产生的工作速度快于消费者处理它的问题,或者生产者或消费者仅间歇性地连接到网络的问题。
- 如果您有两个 EC2 实例正在提取 SQS 队列。 如果消息数量超过某个限制,您可以配置自动缩放组。 假设消息数量超过 10,那么您可以添加额外的 EC2 实例以更快地处理作业。 通过这种方式,SQS 提供了弹性。
让我们通过一个例子来理解。 
让我们看一下生成 Meme 的网站。 假设用户想要上传照片并想要将其转换为 Meme。 用户在网站上上传照片,网站可能会将照片存储在 s3 中。 一旦上传完成,它会触发一个 Lambda 函数。 Lambda 分析有关此特定图像的数据到 SQS,此数据可以是“meme 的顶部应该说什么”、“meme 的底部应该说什么”、S3 存储桶的位置等。 数据位于 SQS 中作为消息。 EC2 实例查看消息并执行其作业。 EC2 实例创建一个 Meme 并将其存储在 S3 存储桶中。 一旦 EC2 实例完成了它的作业,它就会返回到 SQS。 最好的事情是,如果您丢失了 EC2 实例,那么您也不会丢失作业,因为作业位于 S3 存储桶中。 让我们看另一个 SQS 的例子,即旅游网站。 
假设用户想查找一个旅游套餐,并希望查看最好的航班。 用户在浏览器中输入一个查询,然后点击 EC2 实例。 EC2 实例查看“用户在寻找什么?”,然后将消息放入队列到 SQS。 EC2 实例提取队列。 EC2 实例不断提取队列并寻找要完成的作业。 一旦它得到作业,它就会处理它。 它询问航空公司服务以获取所有可能的最佳航班。 它将结果发送到 Web 服务器,Web 服务器将结果发送回用户。 然后用户根据他或她的预算选择最好的航班。 如果我们没有 SQS,会发生什么? Web 服务器将信息传递给应用程序服务器,然后应用程序服务器查询航空公司服务。 如果应用程序服务器崩溃,则用户会丢失其查询。 SQS 的一个优点是,即使应用程序服务器崩溃,数据也会在 SQS 中排队,队列中的消息在超时间隔窗口中被标记为不可见。 当超时时间用完时,消息会重新出现在队列中; 然后一个新的 EC2 实例可以使用此消息来执行其作业。 因此,我们可以说 SQS 删除了应用程序服务器依赖项。 队列类型 有两种类型的队列  - SQS 提供标准队列作为默认队列类型。
- 它允许您每秒进行无限次事务。
- 它保证消息至少传递一次。 但是,有时可能会以乱序方式传递多条消息的多个副本。
- 它提供尽力而为的排序,这确保消息通常以与发送时相同的顺序传递,但它不提供保证。
 - FIFO 队列补充了标准队列。
- 它保证排序,即它们发送的顺序也以相同的顺序接收。
- 队列最重要的特征是 FIFO 队列和精确一次处理,即一条消息只传递一次,并且保持可用状态,直到使用者处理并将其删除。
- FIFO 队列不允许将重复项引入队列中。
- 它还支持消息组,这些消息组允许在单个队列中存在多个有序的消息组。
- FIFO 队列每秒限制为 300 个事务,但具有标准队列的所有功能。
SQS 可见性超时- 可见性超时是阅读器提取该消息后,消息在 SQS 队列中不可见的时间量。
- 如果提供的作业在可见性超时到期之前得到处理,则该消息将从队列中删除。 如果作业未在该时间内处理,消息将再次可见,另一个阅读器将对其进行处理。 这可能会导致同一消息被传递两次。
- 默认可见性超时为 30 秒。
- 如果您的任务超过 30 秒,则可以增加可见性超时。
- 最大可见性超时为 12 小时。
要记住的重要点 - SQS 是基于拉取的,而不是基于推送的。
- 消息大小为 256 KB。
- 消息在队列中保留 1 分钟到 14 天。
- 默认保留期为 4 天。
- 它保证您的消息至少会被处理一次。
|