为 SQS FIFO 队列提供高吞吐量的分区和数据分配 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

为 SQS FIFO 队列提供高吞吐量的分区和数据分配

Amazon SQS 将 FIFO 队列数据存储在分区。A分区是为队列分配的存储,这些分配在队列上可用区中自动复制Amazon区域。您不管理分区。相反,Amazon SQS 处理分区管理。

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

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

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

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

按消息组 ID 分发数据

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

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


      队列跨越多个分区。
注意

Amazon SQS 经过优化,不论 FIFO 队列的分区数如何,都可在这些分区上统一分配项目。Amazon建议您使用具有较多非重复值的消息组 ID。

优化分区使用率

每个分区支持带有批处理的消息每秒最多 3000 条,或者每秒支持 300 条消息,用于发送、接收和删除操作。

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

要优化分区利用率,Amazon建议尽可能使用相同消息组 ID 批处理消息。

在以下示例中,将发送一批具有各种消息组 ID 的消息。批处理被拆分为三个组,每个组都根据分区的配额进行计数。


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

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