【问题标题】:Turn off Worker Tier App when SQS is emptySQS 为空时关闭 Worker Tier App
【发布时间】:2014-06-18 17:10:16
【问题描述】:

我将 Elastic Beanstalk 应用程序设置为 Worker Tier,其中 SQS 正在向其发送消息以进行处理。有时我的 SQS 是空的,当它为空时,我不希望我的应用程序运行,这会花钱。

我的应用程序总是“绿色”,除了在短时间内将类型设置为 WARN 2 分钟,然后又将其设置为“信息”(绿色)几个小时。在空闲时,我的监控选项卡显示它的 CPU 负载约为 7.7%。

所以我想要的是当我的 SQS 为空 60 秒时。 EC2 实例将关闭,直到添加新的 SQS 消息。这怎么可能?还是我必须继续为没有做“任何事情”的 EC2 实例付费?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-elastic-beanstalk


    【解决方案1】:

    您将要设置自动缩放策略,本文档为您提供了一个很好的过程概述。

    http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-using-sqs-queue.html

    但要记住一件事,在 60 秒不活动后关闭 ec2 实例最终可能比让它一直运行所花费的成本更多。

    举个例子:

    假设您的工作量是每 2 分钟有一个新项目进入队列,每个项目需要 45 秒来处理。

    在这种情况下,您将启动一个实例,它将工作 45 秒,等待 60 秒然后关闭,因为 SQS 队列为空。 15 秒后,一个新实例将启动以处理从第一个实例到 2 分钟到达的队列项目。

    因此,您的策略最终将在一小时内启动总共 30 个新实例,因为每次启动一个实例时,您都会按一小时计费,您需要为每 1 小时的实例时间支付 30 小时的费用您所做的工作时间 - 可能不是您想要的。

    所以是的,您想做的事情是可能的,但根据您的工作量可能不是一个好主意。请记住 - 需要时快速启动实例,然后慢慢关闭它们,因为您已经支付了整整一小时的费用。

    您确实需要弄清楚工作将进入队列的可能模式,然后围绕该模式设计解决方案。如果 SQS 队列备份超过某个点,则始终运行一个实例(即使是一个小实例)并启动额外实例可能最终会更便宜(并且您仍然需要确保不启动并且过于频繁地停止第二个实例)。

    【讨论】:

    • 在我的情况下,它一次加载 50'000 条消息,但每周只加载几次或每天最多一次。所以我认为在我的具体情况下这不会成为问题。
    【解决方案2】:

    也许您应该考虑使用 SNS 通知和 Lambda 函数。这样您就可以只为处理的每条消息付费。您不必担心根据待处理消息的数量打开、关闭或扩展您的应用程序。

    您可以在以下链接中获得有关如何进行此集成的更多详细信息: http://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html

    另外,请记住 Lambda 函数支持多个事件源(例如 Dynamodb 和 S3 Bucket)。您可以在以下链接中查看完整列表: http://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html

    编码愉快!

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 2016-09-14
      • 2017-09-04
      • 2014-08-16
      • 2016-01-22
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      相关资源
      最近更新 更多