根据预测进行扩缩


您可以为代管式实例组 (MIG) 配置自动扩缩,以根据负载的增减自动添加或移除虚拟机 (VM) 实例。但是,如果您的应用初始化需要几分钟或更长时间,那么为响应实时更改而添加实例可能不足以快速增加应用的容量。例如,如果负载大幅增加(比如用户在早上首次唤醒系统),当您的应用在新实例上初始化时,用户可能会遇到延迟现象。

您可以使用预测性自动扩缩功能来缩短初始化时间较长并且其工作负载在每日或每周的可预测性方面有所不同的应用的响应时间。

启用预测性自动扩缩功能后,Compute Engine 会根据您的 MIG 的历史记录来预测未来的负载,并在预测的负载之前提前横向扩容 MIG,以便新实例准备好在负载到来时立即提供服务。如果不使用预测性自动扩缩功能,则自动扩缩器只能根据观察到的实时负载变化来被动地扩缩实例组。启用预测性自动扩缩功能后,自动扩缩器会同时处理实时数据和历史数据,以涵盖当前负载和预测负载。如需了解详情,请参阅预测性自动扩缩功能的工作原理检查预测性自动扩缩功能是否适用于您的工作负载

准备工作

  • 如果您要使用本指南中的命令行示例,请安装 Google Cloud CLI启动 Cloud Shell
  • 了解自动扩缩器基础知识
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

价格

预测性自动扩缩功能是免费的。但是,如果您启用预测性自动扩缩功能以针对可用性进行优化,则需要为 MIG 使用的 Compute Engine 资源付费。

限制

  • 预测性自动扩缩功能仅适用于作为扩缩指标的 CPU 利用率。系统不支持 Cloud Load Balancing 或 Cloud Monitoring 指标。
  • Compute Engine 需要 3 天的基于 CPU 的自动扩缩历史记录,才能生成预测。
  • 预测基于每周和每日负载模式。Compute Engine 不会预测每月事件、年度事件或一次性事件,也不会预测少于 10 分钟的负载模式。您可以使用基于时间表的自动扩缩来申请一次性或其他负载模式的容量。

适合的工作负载

如果您的工作负载符合以下条件,则预测性自动扩缩效果最佳:

  • 您的应用需要很长时间才能完成初始化,例如,您配置了超过 2 分钟的初始化期
  • 您的工作负载每日或每周预计会发生变化。

如果您的服务需要很长时间才能完成初始化,那么在发生横向扩容事件时,您的用户可能会遇到服务延迟,即预配了新的虚拟机但尚未提供服务。预测性自动扩缩会考虑应用的初始化时间,并在预测利用率增加之前横向扩容,从而确保可提供服务的实例的数量足以实现目标利用率。

如需预览预测性自动扩缩如何影响您的实例组,请参阅检查预测性自动扩缩功能是否适用于您的工作负载

启用和停用预测性自动扩缩

您可以在根据 CPU 利用率进行扩缩时启用预测性自动扩缩功能。 如需详细了解如何设置基于 CPU 的自动扩缩,请参阅根据 CPU 利用率进行扩缩

如果您的 MIG 没有自动扩缩器历史记录,则预测算法可能需要 3 天的时间才能影响到自动扩缩器。在此期间,实例组仅根据实时数据进行扩缩。3 天后,实例组开始使用预测进行扩缩。随着收集到的历史数据的增多,预测性自动扩缩器可以更好地了解负载模式及其预测。Compute Engine 最多可使用 MIG 的 3 周负载历史记录来提供机器学习模型。

