本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
FIFO 队列的高吞吐量
FIFO 队列的高吞吐量支持每个 API 每秒更高的请求数。要增加 FIFO 队列在高吞吐量下的请求数,可以增加使用的消息组数量。每个消息组每秒支持 300 个请求。有关 FIFO 配额具有高吞吐量的每队列配额的信息,请参阅与消息相关的配额和分区和数据分发可实现 SQS FIFO 队列的高吞吐量。
分区和数据分发可实现 SQS FIFO 队列的高吞吐量
Amazon SQS 将FIFO 队列数据存储在分区。分区是为队列分配的存储,队列可在Amazon区域内的多个可用区中自动复制的队列。您不管理分区。相反,Amazon SQS 负责分区管理。
对于 FIFO 队列,Amazon SQS 会在以下情况下修改队列中的分区数量:
-
如果当前的请求速率接近或超过现有分区所能支持的速率,则会分配额外的分区,直到队列达到区域配额。有关配额的信息,请参阅与消息相关的配额。
-
如果当前分区的利用率低,则分区的数量可能会减少。
分区管理在后台自动进行,对程序是透明的。您的队列和消息随时可用。
按消息组 ID 分发数据
为了向 FIFO 队列添加消息,Amazon SQS 使用每条消息的消息组 ID 的值作为内部哈希函数的输入。哈希函数的输出值决定了哪个分区存储消息。
以下示意图显示了跨组队列。队列的消息组 ID 基于项目编号。Amazon SQS 使用其哈希函数决定新项目的存储位置;在这种情况下,它基于字符串的哈希值item0
。请注意,这些项目的存储顺序存储,顺序存储顺序存储。每个项目的位置由其消息组 ID 的哈希值决定。

注意
Amazon SQS 经过优化,不论组有多少个分区,都可在整个 FIFO 队列的分区上统一分配项目。 Amazon建议您使用可以具有大量不同值的消息组 ID。
优化分区利用率
每个分区支持每秒最多 3,000 条消息进行批处理,或每秒最多 300 条消息用于发送、接收和删除操作。
使用批处理 API 时,每条消息都根据中描述的过程进行路由按消息组 ID 分发数据 。路由到同一分区的消息在单个事务中进行分组和处理。
为了优化SendMessageBatch
API 的分区利用率,Amazon建议尽可能使用相同的消息组 ID 批处理消息。
要优化DeleteMessageBatch
和ChangeMessageVisibilityBatch
API 的分区利用率,Amazon建议使用MaxNumberOfMessages
参数设置为 10 的ReceiveMessage
请求,并对单个ReceiveMessage
请求返回的接收句柄进行批处理。
在以下示例中,发送了一批具有不同消息组 ID 的消息。该批次分为三组,每组都计入分区的配额。

注意
Amazon SQS 仅保证具有相同消息组 ID 的内部哈希函数的消息分组在批处理请求中。根据内部哈希函数的输出和分区数量,可能会对具有不同消息组 ID 的消息进行分组。由于哈希函数或分区数量随时可能发生变化,因此在某一时刻分组的消息以后可能无法分组。
为 FIFO 队列启用高吞吐量
您可以为任何新的或现有的 FIFO 队列启用高吞吐量。当您创建和编辑 FIFO 队列时,该功能包括三个新选项:
-
启用高吞吐量 FIFO-为当前 FIFO 队列中的消息提供更高的吞吐量。
-
重复数据删除范围-指定重复数据删除是在队列级别还是在消息组级别进行。
-
FIFO 吞吐量限制-指定是在队列级别还是消息组级别设置 FIFO 队列中消息的吞吐量配额。
为 FIFO 队列启用高吞吐量(控制台)
创建或编辑 FIFO 队列后,您可以以更高的 TPS 向其发送消息以及接收和删除消息。