【问题标题】:AWS Sqs ReceiveMessage is not as fast as SendMessageAWS Sqs ReceiveMessage 不如 SendMessage 快
【发布时间】:2014-09-04 16:28:33
【问题描述】:

我有第一个 Web 服务,用于将消息发送到 aws sqs,该 Web 服务部署在单独的 ec2 实例上。 Web 服务在 IIS 8 下运行。此 Web 服务每秒能够处理来自两台机器的 500 个请求,这意味着每秒 1000 个请求。它可以处理更多的请求。

我在另一个具有相同电源/配置的 ec2 实例上部署了第二个 Web 服务。此 Web 服务将用于处理存储在 Sqs 中的消息。目前出于测试目的,我只收到来自 Sqs 的消息并删除它。

我有一个 aws Sns 服务,它告诉第二个 Web 服务一条消息已进入 sqs,去接收该消息以进行处理。

但我发现我的第二个 Web 服务没有我的第一个 Web 服务快,每次运行测试时,sqs 中都会留下消息,但理想情况下,sqs 中不应保留任何消息。

请指导我这可能是什么原因以及我应该关注的领域。

提前致谢。

【问题讨论】:

    标签: amazon-web-services sendmessage amazon-sqs


    【解决方案1】:

    接收者有双重工作要做,因为它既接收又删除消息,这是在两个单独的调用中完成的。如果您的流量很大,您可能需要双倍的实例来处理发送的消息。

    【讨论】:

    • 感谢您的回复。但我现在没有那么高的容量,正如我提到的,每秒只有 1000 个请求即将到来。即使我观察到处理器也无法每秒处理 500 个请求。
    【解决方案2】:

    您一次收到多少条消息?我强烈建议将 MaxNumberOfMessages 设置为 10,然后将 DeleteMessageBatch 设置为 10 个批次。这不仅会大大提高吞吐量,还会将您的 SQS 账单减少约 60%。

    另外,我对 SNS 主题感到困惑。无需让 SNS 主题告诉其他 Web 服务有消息存在。如果每条消息都生成对该主题的发布,那么您将增加大量额外的工作和费用。相反,您应该使用长轮询并将WaitTimeSeconds 设置为 20,并且始终调用 SQS。即使您在一个月内收到 0 条消息,2 个服务器的持续长时间轮询也将完全在免费套餐内。如果您高于免费套餐,则 2 台服务器不断长轮询 SQS 队列的总成本为 0.13 USD/月

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2016-07-21
      • 2019-12-17
      相关资源
      最近更新 更多