代管式自动扩缩器

本页面介绍代管式自动扩缩器的工作原理,以及使用代管式自动扩缩器时的费用和限制。它还提供了一些信息,可帮助您确定如何配置托管式自动扩缩器。

代管式自动扩缩器的工作原理

启用托管式自动扩缩器后,Spanner 会自动为您调整实例大小。随着负载的增加或减少,托管式自动扩缩器功能会响应实例工作负载或存储空间需求的变化。代管式自动扩缩功能可以纵向扩容(为实例增加计算容量)或缩减资源(从实例中移除计算容量)。

配置托管式自动扩缩器时,您可以为小型实例使用处理单元,或者为大型实例使用节点。在本文档中,我们使用“计算容量”一词来表示节点或处理单元

Spanner 代管式自动扩缩器根据以下内容确定需要多少计算容量:

  • 高优先级 CPU 利用率目标
  • 存储空间利用率目标
  • 最低限额
  • 最大限额

每个伸缩维度都会生成建议的实例大小,Spanner 会自动使用最大的实例大小。这意味着,如果实例需要 10 个节点才能达到存储空间利用率目标,但需要 12 个节点才能达到 CPU 利用率目标,则 Spanner 会将实例扩容到 12 个节点。

随着计算容量的变化,Spanner 会不断优化存储空间。它会重新平衡所有服务器中的数据,以确保流量均匀分布,并且不会造成个别服务器过载。如需了解详情,请参阅限制

如果托管式自动扩缩器将实例扩容到其上限,但工作负载仍导致 CPU 利用率仍高于目标,则工作负载请求可能会出现较长的延迟时间或失败。如果实例纵向扩容到其最大计算容量目标,但工作负载需要的存储空间超出最大存储限制,则写入请求可能会失败。如需了解是否已达到目标上限,您可以在 Google Cloud 控制台的系统数据分析页面上查看代管式自动扩缩器系统事件日志。如需了解详情,请参阅存储空间限制

Spanner 对实例进行缩减时,移除计算容量的速度比纵向扩容时慢,从而减少对延迟时间的影响。

费用

您的 Spanner 总费用可能会更低或更高,具体取决于您在启用代管式自动扩缩器之前如何配置 Spanner 实例,以及您为代管式自动扩缩器设置的限制。

例如,如果您曾经手动配置 Spanner 实例,使其具有足够的计算容量来随时处理峰值工作负载,则托管式自动扩缩器的费用可能会较低,因为它会在实例空闲时减少计算容量。

如果您过去手动将 Spanner 实例配置为有足够的计算容量来满足普通工作负载,但当工作负载流量增加时整体性能会降低,则使用代管式自动扩缩器的费用可能会更高,因为代管式自动扩缩器可能会在实例繁忙时增加计算容量。不过,这样可为用户提供更一致的性能。

您可以将节点或处理单元数上限设置为您希望支出的级别,从而限制 Spanner 实例的费用上限。

限制

对实例启用或更改代管式自动扩缩功能时,存在以下限制:

  • 启用了代管式自动扩缩器功能时,您无法移动实例。您必须先停用代管式自动扩缩器,然后再移动实例。移动实例后,您可以重新启用托管式自动扩缩器。
  • 您必须将自动扩缩实例的最小限制设置为 1, 000 个或更多处理单元,或者 1 个或更多节点。
  • 对现有实例启用自动扩缩功能后,现有实例容量可以低于您在托管式自动扩缩器上配置的下限值。不过,实例在启动时会自动扩容到配置的最小值。例如,如果您的实例有一个节点,但您将最小值设置为两个节点,则当您启动实例时,它会自动扩容到 2 个节点。

代管式自动扩缩器参数

在创建或修改实例并选择启用代管式自动扩缩器时,您需要定义下表中显示的值。

