托管式自动扩缩器

本页介绍了托管式自动扩缩器的运作方式,以及使用托管式自动扩缩器时的费用和限制。它还提供了有助于您确定如何配置托管式自动扩缩器的信息。

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

启用托管式自动扩缩器后,Spanner 会自动调整实例的大小。托管式自动扩缩器功能会根据负载的增加或减少,对实例的工作负载或存储需求的变化做出响应。托管式自动扩缩功能可以扩容(向实例添加计算容量),也可以缩容(从实例中移除计算容量)。

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

Spanner 托管的自动扩缩器会根据以下因素确定所需的计算容量:

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

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

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

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

当 Spanner 缩减实例时,移除计算容量的速度会比扩容时慢,以减少对延迟时间的影响。

费用

您的 Spanner 总费用可能会降低或增加,具体取决于您在启用托管式自动扩缩器之前对 Spanner 实例的配置方式,以及您为托管式自动扩缩器设置的限制。

例如,如果您之前手动配置 Spanner 实例,使其拥有足够的计算容量来随时处理高峰工作负载,那么使用托管式自动扩缩器后,您的费用可能会降低,因为它会在实例空闲时减少计算容量。

如果您之前手动配置 Spanner 实例,使其具有足够的计算容量来处理平均工作负载,并且当工作负载流量增加时总体性能会下降,那么使用托管式自动扩缩程序的费用可能会更高,因为托管式自动扩缩程序可能会在实例繁忙时增加计算容量。不过,这样可以为用户提供更稳定的性能。

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

限制

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

  • 启用托管式自动扩缩器功能后,您无法移动实例。您必须先停用托管式自动扩缩器,然后再移动实例。迁移实例后,您可以重新启用托管式自动扩缩器。
  • 您必须将自动扩缩实例的最小限制设置为 1, 000 个处理单元或更多,或 1 个节点或更多。
  • 在现有实例上启用自动扩缩后,现有实例容量可能会低于您在托管式自动扩缩器上配置的下限值。不过,在您启动实例时,实例会自动扩缩到配置的最小值。例如,如果您的实例只有一个节点,但您将最小值设置为 2 个节点,那么在您启动实例时,它会自动扩容到 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 个节点(1, 000 个处理单元)及更大的实例,存储空间大小限制为每个节点 10 TB。

确定上限

您选择作为计算容量上限的值等于实例处理最大流量所需的计算容量,即使您预计大部分时间不会达到该数量也是如此。Spanner 扩容的计算容量绝不会超出所需的数量。您也可以将此数字视为您愿意支付费用的最高计算容量。如需详细了解接受的值,请参阅自动扩缩器参数

最大限制必须同时满足您为自动扩缩设置的 CPU 利用率目标和存储空间利用率目标。

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

  • 如果您要为新实例启用托管式自动扩缩程序,请查看其他实例的指标,并在设置上限时将其用作指导。

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

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

实例启动后并在启用自动扩缩功能的情况下运行时,监控实例并确保您为上限选择的值至少与 CPU 目标值和存储目标值的建议上限相同。

确定最低限额

您可以为托管式自动扩缩器设置最小限制,以确保 Spanner 实例可以缩容到最小、最经济实惠的大小。Spanner 会自动防止节点数低于保持 CPU 和存储空间利用率目标所需的最小值。

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

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

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

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

  • 您有一个即将到来的高峰规模事件,希望流量暂时增加,并且希望确保有足够的计算容量。
  • 应用发送的流量急剧增加。当您添加新的计算容量时,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 控制台中的系统数据分析页面上查看托管的自动扩缩器系统事件日志。

您还可以使用 Logs Explorer 查看日志:

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

    转到日志浏览器

  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 来设置基于日志的提醒

后续步骤