亚马逊最近为 EC2 Auto Scaling 引入了目标跟踪策略。
在我的生产服务中,我使用两个单独的自动扩展组来支持混合自动扩展,同时混合使用 Spot 和 On-Demand 实例。我想要的是我的 CPU 使用率不应该超过 70%,它应该尽可能使用 Spot 实例,但如果有必要则回退到按需实例。
首先,我将两个 Auto-Scaling 组(Spot 和 On-Demand)设置为使用 Target Tracking 来实现 70% 的 CPU 负载,并将两个组的最小大小设置为一个。我的服务的流量是可以预测的(没有突然增加,白天流量更多,晚上流量很少)。
有一次,有两个 On-Demand 和两个 Spot 实例正在运行。由于五台服务器的 CPU 负载变得非常低(大约 35%),系统刚刚缩减了规模。使用四台服务器时,CPU 负载上升,几分钟后短暂超过 70%(可能当时的流量增长非常小)。
系统保守地决定再次扩展,但由于两个自动扩展组同时独立做出决定,因此启动了两个实例(一个 Spot 实例和一个 On-Demand 实例)。此时,现在有六台服务器在运行。过了一会儿,它再次缩小,最终达到了运行四个实例的设置。
为了避免这种影响,我现在将设置更改如下:
- 按需:目标 70% 的 CPU 使用率,最少一台服务器
- 现货:目标 65% CPU 使用率,最少一台服务器
我的假设是它应该有助于防止我描述的那种情况。我希望按需组比 Spot 组更早地缩减规模(无论如何,这是可取的,因为它们的成本更高)。而且我希望 Spot 实例能够更快地扩展,这应该可以防止按需组进行不必要的扩展。
这是我的期望,但我没有在文档中找到太多细节来确认它。有人可以详细说明新的目标跟踪扩展如何工作,以及如何将其应用于具有 Spot 和 On-Demand 实例的混合设置吗?
问题:
- 如果我将目标设置为 70% CPU 利用率,它什么时候决定扩大规模,什么时候缩小规模?
- 如果我有两个 Auto-Scaling 组,一个的 CPU 利用率目标为 70%,另一个为 65%,它什么时候决定扩大或缩小?它会一直倾向于缩小 70% 的群体吗?它总是更喜欢扩大 65% 的群体吗?
- 如果现货市场的价格突然上涨超过我的出价限制,会发生什么情况。按需自动扩展组会接管吗?
- 我的理解是否正确,手动定义所需实例的数量只会产生短期影响,并且会由 Auto Scaling 策略自动调整?
- 例如,如果它在夜间缩小到最小值并在第二天再次放大,是否意味着前一天的初始“所需实例数”设置现在已过时?换句话说,我是否只需要担心为最小值和最大值设置合理的值,而 AWS 会解决剩下的问题吗?
- AWS 没有确切说明它是如何工作的,但它会为每个目标跟踪策略创建两个 CloudWatch 警报,一个用于扩展,一个用于扩展,您可以检查这些阈值以查看它们何时会被触发
- 最终,Spot 实例将被终止,这将导致 On-Demand 实例的负载增加,从而导致它们扩展。
- 正确,“所需容量”是扩展策略更改以使实例终止或启动的内容
- 正确,最小值和最大值是所需的界限(不能低于最小值或高于最大值)
您应该研究的一件事是一项新功能,您现在可以在单个 AutoScaling 组中混合 Spot 和 On-Demand。您还可以一次在一个 AutoScaling 组中拥有多个实例类型。因此,理论上您可以选择一组不同的备份实例类型,在任何给定时间使用 2 个最便宜的 Spot 实例,如果这两个实例运行我们的 Spot 容量,则将其他实例用作备用。
关于此新功能需要注意的两个重要事项:1) 如果您为您选择的任何实例类型选择的任何可用区域中没有现货容量,它不会自动回退到按需。因此,如果您将其设置为 50% 的 Spot 和 50% 的 On-Demand,并且所需的是 10 个,并且没有 Spot 可用性,那么您将只有 5 个 On-Demand 实例。如果您选择了足够多的不同实例类型,我想这不会是一个问题,但谁知道呢。
2)他们的大多数负载平衡使用循环或类似的方法来分配实例的连接,所以如果有 1 个快速实例和 1 个慢速实例,它们都会收到相同数量的连接,而慢速实例最终会得到越陷越深
https://aws.amazon.com/blogs/aws/new-ec2-auto-scaling-groups-with-multiple-instance-types-purchase-options/