参数 说明
高优先级 CPU 利用率目标 实例的高优先级 CPU 容量的百分比。此值必须介于 10% 到 90% 之间。当实例的 CPU 利用率超过您设置的目标时,Spanner 会立即向该实例添加计算容量。当 CPU 利用率显著低于目标值时,Spanner 会移除计算容量。如需获取指导,请参阅确定 CPU 利用率目标
存储空间利用率目标 Spanner 扩容前可在节点上使用的存储空间百分比。此目标可确保您始终有足够的计算容量来应对存储的数据量波动。该值必须介于 10-99% 之间。如需获取指导,请参阅确定存储空间利用率目标
最低限制 Spanner 可将实例缩容到的最低计算容量。最小值不能低于您为上限设置的值的 10%。例如,如果上限为 40 个节点,则下限必须至少为 4 个节点。10% 的要求是硬性限制。 如需指导,请参阅确定最低限制
上限 Spanner 可将实例扩容到的最大计算容量。对于节点,此值必须大于 1 个节点(或 1, 000 个处理单元),且等于或大于节点数或处理单元数下限。值不能超过您为最小计算容量选择的数量的 10 倍。10 次这一要求是硬性限制。如需指导,请参阅确定上限

配置代管式自动扩缩器

本部分介绍如何确定要为代管式自动扩缩器参数选择的数字。设置初始值后,请监控您的实例并根据需要调整数值。

确定 CPU 利用率目标

实例的最佳目标取决于工作负载的延迟时间和吞吐量要求。如需查看我们针对单区域、双区域和多区域实例配置的 CPU 用量上限建议,请参阅高 CPU 利用率提醒

通常,如果观察到延迟时间过长,则应降低 CPU 利用率目标。

确定存储空间利用率目标

对于自动扩缩,存储空间利用率目标表示为每个节点的百分比。对于具有 1 个节点(1000 个处理单元)及更大的实例,每个节点的存储空间大小上限为 4 TB。

确定上限

您选择的最大计算容量值等于实例处理最大量流量所需的计算容量,即使您预计在大多数情况下不会达到该卷容量。Spanner 扩容后的计算容量绝不会超过其需求。您也可以将此数字视为您愿意支付的最高计算容量。如需详细了解可接受的值,请参阅自动扩缩器参数

该上限必须同时支持 CPU 利用率目标以及您为自动扩缩设置的存储空间利用率目标。

  • 如果要将实例从手动分配更改为代管式自动扩缩,请找到该实例在过去一两个月内具有的最高计算容量。您的托管式自动扩缩器的数量上限应至少达到该上限。

  • 如果要为新实例启用代管式自动扩缩器,请查看其他实例的指标,并在设置上限时参考这些指标。

  • 如果您有新的工作负载,并且不确定其增长情况,可以估算满足内置存储空间利用率目标所需的计算容量,稍后再调整该数量。

您还需要知道节点上剩余多少配额,因为代管式自动扩缩器无法将实例配置为具有超过配额的计算容量。如需了解详情,请参阅节点限制

在实例启动并运行并启用自动扩缩后,请监控实例,并确保您为最大限制选择的值至少不低于 CPU 目标建议的限制和存储目标的建议限制。

确定最低限制

您可以为代管式自动扩缩器设置下限,以确保您的 Spanner 实例可以缩减到最小、最具成本效益的大小。Spanner 会自动防止节点数低于维持 CPU 和存储空间利用率目标所需的最小值。

托管式自动扩缩器允许的最小值为 1 个节点或 1000 个处理单元。如果您为现有实例启用自动扩缩,但该实例的容量低于为托管式自动扩缩器配置的最小值,则该实例会在您启动时自动扩容至此最小值。

启动启用了托管自动扩缩的实例后,您应该执行初始测试,以确保它可以在最小规模下运行。您应定期重新测试,以确保其继续按预期运行。

如需详细了解接受的值,请参阅本文档中的代管式自动扩缩器参数

在许多情况下,您需要将最小值设为多个值。在以下情况下,请选择较高的数字或提高上限:

  • 当您预计流量将暂时增加,并且您希望确保有足够的计算容量时,即将发生峰值扩缩事件。
  • 应用发送的流量急剧增加。当您添加新的计算容量时,Spanner 会自动进行重新平衡以使用新的节点或处理单元。由于此过程可能需要几分钟时间,因此您可能需要考虑采用保守的方法并选择更高的最小值。这样,您的实例就可以顺畅地应对高峰时段。
  • 增加计算容量上限。最小值必须始终不超过计算容量目标上限的 10%。例如,如果您将节点数上限设置为 30,则必须将最小节点数设置为 3

