使用 S3 对 SQS 消息而不是 FIFO 队列进行分组
Using S3 to group SQS messages instead of FIFO queues
我们计划使用 SQS 标准队列进行消息传递。消息是一堆记录,需要在消费者端按顺序接收。由于一些原因,我们计划不使用 FIFO 队列。
- FIFO 队列有一些限制,如前所述here,仅推荐用于少数选定的用例。
- 我们有多个生产者将此类消息推送到队列(所有生产者都相互独立)因此我们很可能达到每秒 300 条消息的限制。
鉴于此,我们正在评估 SQS 扩展库支持,以使用 S3 存储消息有效负载。我们会将所有链接的记录合并到一条消息中,然后 post 作为一个请求将其发送到 SQS。我有几个问题
- 使用 S3 持久化消息负载有哪些限制或副作用?我知道的一个是 - S3 成本 - 我假设这不会很大,因为我们的消息不会超过几 MB 的最大值。
- 是否有在 FIFO 队列上使用这种方法对消息进行分组的真实示例?
S3 引入了额外的延迟(在队列的每一端),具体取决于负载大小、消息 publishers/consumers 是在 AWS 中还是托管在其他地方,以及单个服务器实例有多少带宽可用于它。 (即兴发挥,我猜 1 MB 有效负载的时间 >200 毫秒。)成本将非常微不足道,特别是如果您设置适当的存储桶生命周期策略来存档或删除旧数据。不要忘记 S3 在初始创建时是强一致的,但最终只对对象的任何更新保持一致。如果可能,不要在创建对象后更新它。
我没有任何现实世界的例子,但如果我找到一个,我会告诉你的。
您可能会发现使用某种数据库更容易实现您需要的功能,正如您链接的文章中所建议的那样(其中解释了 FIFO 队列的局限性)。通过寻找过早的优化来确保您的决定没有偏见。
我们计划使用 SQS 标准队列进行消息传递。消息是一堆记录,需要在消费者端按顺序接收。由于一些原因,我们计划不使用 FIFO 队列。
- FIFO 队列有一些限制,如前所述here,仅推荐用于少数选定的用例。
- 我们有多个生产者将此类消息推送到队列(所有生产者都相互独立)因此我们很可能达到每秒 300 条消息的限制。
鉴于此,我们正在评估 SQS 扩展库支持,以使用 S3 存储消息有效负载。我们会将所有链接的记录合并到一条消息中,然后 post 作为一个请求将其发送到 SQS。我有几个问题
- 使用 S3 持久化消息负载有哪些限制或副作用?我知道的一个是 - S3 成本 - 我假设这不会很大,因为我们的消息不会超过几 MB 的最大值。
- 是否有在 FIFO 队列上使用这种方法对消息进行分组的真实示例?
S3 引入了额外的延迟(在队列的每一端),具体取决于负载大小、消息 publishers/consumers 是在 AWS 中还是托管在其他地方,以及单个服务器实例有多少带宽可用于它。 (即兴发挥,我猜 1 MB 有效负载的时间 >200 毫秒。)成本将非常微不足道,特别是如果您设置适当的存储桶生命周期策略来存档或删除旧数据。不要忘记 S3 在初始创建时是强一致的,但最终只对对象的任何更新保持一致。如果可能,不要在创建对象后更新它。
我没有任何现实世界的例子,但如果我找到一个,我会告诉你的。
您可能会发现使用某种数据库更容易实现您需要的功能,正如您链接的文章中所建议的那样(其中解释了 FIFO 队列的局限性)。通过寻找过早的优化来确保您的决定没有偏见。