使用 S3 对 SQS 消息而不是 FIFO 队列进行分组

Using S3 to group SQS messages instead of FIFO queues

我们计划使用 SQS 标准队列进行消息传递。消息是一堆记录,需要在消费者端按顺序接收。由于一些原因,我们计划不使用 FIFO 队列。

  1. FIFO 队列有一些限制,如前所述here,仅推荐用于少数选定的用例。
  2. 我们有多个生产者将此类消息推送到队列(所有生产者都相互独立)因此我们很可能达到每秒 300 条消息的限制。

鉴于此,我们正在评估 SQS 扩展库支持,以使用 S3 存储消息有效负载。我们会将所有链接的记录合并到一条消息中,然后 post 作为一个请求将其发送到 SQS。我有几个问题

  1. 使用 S3 持久化消息负载有哪些限制或副作用?我知道的一个是 - S3 成本 - 我假设这不会很大,因为我们的消息不会超过几 MB 的最大值。
  2. 是否有在 FIFO 队列上使用这种方法对消息进行分组的真实示例?

S3 引入了额外的延迟(在队列的每一端),具体取决于负载大小、消息 publishers/consumers 是在 AWS 中还是托管在其他地方,以及单个服务器实例有多少带宽可用于它。 (即兴发挥,我猜 1 MB 有效负载的时间 >200 毫秒。)成本将非常微不足道,特别是如果您设置适当的存储桶生命周期策略来存档或删除旧数据。不要忘记 S3 在初始创建时是强一致的,但最终只对对象的任何更新保持一致。如果可能,不要在创建对象后更新它。

我没有任何现实世界的例子,但如果我找到一个,我会告诉你的。

您可能会发现使用某种数据库更容易实现您需要的功能,正如您链接的文章中所建议的那样(其中解释了 FIFO 队列的局限性)。通过寻找过早的优化来确保您的决定没有偏见。