如何根据同一指标的多个限制配置 EC2 自动缩放?

How to configure EC2 autoscaling based on multiple limits on same metric?

我的主要需求如下:

当 CPU 个实例的消耗量超过 50% 时,将自动缩放组的容量调整为 5 个实例,当 CPU 消耗量超过 80% 时,则将容量调整为 10 个实例。

但是,如果我使用 cloudwatch 警报来设置容量,我可以想象以下竞争条件:

因此,我最希望发生的事情是响应警报触发,我希望确保容量至少达到相应的阈值。

我知道这可以通过 AWS SDK 手动设置容量来完成 - 这可以响应主管监控的生命周期事件而触发,但是是否有更好的方法,最好是不需要设置的方法为警报设置额外的主管或 webhooks ?

一种通用的方法是细化缩放操作: 不要跳那么大:

if the ASG avg CPU is over 70% > Add an instance
if the ASG avg CPU is over 90% > Add "n" instances
if the ASG avg CPU is under 40% > remove an instance
if the ASG avg CPU is under 10% > remove "n" instance

所有这些值都是最近 5 分钟的 AVG。所以如果你有一个非常快的梭子鱼,你需要更积极的缩放。所以在半小时内你可以轻松添加6台服务器甚至更多。

此外,数字越大,缩放效果越好。因此,如果您的系统只需要 1-3 个实例,则减小实例大小可能很有意义,这样您就可以拥有 2-6 个实例。它为您的系统提供了一些额外的灵活性。

但问题又来了,您的预期负载是多少?大矛或预期的白天涨跌?

我建议查看 AWS lambda 函数,该函数由来自 cloudwatch 的 SNS 消息触发 - 它应该让您自由支配,可以根据需要将尽可能多的逻辑放入扩展决策中。

祝你好运!