【问题标题】:Best way to process SQS messages处理 SQS 消息的最佳方式
【发布时间】:2018-10-24 09:20:01
【问题描述】:

我有一个客户端,它不断地将半实时数据倒入一个 sqs 队列,并且想要处理和存储消息。我的第一个想法是使用 CloudWatch 调度程序,它会提示 Lambda 大约消息数量,然后 lambda 会生成工作 lambda 以处理数据并将数据推送到 Firehose。问题是每天都会有数十万条消息进入队列。我也可以使用 EC2 来执行此操作,但是否有任何其他经济高效的方式来半实时处理队列。

【问题讨论】:

  • 每条消息需要多少处理?一个 t2.nano 的费用为 0.14 美元/天。 Lambda 最终会比小型 EC2 贵得多。
  • @stdunbar 处理一条消息大约需要 0.012 秒。 EC2似乎是要走的路。谢谢。
  • 可能是 SQS 不是执行此操作的正确服务。由于您的数据看起来像一个流,您可能需要查看Kinesis
  • @Asdfg 我很想使用 Kinesis,但客户端出于某种原因仅将数据转储到 SQS。 SQS 不是此任务的最佳资源。
  • 如果流不是一个选项,具有基于队列长度的应用程序自动缩放的 ecs 服务可以很好地用于 sqs。

标签: amazon-web-services amazon-ec2 aws-lambda amazon-sqs


【解决方案1】:

在 AWS Lambda 中处理流数据的推荐解决方案是将数据发送到 Amazon Kinesis,然后它可以自动触发 Lambda 函数。 Kinesis 还保留了消息的顺序。 (Amazon SQS 仅在您使用 FIFO 队列时保留排序,该队列具有吞吐量限制。)

如果您确实仅限于从 SQS 进行处理,您可以编写一个从 SQS 拉取并推送到 Kinesis 的程序,或者只是从 SQS 拉取并立即处理数据。这样的程序可以在 Amazon EC2 实例上运行,也可以由计划的 Amazon CloudWatch 事件定期触发。

要考虑的主要问题是如何处理可变数量。如果您无法接受消息到达和处理之间的长时间延迟,您将需要使用 Lambda(自动扩展)或有足够的可用处理能力来处理峰值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多