控制台

  1. 在控制台中,打开实例组页面。

    转到“实例组”

  2. 从列表中,点击现有 MIG 的名称以打开其概览页面。

  3. 点击修改

  4. 如果不存在自动扩缩配置,请在自动扩缩下点击配置自动扩缩

  5. 自动扩缩模式下,选择开启:在实例组中添加和移除实例以启用自动扩缩功能。

  6. 指定您希望自动扩缩器在此组中创建的实例数量下限和上限。

  7. 自动扩缩指标部分中,如果 CPU 利用率指标尚不存在,请添加一个:

    1. 点击添加指标
    2. 指标类型下,选择 CPU 利用率
    3. 输入所需的目标 CPU 利用率。此值被视为百分比。例如,如果 CPU 利用率为 75%,请输入 75
    4. 预测性自动扩缩下,选择针对可用性进行优化以启用预测性自动扩缩功能。
      • 或者,如果您想要停用预测算法,仅使用实时自动扩缩器,请选择关闭
    5. 点击完成
  8. 初始化期下,指定您的应用在新实例上初始化所需的时间。此设置可告知预测性自动扩缩器在预测的负载之前进一步扩容,以便应用在负载到达时进行初始化。

  9. 点击保存

gcloud

设置或更新 MIG 的自动扩缩器时,请添加具有以下值之一的 --cpu-utilization-predictive-method 标志:

  • optimize-availability:用于启用预测算法
  • none(默认值):用于停用预测算法

如果您尚未为该实例组启用基于 CPU 的自动扩缩,则必须将其启用。您可以使用 set-autoscaling 命令从头开始配置实例组的自动扩缩政策。例如,以下命令展示了如何使用以下设置配置自动扩缩:

  • 已启用预测性自动扩缩。
  • 目标 CPU 利用率为 75%。
  • 实例数上限设置为 20。
  • 初始化期 (--cool-down-period) 设置为 5 分钟。此设置可告知预测性自动扩缩器在预测的负载之前提前 5 分钟扩容,以便应用在负载到达时进行初始化。
gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --cpu-utilization-predictive-method optimize-availability \
  --target-cpu-utilization 0.75 \
  --max-num-replicas 20 \
  --cool-down-period 300

如果已经为实例组启用了基于 CPU 的自动扩缩,请使用 update-autoscaling 命令启用预测算法:

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
  --cpu-utilization-predictive-method=optimize-availability

REST

创建或更新自动扩缩器时,在请求正文中,使用下列值之一添加 predictiveMethod 字段:

  • OPTIMIZE_AVAILABILITY:用于启用预测算法
  • NONE(默认值):用于停用预测算法

如果该实例组尚无自动扩缩配置,请执行以下操作:

如果该实例组已有自动扩缩配置,请执行以下操作:

如果您尚未为该实例组启用基于 CPU 的自动扩缩,则必须将其启用。

例如,以下请求可修补现有自动扩缩器资源,以使用以下设置启用基于 CPU 的自动扩缩:

  • 已启用预测性自动扩缩。
  • 目标 CPU 利用率为 75%。
  • 实例数上限设置为 20。
  • 初始化期 (coolDownPeriodSec) 设置为 5 分钟。此设置可告知预测性自动扩缩器在预测的负载之前提前 5 分钟扩容,以便应用在负载到达时进行初始化。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/autoscalers/

{
  "name": "AUTOSCALER_NAME",
  "target": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME",
  "autoscalingPolicy": {
    "cpuUtilization": {
       "utilizationTarget": 0.75,
       "predictiveMethod": "OPTIMIZE_AVAILABILITY"
     },
    "maxNumReplicas": 20,
    "coolDownPeriodSec": 300
  }
}

检查预测性自动扩缩器是否已启用

如需查看 MIG 的当前自动扩缩配置,请参阅获取 MIG 的属性

配置预测性自动扩缩

如需详细了解如何配置目标利用率、最小和最大实例数以及初始化期,请参阅根据 CPU 利用率进行扩缩。当您配置这些选项时,预测性自动扩缩器将以与实时自动扩缩器相同的方式,在实例组利用率上下限内,将所有实例保持在您设置的目标利用率水平。

使用初始化期设置来计算应用初始化所花费的时间。此设置会影响预测性自动扩缩器在预测负载增加之前提前启动新实例的时间,以使应用准备好在负载到达时立即提供服务。

