FIFO 队列的高吞吐量 - Amazon Simple Queue Service

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

FIFO 队列的高吞吐量

FIFO 队列的高吞吐量支持每个 API 每秒处理更高请求数。要在 FIFO 队列的高吞吐量模式下增加请求数量,可以增加所使用的消息组的数量。有关高吞吐量消息配额的更多信息,请参阅《Amazon Web Services 一般参考》中的 Amazon SQS 服务限额。有关 FIFO 高吞吐量配额下每队列配额的信息,请参阅与消息相关的配额SQS FIFO 队列高吞吐量的分区和数据分布

SQS FIFO 队列高吞吐量的分区和数据分布

Amazon SQS 以分区形式存储 FIFO 队列数据。分区是为队列分配的存储,可在 AWS 区域内的多个可用区中自动进行复制。您无需管理分区。相反,Amazon SQS 会负责分区管理。

对于 FIFO 队列,在以下情况下,Amazon SQS 会修改队列中的分区数量:

  • 如果当前请求速率接近或超过现有分区所能支持的速率,则会分配其他分区,直到队列达到区域配额。有关配额的信息,请参阅与消息相关的配额

  • 如果当前分区的利用率较低,则分区的数量可能会减少。

分区管理在后台自动进行,对程序是透明的。您的队列和消息始终可用。

按消息组 ID 分发数据

为了将消息添加到 FIFO 队列,Amazon SQS 使用每条消息的消息组 ID 的值作为内部哈希函数的输入。散列函数的输出值决定了哪个分区会存储消息。

下图显示了跨越多个分区的队列。队列的消息组 ID 基于项编号。Amazon SQS 使用其哈希函数决定新项的存储位置;在本例中,它基于字符串 item0 的哈希值。请注意,这些项的存储顺序与它们添加到队列的顺序相同。每个项的位置由其消息组 ID 的哈希值决定。


        队列跨越多个分区。
注意

Amazon SQS 经过优化,不论有多少个分区,都可在 FIFO 队列的不同分区中统一分配项。AWS 建议您使用可能具有大量不同值的消息组 ID。

优化分区利用率

在支持区域,每个分区支持每秒最多 3000 条消息进行批处理,或者支持每秒最多 300 条消息用于发送、接收和删除操作。有关高吞吐量消息配额的更多信息,请参阅《Amazon Web Services 一般参考》中的 Amazon SQS 服务限额

使用批处理 API 时,每条消息都将根据按消息组 ID 分发数据中所述的过程进行路由。路由到同一分区的消息在单个事务中进行分组和处理。

为了优化 SendMessageBatch API 的分区利用率,AWS 建议尽可能使用相同的消息组 ID 对消息进行批处理。

要优化 DeleteMessageBatchChangeMessageVisibilityBatch API 的分区利用率,AWS 建议使用将 MaxNumberOfMessages 参数设置为 10 的 ReceiveMessage 请求,并对单个 ReceiveMessage 请求返回的接收句柄进行批处理。

在以下示例中,发送了一批具有不同消息组 ID 的消息。该批次分为三组,每组都计入分区的配额。


        一批具有不同消息组 ID 的消息存储在分区中。
注意

Amazon SQS 仅保证将具有相同消息组 ID 的内部哈希函数的消息分组到批处理请求中。根据内部哈希函数的输出和分区数量,可能会对具有不同消息组 ID 的消息进行分组。由于哈希函数或分区数量可以随时更改,因此,在某一时刻分组的消息以后可能无法分组。

启用 FIFO 队列的高吞吐量

您可以为任何新的或现有的 FIFO 队列启用高吞吐量。创建和编辑 FIFO 队列时,该特征包括三个新选项:

  • 启用高吞吐量 FIFO - 增加当前 FIFO 队列消息的吞吐量。

  • 重复数据删除范围 - 指定是在队列级别还是在消息组级别进行重复数据删除。

  • FIFO 吞吐量限制 - 指定 FIFO 队列中消息的吞吐量配额是在队列级别还是在消息组级别设置的。

为 FIFO 队列启用高吞吐量(控制台)
  1. 开始创建编辑 FIFO 队列。

  2. 为队列指定选项时,选择启用高吞吐量 FIFO

    为 FIFO 队列启用高吞吐量会设置相关选项,如下所示:

    • 重复数据删除范围设置为消息组,这是为 FIFO 队列使用高吞吐量的必需设置。

    • FIFO 吞吐量限制设置为每个消息组 ID,这是为 FIFO 队列使用高吞吐量的必需设置。

    如果更改为 FIFO 队列使用高吞吐量所需的任何设置,则队列正常吞吐量生效,重复数据删除按规定进行。

  3. 继续为队列指定所有选项。完成后,选择创建队列保存

创建或编辑 FIFO 队列后,您可以向该队列发送消息以及接收和删除消息,所有这些都以更高的 TPS 完成。有关高吞吐量配额,请参阅与消息相关的配额中的消息吞吐量。