gpt4 book ai didi

amazon-web-services - 是否可以有一个默认为0且仅在有工作要做的情况下包含实例的AWS EC2规模组?

转载 作者:行者123 更新时间:2023-12-04 08:02:39 25 4
gpt4 key购买 nike

我正在尝试设置一个EC2扩展组,该组根据SQS队列中的项目数进行扩展。

当SQS队列中有可见的项目时,我需要扩展组具有1个可用实例;而当SQS队列为空时(例如,没有可见或不可见的消息),我希望有0个实例。

所需实例设置为0,最小值设置为0,最大值设置为1。

我在SQS队列上设置了cloudwatch警报,以在可见消息大于零时触发,并在不可见消息小于一个(即无更多工作)时触发警报。

当前,Cloudwatch警报触发以创建实例,但是伸缩组会自动终止该实例以满足所需的设置。我希望警报在最小和最大设置内调整所需的实例数,但事实并非如此。

最佳答案

是的,您当然可以拥有一个具有以下功能的Auto Scaling组:

  • 最低= 0
  • 最大值= 1
  • 警报:当ApproximateNumberOfMessagesVisible> 0表示1分钟时,添加1个实例

  • 当队列中有消息等待时,这将导致Auto Scaling启动实例。它将继续尝试启动更多实例,但是“最大”设置会将其限制为1个实例。

    在没有消息的情况下进行扩展有点麻烦。

    首先,要知道何时实际扩展可能很困难 。如果有等待处理的消息,则ApproximateNumberOfMessagesVisible将大于零。但是,没有消息等待中,这不一定意味着您希望进行扩展,因为消息可能正在处理中(“运行中”),如ApproximateNumberOfMessagesNotVisible所示。因此,您只想在两个都为零的情况下进行放大。不幸的是,CloudWatch警报只能引用一个指标,而不能引用两个。

    其次,当Amazon SQS队列为空时,它不会将指标发送到Amazon CloudWatch。之所以这样说是有道理的,因为队列大多是空的,因此它将不断发送零度量。但是,这会导致问题,当队列为空时,CloudWatch无法接收指标。相反,警报将进入INSUFFICIENT_DATA状态。

    因此,您可以将警报创建为:
  • ApproximateNumberOfMessagesVisible = 0达15分钟时,删除1个实例,但将操作设置为在INSUFFICIENT_DATA而不是ALARM上触发

  • 请注意建议的“15分钟”延迟,以避免打败实例。在这里,可以快速连续地添加和删除实例,因为消息定期但不频繁地传入。因此,最好先等待一段时间再决定扩大规模。

    这就留下了的问题,即在实例仍在处理消息时终止了实例。可以通过利用Auto Scaling Lifecycle Hooks来避免这种情况,它在实例将要终止时发送信号,从而为应用程序提供了延迟终止直到完成工作的机会。然后,您的应用程序应该仅在消息处理完成后才发出信号,表明已准备好终止。

    底线

    以上大部分取决于:
  • 您的应用程序多久接收一次消息
  • 处理消息需要多长时间
  • 节省成本

  • 如果您的消息不频繁且易于处理,则连续运行t2.micro实例可能是值得的。以2c/小时的速度增长时,放大的好处很小。此外,在添加和删除实例时,总会有风险,您实际上可能要多付,因为实例是按小时收费的-运行一个实例30分钟,终止该实例,然后启动另一个实例30分钟实际上是收费为两个小时。

    最后,您可以考虑使用 AWS Lambda 而不是Amazon EC2实例。 Lambda是无需服务器即可执行短暂代码的理想选择。它可以完全消除使用Amazon EC2实例的需要,并且仅在Lambda函数实际运行时才需要付费。

    关于amazon-web-services - 是否可以有一个默认为0且仅在有工作要做的情况下包含实例的AWS EC2规模组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890315/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com