EC2 Auto-Scaling:配置目标跟踪策略以优先选择 Spot 实例

Phi*_*ßen 5 amazon-ec2 amazon-web-services autoscaling

Amazon 最近推出了EC2 Auto Scaling 的目标跟踪策略

在我的生产服务中,我使用两个独立的自动扩展组来支持混合使用 Spot 和按需实例的混合自动扩展。我想要的是我的 CPU 使用率不应超过 70%,并且应尽可能使用 Spot 实例,但在必要时回退到按需实例。

首先,我将两个 Auto-Scaling 组(Spot 和 On-Demand)设置为针对 70% CPU 负载使用目标跟踪,并将两个组的最小大小设置为 1。我的服务上的流量是相当可预测的(没有突然增加,白天流量较多,夜间流量很少)。

某一时刻,有两个按需实例和两个 Spot 实例正在运行。系统刚刚缩容,因为五台服务器的CPU负载变得非常低(大约35%)。对于四台服务器,CPU 负载上升,几分钟后短暂突破 70% 大关(当时可能有非常小的流量提升)。

系统保守地决定再次扩展,但由于两个自动扩展组同时独立做出决定,因此启动了两个实例(一个 Spot 实例和一个 On-Demand 实例)。此时,已有六台服务器正在运行。一段时间后,它再次缩小规模,最终达到运行四个实例的设置。

为了避免这种影响,我现在更改了设置,如下所示:

  • 按需:目标 CPU 使用率 70%,至少一台服务器
  • Spot:目标 CPU 使用率 65%,至少一台服务器

我的假设是它应该有助于防止我描述的情况。我预计 On-Demand 组会比 Spot 组更早缩小规模(无论如何,这是可取的,因为它们成本更高)。我预计 Spot 实例会更快地扩展,这应该可以防止按需组不必要的扩展。

这是我的期望,但我没有在文档中找到太多细节来证实它。有人可以详细说明新的目​​标跟踪扩展如何工作,以及如何将其应用到具有 Spot 和按需实例的混合设置吗?

问题:

  • 如果我将目标设置为 70% CPU 利用率,那么什么时候它会决定扩大规模以及何时缩小规模?
  • 如果我有两个 Auto-Scaling 组,一个的 CPU 利用率目标为 70%,另一个的目标为 65%,那么它何时会决定扩大或缩小规模?它总是倾向于缩小 70% 群体的规模吗?它总是倾向于扩大 65% 群体的规模吗?
  • 如果现货市场的价格突然上涨并超过我的出价限制,会发生什么情况?按需自动扩展组会接管吗?
  • 我的理解是否正确,手动定义所需实例的数量仅具有短期效果,并且会由 Auto Scaling 策略自动调整?
  • 例如,如果它在夜间缩小到最小值并在第二天再次扩大,是否意味着前一天的初始“所需实例数”设置现在已过时?换句话说,我是否只需要担心设置合理的最小值和最大值,AWS 会计算出其余的值吗?

小智 3

If I set the target to 70% CPU utilization, when will it decide to scale up and when to scale down?
Run Code Online (Sandbox Code Playgroud)

- AWS 没有确切说明它是如何工作的,但它会为每个目标跟踪策略创建两个 CloudWatch 警报,一个用于扩展,一个用于缩减,您可以检查这些警报的阈值以查看它们何时被触发

If I have two Auto-Scaling groups, one with a 70% CPU utilization target and the other with 65%, when will it decide to scale up or down? Will it always prefer to scale down the 70% group? Will it always prefer to scale up the 65% group?


What happens if the prices in the Spot market suddenly rise to exceed my bid limit. Will the On-Demand auto-scaling group take over?
Run Code Online (Sandbox Code Playgroud)

- 最终,现货实例将被终止,这将导致按需实例的负载增加,从而导致它们扩展。

Is my understanding correct that manually defining the number of desired instances has only a short-term effect and will be automatically adjusted by the Auto Scaling policy?
Run Code Online (Sandbox Code Playgroud)

- 正确,“所需容量”是扩展策略更改以使实例终止或启动的内容

For example, if it scaled down to the minimum during the night and scaled up again next day, does it mean that the initial "number of desired instances" settings from the previous day are now obsolete? In other words, do I need to worry only about setting reasonable value for minimum and maximum, and will AWS will figure out the rest?
Run Code Online (Sandbox Code Playgroud)

- 正确,最小值和最大值是所需的界限(它不能低于最小值或高于最大值)

您应该研究的一件事是一项新功能,您现在可以在单个 AutoScaling 组中混合 Spot 和 On-Demand。您还可以同时在一个 AutoScaling 组中拥有多种实例类型。因此,理论上您可以选择一个组,其中选择了一堆不同的备份实例类型,在任何给定时间使用 2 个最便宜的现货实例,如果这两个实例运行我们的现货容量,则将其他实例作为后备实例。

关于此新功能,需要注意两个重要事项:1) 如果您为所选实例类型选择的任何可用区中都没有现货容量,则它不会自动回退到按需容量。因此,如果您将其设置为 50% 现货和 50% 按需实例,并且所需数量为 10,并且没有现货可用性,那么您将只有 5 个按需实例。如果您选择了足够多的不同实例类型,我想这不会成为问题,但谁知道呢。

2)大多数负载平衡使用循环或类似的方式来分配实例的连接,因此,如果有 1 个快速实例和 1 个慢速实例,它们都会收到相同数量的连接,而慢速实例最终会获得相同数量的连接。越陷越深

https://aws.amazon.com/blogs/aws/new-ec2-auto-scaling-groups-with-multiple-instance-types-purchase-options/