检查预测性自动扩缩功能是否适用于您的工作负载

如需了解预测性自动扩缩是否可以提高应用的可用性,您可以将实例组的当前基于 CPU 的自动扩缩配置与预测性自动扩缩功能进行比较。您无需启用预测性自动扩缩功能即可进行此比较。

如需详细了解适合预测性自动扩缩的工作负载,请参阅合适的工作负载

检查是否存在过载现象

自动扩缩的 MIG 在其平均 CPU 利用率超过您的目标时过载。要查看您的自动扩缩配置是否在过去 7 天内导致虚拟机过载,以及预测性自动扩缩功能是否可以减少过载,请完成以下步骤:

  1. 在控制台中,转到实例组页面。

    转到“实例组”

  2. 点击已配置基于 CPU 的自动扩缩的现有 MIG。系统会打开该实例组的概览页面。

  3. 点击修改

  4. 自动调节部分中的自动扩缩指标下,展开 CPU 利用率部分,然后点击查看预测性自动扩缩是否可以提高可用性

  5. 根据过去 7 天的数据,该表显示了每天使用的虚拟机数量以及以下行每天过载的虚拟机数量:

    • 当前自动扩缩配置:显示自动扩缩器最近 7 天基于自动扩缩器配置的表现。
    • 预测性自动扩缩设置为“针对可用性进行优化”:显示在过去 7 天内启用了预测自动扩缩的情况下自动扩缩器的表现。

您可以使用“每天使用的虚拟机数量”来估计费用。例如,为了减少每日过载的虚拟机数量,预测性自动扩缩器可能会提前创建虚拟机并延长运行时间,从而导致额外费用。

监控和模拟预测性自动扩缩

您可以使用 Cloud Monitoring 直观呈现实例组的历史大小。监控图显示自动扩缩配置如何随着时间的推移扩缩实例组,还显示预测性自动扩缩功能(如果已启用)如何扩缩您的实例组。

对于停用了预测性自动扩缩功能的实例组,您可以先使用此工具模拟预测自动扩缩功能,然后再启用此功能。

  1. 在控制台中,转到实例组页面。

    转到“实例组”

  2. 点击已配置基于 CPU 的自动扩缩的现有 MIG。系统会打开该实例组的概览页面。

  3. 点击监控以查看与该实例组相关的图表。

  4. 在第一个图表中,点击其标题,然后选择预测性自动扩缩。此视图会显示该实例组的实际大小及其预测大小。

  5. 您可以选择其他时间范围以查看更多历史记录,也可以放大某个需求增长的时段,以便了解预测性自动扩缩功能如何影响预测的负载之前的实例组大小。

预测性自动扩缩功能的工作原理

预测性自动扩缩器会根据指标的历史趋势预测扩缩指标。预测会每几分钟重新计算,这样可以使自动扩缩器快速调整其预测,以适应负载的最新变化。预测自动扩缩器至少需要 3 天的历史记录,才能确定具有代表性的服务使用模式,然后才能提供预测。Compute Engine 最多可使用 MIG 的 3 周负载历史记录来提供机器学习模型。

预测性自动扩缩器根据许多因素计算实现利用率目标所需的虚拟机数量,其中包括:

  • 扩缩指标的预测未来值
  • 扩缩指标的当前值
  • 对过往趋势的置信度,包括扩缩指标过去的变化
  • 配置的应用初始化期,也称为初始化期

根据这些因素,预测性自动扩缩器会提前对您的实例组扩容。

启用与不启用预测性自动扩缩功能的服务虚拟机之间的比较。

图 1.启用与不启用预测性自动扩缩功能的服务虚拟机之间的比较。

