队列类型

Amazon SQS 针对不同应用程序要求提供了两种队列类型:

标准队列

无限吞吐量:标准队列支持每个 API 操作几乎无限数量的每秒事务数 (TPS)。

至少一次传递:消息至少传送一次,但偶尔会传送消息的多个副本。

最大努力排序:消息偶尔可能按不同于其发送时的顺序传递。

FIFO 队列

高吞吐量:默认情况下,FIFO 队列每秒支持最多 300 条消息(每秒 300 次发送、接收或删除操作)。如果每个操作批处理 10 条消息(上限),则 FIFO 队列每秒支持最多 3000 条消息。要请求提高上限,请登记支持请求

一次性处理:消息传递一次并在使用者处理并删除它之前保持可用。队列本身不会引入重复消息。

先进先出传递:严格保留消息的发送和接收顺序(即先进先出)。

sqs-what-is-sqs-standard-queue-diagram
sqs-what-is-sqs-fifo-queue-diagram

只要应用程序能够处理多次传送和不按顺序传送的消息,就会有多种场景可以使用标准消息队列,例如:

  • 将实时用户请求从密集的后台工作中解耦:让用户在调整媒体大小或对媒体编码时上传媒体。
  • 将任务分配给多个工作程序节点:处理大量信用卡验证请求。
  • 将消息分批以便进一步处理:计划要添加到数据库的多个条目。

FIFO 队列旨在当操作和事件的顺序至关重要时,或者在不能容忍重复的情况下增强应用程序之间的消息收发,例如:

  • 确保按正确的顺序执行用户输入的命令。
  • 通过按正确的顺序发送价格修改来显示正确的产品价格。
  • 防止学员在注册账户之前参加课程。

功能

  • 无限的队列和消息:在任何区域中创建无限数量的 Amazon SQS 队列,并且消息数量不受限制
  • 负载大小:消息负载可包含最多 256 KB 的任意格式的文本。每 64 KB“区块”的已发布数据以 1 次请求计费。例如,1 次负载为 256 KB 的 API 调用将以 4 次请求计费。要发送大小超过 256KB 的消息,您可以使用适用于 Java 的 Amazon SQS 扩展客户端库,它采用 Amazon S3 来存储消息负载。可使用 SQS 发送消息负载的引用。
  • 批处理:批量发送、接收或删除消息,每批最多 10 条消息或 256 KB。批消息与单条消息的消耗量相同,这意味着对于使用批消息的客户而言,SQS 更具成本效益。
  • 长轮询在尽可能快地接收新消息的时候减少外部轮询,从而实现最低成本。在您的队列为空时,长轮询请求会为下一条消息等待至多 20 秒。长轮询请求和普通请求的消耗量相同。
  • 可将消息在队列中最多保留 14 天。
  • 同时发送和读取消息。
  • 消息锁定:收到消息后,在处理期间它会变为“锁定”状态。这可防止其他计算机同时处理该消息。如果消息处理失败,锁定会过期,而消息也重新变为可用。
  • 队列共享:匿名或使用特定 AWS 账户安全共享 Amazon SQS 队列。队列共享还可按 IP 地址和一天中的时刻进行限制。
  • 服务器端加密 (SSE):使用由 AWS Key Management Service (AWS KMS) 托管的密钥来保护 Amazon SQS 队列中的消息内容。只要 Amazon SQS 收到消息,SSE 就会对其进行加密。这些消息以加密的形式进行存储,且仅当它们发送到授权的客户时,Amazon SQS 才会对其进行解密。
  • 死信队列 (DLQ):处理具有死信队列的用户未成功处理的消息。当超出消息的最大接收数时,消息将会移动到与原队列相关的 DLQ 中。为 DLQ 设置单独的用户进程,以便帮助分析和理解消息卡住的原因。DLQ 的类型必须与来源队列 (标准队列或 FIFO 队列) 相同。

将 Amazon SQS 和其他 AWS 基础设施 Web 服务一起使用

Amazon SQS 消息队列可以和其他 AWS 服务(例如 RedshiftDynamoDBRDSEC2ECSLambdaS3)结合使用,从而让分布式应用程序更可靠、可扩展性更强。以下是一些常见的设计模式:

  • 工作队列:分离分布式应用程序的组件,这些组件可能没有同时处理相同的工作量。
  • 缓冲和批操作:增加您的架构的可扩展性和可靠性,在平滑处理临时容量峰值的同时不丢失消息或增加延迟。
  • 请求卸载:通过排列请求的方式,将慢操作从互动请求中移除。
  • 扇出合并 SQS 和 Simple Notification Service (SNS),将消息的相同副本并行发送给多个队列。
  • 优先级:使用单独的队列来提供工作的优先级。
  • 可扩展性:由于消息队列会分离您的进程,因此可以轻松扩展消息的发送或接收速率 - 只需添加另一个进程即可。
  • 弹性:当您的系统部分出现故障时,无需关闭整个系统。消息队列会分离系统组件,因此如果某个从队列中读取消息的流程出现故障,那么在系统恢复后仍然可以将消息添加到该队列进行处理。

预期用途和限制

您对本服务的使用受 Amazon Web Services 客户协议的约束。

详细了解 Amazon SQS 定价

访问定价页面
准备好开始构建?
开始使用 Amazon SQS
还有更多问题?
联系我们