【问题标题】:How to Fan-Out SQS如何扇出 SQS
【发布时间】:2019-01-29 10:34:32
【问题描述】:

我有多个源将原始数据推送到 S3。我已经在我的 S3 存储桶上配置了 SQS 事件通知。 问题在于滞后和限制。

我预计在不久的将来会有更多的来源,因为我们只能在一次轮询中从 SQS 获得 10 条消息,我认为在不久的将来会有更多的来源将数据推送到 S3,然后SQS 将充满数千条消息,我将无法更快地处理它们。

我正在考虑通过将消息从我的主 SQS 队列传播到更多 SQS 队列来扇出 SQS,以便我的处理层可以轮询多个队列,例如:5 个队列并处理更多消息。 可能的方法应该是什么?

【问题讨论】:

    标签: amazon-web-services amazon-sqs


    【解决方案1】:

    "...因为我们只能从 SQS 的一次轮询中获得 10 条消息...我正在考虑扇出 sqs,例如将消息从我的主 SQS 队列传播到更多 SQS 队列,这样我的处理层可以轮询多个队列,例如:5 个队列并处理更多消息。”

    简短回答:不要这样做。

    原因如下:

    是的,一次投票最多可以检索 10 条消息。但是,您可以让多个线程和多个主机都轮询一个队列。让您的消费者并行运行是这里的关键,因为处理队列条目将成为您的瓶颈——而不是从队列中检索条目。单个 SQS 队列可以处理大量轮询线程。

    您提出的多队列扇出有许多缺点:

    1. 编码和操作更复杂
    2. 较慢 - 项目必须通过从主队列(或 SNS,如果您使用它)传输到消费队列的开销
    3. 更昂贵 - 每条消息的 SQS 收费。每条消息的 SNS 费用。
    4. 您必须自己处理重复 - 对于单个队列,SQS 内置的可见性超时主要会阻止其他消费者处理相同的项目。对于多个队列,您必须制定自己的重复数据删除策略
    5. 只使用一个队列。你以后会感谢我的。

    【讨论】:

      【解决方案2】:

      将消息扇出到多个 sqs 队列的典型方法是使用 SNS。

      s3 事件通知将转到 SNS 而不是 SQS,并且 SNS 将负责将这些消息散播到您想要的任意数量的队列中。

      也就是说,我不确定我是否理解为什么您认为使用多个消息队列可以更快地处理消息。

      单个队列 SQS 队列被多个处理客户端或使用多线程的单个客户端轮询可能是提高处理速度的更好方法,而不是简单地引入更多队列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 2017-09-06
        • 2012-11-30
        • 2021-05-01
        • 2020-05-25
        • 2017-02-24
        相关资源
        最近更新 更多