在图 1 中,蓝线表示对虚拟机的日益增长的需求。黑线显示自动扩缩器的响应:添加了更多虚拟机。但是,对于初始化时间较长的的应用,灰线显示添加的虚拟机需要额外的时间才能投入使用,这可能会导致虚拟机不够多,无法满足需求。启用了预测性自动扩缩功能后,预测的需求增长和较长的应用初始化时间将得到考虑:自动扩缩器通过提前添加虚拟机做出响应,从而产生足够数量的提供服务的虚拟机。您可以通过设置初始化期来配置提前多久添加新实例。

实时使用情况数据

预测性自动扩缩器无法根据历史数据确定未来利用率变化的所有模式,因此它也可以无缝地处理实时数据。例如,意外新闻事件可能会导致利用率激增,而这种情况无法仅根据历史记录进行预测。为了处理这种不可预测的负载变化,预测性自动扩缩器会进行如下响应:

  • 它能调整自己的预测:在几分钟内不断地重新计算预测,以便调整结果来纳入最新数据。调整新模式的确切时间取决于新模式的可重复程度以及新模式与过去的预测之间的差异有多大。
  • 它会生成实时数据:自动扩缩器的建议实例数量基于指标的实时值,始终足以满足实例组的目标利用率。如果实时信号的当前值大于预测值,则信号的当前值优先于预测值。因此,启用了预测性自动扩缩功能的 MIG 始终比未启用预测性自动扩缩功能的 MIG 的可用性更高。

两个图表显示了预测如何适应实际的 CPU 利用率。

图 2:两个图表显示了预测如何适应实际的 CPU 利用率。

在图 2 中,黄色虚线表示 t1 的预测值。但实际的 CPU 利用率(如蓝色实线所示)与预测值不同。在左图中,实际 CPU 利用率高于预测值。在右图上,实际 CPU 利用率低于预测值。蓝色虚线表示调整后的预测值。

短暂的不可预测峰值

短暂的不可预测峰值会被实时覆盖。自动扩缩器会根据指标的当前实际值创建至少尽可能多的实例,以便在配置的目标范围内保持利用率。但是,这些实例不会提前创建,如下图所示。

出现不可预测的尖峰峰值会导致自动扩缩器实时响应。

图 3.出现短暂的不可预测峰值会导致自动扩缩器实时响应。

在图 3 中,蓝色的实线表示实际的 CPU 利用率。无法预测 CPU 利用率意外增加。由于自动扩缩器会监控实时数据,因此它会添加实例以应对峰值。黑色实线表示自动扩缩器为应对峰值而对虚拟机进行的被动添加。灰色实线显示正在提供服务的虚拟机的数量。由于应用的初始化时间,灰线滞后于黑线。在此场景中,该实例组暂时过载。

突然下降

另一种不可预测的利用率变化是突然下降,例如,由部分应用堆栈故障造成的下降。发生这种情况时,实例数量最初会遵循预测。但是,随着时间的推移,预测会调整到低于预期的利用率,从而导致横向缩容。这种调整的确切时间取决于许多因素,包括:过去执行此模式的频率、下降趋势持续多久,以及下降的程度如何。

突然下降会导致预测自动扩缩器更改其预测。

图 4.突然下降会导致预测自动扩缩器更改其预测。

在图 4 中,黄色虚线表示 t1 的预测值。但是,实际 CPU 利用率(如蓝色实线所示)低于预测值。蓝色虚线表示更新后的预测值,该值会在观察到利用率低于预测值后自动调整。这会使自动扩缩器在标准稳定期后移除实例。

历史数据

预测性自动扩缩器至少需要 3 天的历史负载才能开始预测。如果新的 MIG 缺少历史数据,Compute Engine 会使用实时数据被动地扩缩您的实例组,直到获得足够的历史数据为止。3 天后,Compute Engine 会收集其他利用率数据,因此可以改进预测结果。

如果您通过创建新的 MIG 并删除原有的代管式实例组(例如蓝绿部署),则新 MIG 需要 3 天的历史负载数据才能再次开始预测。如果要跨 MIG 保留负载历史记录,以便可以在创建新的 MIG 时立即启动预测,请与我们联系以请求加入专用预览版。

后续步骤