GCP 预测性自动扩缩,再也不用担心负载激增

在 Google Cloud 上,当用户需要根据不断变化的业务需求进行基础设施的扩缩时,云平台可以为其带来许多好处。举例来说,Compute Engine 允许我们配置自动扩缩实例组,以便在需求少时节省成本,同时又能增加容量来支持峰值负载。

在使用托管实例组(MIG)时,我们可以根据负载的增加或减少自动创建或删除 VM 实例,(至于如何创建托管实例组,点此复习)但是,当应用程序需要时间进行初始化时,这种通过创建 VM 来响应持续增加的负载的方法很有可能无法快速增加负载容量。例如,当负载大幅增加时 ,部分用户可能会在应用程序进行新实例初始化时遇到延迟。

要解决这个问题,我们可以尝试提前创建虚拟机,以便应用程序有足够的时间进行预先初始化,当然这还需要了解未来的需求变化。也就是今天的主要内容:Google Cloud 的自动预测服务。

引入预测性自动扩缩

预测自动扩缩通过使用 Google Cloud 的机器学习能力对需求进行预测,并在需求增长之前创建实例,从而为应用程序的初始化争取足够的时间。如下图所示,常规下的自动扩缩服务随着需求的增加不断地创建 VM 实例,但是并没有为初始化留下缓冲区,但是预测性的自动扩缩在需求来临之前创建好 VM 实例,为初始化提供的一定的时间。

工作原理

预测性自动扩缩通过使用实例组中的 CPU 历史记录来预测未来的负载需求,并计算出需要多少 VM 才能达到目标 CPU 利用率,此外,机器学习还会根据 MIG 的循环负载模式对预测结果进行调整。我们还可以通过配置应用程序初始化的周期指定自动扩缩创建 VM 的时间间隔,如果应用程序的初始化需要5分钟,那么配置完成之后,自动扩缩会在负载来临前的五分钟完成 VM 的创建。这不仅可以将 CPU 的利用率保持在目标范围内,同时可以在需求快速增加时保持响应。

为了更好的匹配需求,自动扩缩会每分钟进行多次预测,并根据预测来创建或删除 VM ,此外,预测本身也会每隔几分钟更新来匹配最新的负载趋势。

还需说明的是与预测性自动扩缩与当前的自动扩缩完全兼容,同时会计算足够的 VM 以覆盖预测结果和实时 CPU 负载(以最高者为准),我们还可以通过时间进度、负载均衡器的请求目标或  Cloud Monitoring 指标进行扩缩。即预测性自动扩缩通过使用满足所有目标所需的最大数量的 VM 来为负载提供足够的容量。


开始使用

我们需要在 Google Cloud 控制台中进行预测性自动扩缩启用。在“Instance groups”中选择“编辑组”,再将“预测性自动扩缩”从“Off”状态更改为“Optimize for availability”

如果想要进一步了解预测性自动扩缩是否适合使用,可以点击“Optimize for availability”后面的“See if predictive autoscaling can optimize your availability”,之后会显示过去七天与当前自动扩缩配置与启用预测性自动扩缩的比较结果。

在上图中,“Average VM minutes overloaded per day ”显示 VM 超过 CPU 利用率目标的频率。当需求高于可用容量时会发生这种情况。预测性自动扩缩可以通过在预期负载之前启动 VM 来减少这种情况。“Average VMs per day”代表成本 。这里会显示需要多少额外的 VM 才能将 CPU 利用率保持在所设置的目标范围内。还可以通过调整 Minimum 实例和 CPU 利用率进行成本优化,详见下文。


优化配置

首先我们需要确保冷却期的值反映了应用程序从 VM 启动到准备好为负载提供服务所需的时间。预测性自动缩放将使用此值在预测负载之前启动 VM。如果将其设置为 10 分钟(600 秒),那么 VM 将在预期负载增加前 10 分钟启动。

检查自动扩缩 CPU 利用率目标和最小实例数。借助预测性自动缩放,我们不再需要缓冲区来补偿 VM 启动所需的时间。如果应用程序在 70% 的 CPU 利用率下运行最佳,那么就不需要将目标设置为更低的值,因为预测性自动扩缩将在正常负载之前启动 VM。更高的 CPU 利用率和更低的最小实例数可以帮助我们降低成本,因为无需在支付额外容量来为不断增长的需求做准备。


预测性自动扩缩通常适用于所有 Google Cloud 区域。有关如何配置、模拟和监控的更多信息,请参:https://cloud.google.com/compute/docs/autoscaler/predictive-autoscaling




编译自:Let Google Cloud’s predictive services autoscale your infrastructure

返回全部