AWS - 简单队列服务 (SQS) 详解

Amazon Simple Queue Service (SQS) 简介

Amazon Simple Queue Service (SQS) 是一项完全托管的消息队列服务,它能够帮助我们解耦、扩展微服务、分布式系统和无服务器应用程序。

  • 在现代云架构中,不同的应用组件(例如 Web 服务器和图像处理工作线程)需要相互通信。
  • 如果一个组件繁忙、响应缓慢或暂时宕机,直接通信可能会导致失败。
  • 为了避免这种情况,我们不应直接发送数据,而是将消息发送到 SQS 队列中。
  • SQS 队列充当缓冲区,安全地保存这些消息。
  • 接收服务一旦可用,就会处理这些消息。

SQS 工作原理:核心生命周期

要理解 SQS,我们需要了解消息在系统中流转的生命周期。

1. 生产者发送消息: “生产者”(例如我们的 Web 服务器)向 SQS 队列发送一条消息。该消息本质上是一个文本有效负载(JSON、XML 或纯文本),大小上限为 256 KB
2. 消息存储: SQS 跨多个 SQS 服务器冗余存储该消息。它会一直保存在那里,直到消费者准备就绪。
3. 消费者轮询: “消费者”(例如 EC2 实例或 Lambda 函数)从队列中请求消息。
4. 可见性超时(飞行中): 当消费者接收到一条消息时,SQS 不会立即删除它。相反,它会启动一个可见性超时(默认为 30 秒)。在此期间,该消息对其他消费者是“不可见”的。这可以防止多个服务器同时处理同一条消息。
5. 处理与删除:

  • 成功: 如果消费者成功处理了消息,它会发起 API 调用从队列中删除该消息。这标志着生命周期的结束。
  • 失败: 如果消费者崩溃,或者未能在可见性超时到期前删除消息,该消息将再次变为“可见”。然后,另一个消费者可以接收它并重试。

!AWS-SQS

AWS SQS 架构

在分布式消息传递系统中,涉及三个主要元素:系统组件、队列(分布在 Amazon SQS 服务器上)以及存储在队列中的消息。在此场景中,我们的系统包含多个生产者(向队列发送消息)和消费者(从队列中检索消息)。队列跨多个 Amazon SQS 服务器存储消息(例如 A, B, C, D 和 E),以确保冗余性和高可用性。

!Amazon SQS ArchitectureAWS SQS Architecture

SQS 的核心特性

1. 死信队列 (DLQ)

DLQ 是一个辅助队列,当消息在尝试设定次数(例如 5 次)后仍无法处理成功时,SQS 会自动将其移至此处。这可以防止“毒丸”消息(即导致应用程序崩溃的错误数据)永久阻塞我们的队列。随后,我们可以检查 DLQ 以手动调试问题。

2. 长轮询 与 短轮询

  • 短轮询(默认): 即使队列为空,SQS 也会立即返回响应。这可能导致返回空响应并增加成本。
  • 长轮询(推荐): SQS 会等待(最多 20 秒)消息到达,然后再发送响应。如果消息到达,它会立即发送。请始终启用长轮询(设置 WaitTimeSeconds > 0),以节省费用并减少无效的 API 调用。

3. 延迟队列

我们可以配置一个队列,将所有新消息的传递延迟特定的时间段(最长 15 分钟)。如果我们的应用程序在处理任务前需要一段“冷静”期,这非常有用。

4. 批处理

为了节省成本并提高性能,我们可以批量发送、接收和删除消息,每次 API 调用最多可处理 10 条消息。就计费而言,这仅被视为一次请求。

AWS SQS 的生命周期

以下是 Amazon SQS 消息生命周期的概述,从其在队列中创建到最终被删除。

!lifecycle-of-an-Amazon-SQSLife Cycle of SQS

逐步创建 SQS 队列 (Amazon Simple Queue Service)

请按照以下步骤使用 AWS 控制台创建 SQS 队列:

步骤 1: 打开 AWS 控制台,在搜索栏中输入“SQS”并选中。如果您需要了解如何创建 AWS 账户,请参考 Amazon Web Services (AWS) – 免费套餐账户设置

!Amazon Console

步骤 2: 点击“Create queue”(创建队列)。您应该会看到以下屏幕:

!Create Queue

每个字段都有一个 Info(信息)条款。如果您感兴趣,可以点击它并阅读相关内容。

步骤 3: 将队列命名为 ‘geeky_queue‘,然

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/29105.html
点赞
0.00 平均评分 (0% 分数) - 0