如果您增加某个实例上的最小计算容量值,Spanner 会立即尝试将实例扩容到新的最小值。但需遵循标准限制条件。配额用尽后,更改代管式自动扩缩器配置的请求将失败,并且配置不会更新。

Google Cloud CLI 参数标志和限制

使用 Google Cloud CLI 配置托管式自动扩缩器时,您必须设置一些必需的标志。您可以使用一些可选标志来指示要使用节点还是处理单元。如需详细了解如何使用代管式自动扩缩器创建新实例,或对现有实例启用代管式自动扩缩,请参阅以下内容:

在实例上启用托管自动扩缩器时,必须使用以下标志:

  • autoscaling-high-priority-cpu-percent
  • autoscaling-storage-percent

如果您选择使用节点,则在启用代管式自动扩缩器时,还必须使用以下两个标志:

  • autoscaling-min-nodes
  • autoscaling-max-nodes

如果您选择使用处理单元,则在启用代管式自动扩缩器时,还必须使用以下两个标志:

  • autoscaling-min-processing-units
  • autoscaling-max-processing-units

使用 Google Cloud CLI 将代管式自动扩缩器添加到现有实例时,存在以下限制:

  • 不能将 --nodes 标志与 --autoscaling-min-nodes--autoscaling-max-nodes 标志一起使用,因为使用 --nodes 会设置特定数量的节点,而不是伸缩范围。同样,您不能将 --processing-units 标志与 autoscaling-min-processing-unitsautoscaling-max-processing-units 标志一起使用,因为使用 --processing-units 会设置特定数量的处理单元,而不是伸缩范围。
  • 您不能将节点和处理单元的标志混合在一起。例如,不能将 --autoscaling-max-nodesautoscaling-min-processing-units 搭配使用。

微调设置

请留意计算容量使用情况并视需要调整设置,尤其是在首次启用代管式自动扩缩器后。我们建议您使用 Google Cloud 控制台中的系统数据分析页面。

访问权限控制

如需配置代管式自动扩缩器,您需要是主帐号,所担任的角色对要配置的实例具有创建和更新权限

监控

Spanner 提供了多个指标,帮助您了解托管式自动扩缩器在扩缩以满足工作负载要求时的表现。这些指标还可以帮助您衡量设置是否最优,以满足业务的工作负载和费用要求。例如,如果您发现实例的节点数通常接近最大节点数,则您可以考虑提高最大节点数。如需详细了解如何监控 Spanner 资源,请参阅使用 Cloud Monitoring 监控实例

以下指标在 Google Cloud 控制台的系统数据分析页面上以图表形式显示。您还可以使用 Cloud Monitoring 查看这些指标。

  • spanner.googleapis.com/instance/autoscaling/min_node_count
  • spanner.googleapis.com/instance/autoscaling/max_node_count
  • spanner.googleapis.com/instance/autoscaling/min_processing_units
  • spanner.googleapis.com/instance/autoscaling/max_processing_units
  • spanner.googleapis.com/instance/autoscaling/high_priority_cpu_target_utilization
  • spanner.googleapis.com/instance/autoscaling/storage_target_utilization

日志记录

每次对实例进行扩缩时,Spanner 都会创建一个系统事件审核日志。

您可以在 Google Cloud 控制台的系统数据分析页面上查看代管式自动扩缩器系统事件日志。

您还可以使用日志浏览器查看日志:

  1. 在 Google Cloud 控制台中,打开日志浏览器:

    转到 Logs Explorer

  2. 选择相应的 Google Cloud 项目。

  3. 查询字段中,输入以下查询:

     protoPayload.methodName="AutoscaleInstance"
    

    您可以添加以下查询,以进一步过滤到日志中:

    resource.type="spanner_instance"
    resource.labels.instance_id=INSTANCE_ID
    resource.labels.project_id=PROJECT_ID
    logName="projects/span-cloud-testing/logs/cloudaudit.googleapis.com%2Fsystem_event"
    protoPayload.methodName="AutoscaleInstance"
  4. 点击运行查询

查询结果窗格显示过去一小时的日志。

如需详细了解如何查看日志,请参阅 Cloud Logging。 您可以在 Google Cloud 的日志浏览器页面中设置基于日志的提醒,也可以使用 Cloud Monitoring API 设置。

后续步骤