亚马逊SQS队列类型 - Amazon Simple Queue Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊SQS队列类型

Amazon SQS 支持两种类型的队列—— 标准队列和FIFO队列。使用下表中的信息选择适合您情况的队列。要了解有关 Amazon SQS 队列的更多信息,请参阅Amazon SQS 标准队列亚马逊SQSFIFO队列

标准队列 FIFO队列

无限吞吐量 — 标准队列支持每个操作(、或DeleteMessage)的每秒API呼叫数量非常高 SendMessageReceiveMessage,几乎不受限制。这种高吞吐量使其非常适合需要快速处理大量消息的用例,例如实时数据流或大型应用程序。虽然标准队列会根据需求自动扩展,但必须监控使用模式以确保最佳性能,尤其是在工作负载较高的地区。

At-least-once 传@@ — 有保证的传 at-least-once送,这意味着每条消息至少传送一次,但在某些情况下,由于重试或网络延迟,一条消息可能会多次传送。在设计应用程序时,应使用等性操作来处理潜在的重复消息,这样可以确保多次处理同一条消息不会影响系统的状态。

尽力而为订购 — 提供尽力而为的订购,这意味着虽然亚马逊SQS尝试按照发送顺序发送消息,但它不能保证这一点。在某些情况下,消息可能会乱序到达,尤其是在高吞吐量或故障恢复的情况下。对于消息处理顺序至关重要的应用程序,您应该在应用程序中处理重新排序逻辑,或者使用FIFO队列来保证严格的排序。

耐久性和冗余 — 标准队列通过在多个 AWS 可用区存储每条消息的多个副本来确保高耐久性。这样可以确保即使在基础设施出现故障的情况下,消息也不会丢失。

可见性超时 — Amazon SQS 允许您配置可见性超时以控制消息在收到后隐藏多长时间,从而确保其他消费者在消息得到完全处理或超时到期之前不会处理该消息。

高吞吐量-使用处理时,FIFO队列每种API方法(SendMessageBatchReceiveMessageBatch、或DeleteMessageBatch)每秒最多可处理 3,000 条消息。此吞吐量依赖于每秒 300 个API调用,每个API呼叫处理一批 10 条消息。通过启用高吞吐量模式,您可以将每秒 30,000 个事务 () 扩展到每秒 30,000 个事务 (TPS),并在消息组中进行宽松的排序。如果不进行批处理,FIFO队列支持每种API方法(SendMessageReceiveMessage、或DeleteMessage)每秒最多 300 个API调用。如果您需要更高的吞吐量,可以通过 Support Cent er 申请增加配额。AWS 要启用高吞吐量模式,请参阅在 Amazon SQS 中为 FIFO 队列启用高吞吐量

精确处理一次 — FIFO 队列将每封邮件传送一次,并在您处理和删除邮件之前保持可用状态。通过使用基于内容的重复数据删除等功能,即使由于网络问题MessageDeduplicationId或超时而重试,也可以防止消息重复。

First-in-first-out 传送 — FIFO 队列可确保您按照每个消息组中的发送顺序接收邮件。通过将消息分发到多个群组中,您可以并行处理这些消息,同时仍保持每个群组内的顺序。

标准队列消息传送。
FIFO队列消息传送。
当吞吐量至关重要时,使用标准队列在应用程序之间发送数据,例如:
  • 将实时用户请求与密集的后台工作分开。允许用户在后台处理调整大小或编码等任务时快速上传媒体,从而确保快速响应而不会使系统过载。

  • 将任务分配给多个工作节点。将大量信用卡验证请求分发到多个工作节点,并使用等性操作处理重复的消息,以避免处理错误。

  • Batch 消息以备将来处理。将多个条目排入队列,以便批量添加至数据库。由于无法保证消息顺序,因此必要时请设计您的系统以处理 out-of-order处理。

当事件顺序很重要时,使用FIFO队列在应用程序之间发送数据,例如:

  • 确保用户输入的命令按正确的顺序运行。这是FIFO队列的关键用例,其中命令顺序至关重要。例如,如果用户在应用程序中执行一系列操作,则FIFO队列可确保按照输入操作的顺序进行处理。

  • 通过按正确的顺序发送价格修改信息,显示正确的产品价格。FIFO队列可确保产品价格的多个更新到达,并按顺序处理。否FIFO则,可能会在价格上涨后处理降价,从而导致显示不正确的数据。

  • 在注册账户之前,阻止学生注册课程。通过使用FIFO队列,可以确保注册过程按正确的顺序进行。系统首先处理账户注册,然后处理课程注册,从而防止过早执行注册请求。