托管式自动扩缩器

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

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

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

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

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

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

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

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

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

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

您可以选择以非对称方式自动扩缩只读副本。如需了解详情,请参阅非对称只读自动扩缩

费用

您的 Spanner 总费用可能会因您在启用托管式自动扩缩器之前配置 Spanner 实例的方式以及您为托管式自动扩缩器设置的限制而有所不同。

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

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

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

限制

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

  • 启用托管式自动扩缩器功能后,您无法移动实例。您必须先停用托管式自动扩缩器,然后再迁移实例。迁移实例后,您可以重新启用托管式自动扩缩器。
  • 您必须将自动扩缩实例的最小限制设置为 1000 个处理单元或更多,或者 1 个节点或更多。
  • 在现有实例上启用自动扩缩功能后,现有实例的容量可能低于您在托管式自动扩缩器上配置的下限值。不过,当您启动实例时,实例会自动扩容到配置的最小值。例如,如果您的实例只有一个节点,但您将最小值设置为两个节点,那么当您启动实例时,该实例会自动扩容到 2 个节点。
  • 如果某个可用区或区域发生故障,托管式自动扩缩器会扩缩高优先级工作负载的 CPU,以遵循 Spanner 的高优先级 CPU 建议。它不考虑总 CPU 利用率。当 CPU 利用率超过 100% 时,可能会导致性能下降。如果您的工作负载对延迟时间或性能非常敏感,不妨考虑自定义开源自动扩缩器工具,以便根据总 CPU 进行扩缩。

托管式自动扩缩器参数

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

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

配置托管式自动扩缩器

本部分介绍如何确定为托管式自动扩缩器参数选择哪些数值。设置初始值后,监控您的实例并在必要时调整数量。

确定高优先级 CPU 利用率目标

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

托管式自动扩缩器在扩缩 CPU 使用量时会考虑高优先级工作负载。它不考虑总 CPU 利用率。当 CPU 利用率超过 100% 时,可能会导致性能下降。如果您的工作负载对延迟时间或性能非常敏感,请考虑自定义开源自动扩缩器工具,以便根据总 CPU 进行扩缩。

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

确定存储空间利用率目标

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

确定上限

您选择作为计算容量上限的值应等于实例处理最大流量所需的计算容量,即使您预计大部分时间不会达到该容量也是如此。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 控制台中的系统分析洞见页面。

非对称只读自动扩缩

启用托管式自动扩缩器后,您还可以启用只读副本并独立于其他副本自动扩缩只读副本。借助非对称只读自动扩缩,您可以根据只读区域的用量来控制其计算容量限制和 CPU 利用率目标值。这样可以优化本地读取流量模式并提高成本效益。以下自动扩缩配置参数可针对每个只读副本区域进行配置:

  • 最低计算容量限制
  • 计算容量上限
  • 高优先级 CPU 利用率目标

您可以通过创建新实例更新现有实例来启用非对称自动扩缩并配置这些参数。

对于每个副本,在现有实例上启用非对称自动扩缩时,适用以下规则:

  • 如果副本的当前计算容量介于为相应区域设置的自动扩缩最小值和最大值之间,则副本的计算容量不会发生变化。
  • 如果副本的当前计算容量低于为相应区域设置的自动扩缩下限,则计算容量会调整为与自动扩缩下限一致。
  • 如果副本的当前计算容量高于为相应区域设置的自动扩缩上限,则计算容量会调整为与自动扩缩上限一致。

访问权限控制

如需配置托管式自动扩缩器,您必须是具有所配置实例的创建和更新权限的角色的主账号。

监控

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 控制台中,打开 Spanner:

    转到 Spanner

  2. 选择已启用自动扩缩功能的实例。

  3. 在导航菜单中,点击系统分析洞见

  4. 在“系统分析洞见”页面上,找到计算容量指标。

  5. 点击查看日志以打开日志面板。

    计算容量日志窗格显示过去一小时的日志。

    如果您的实例启用了非对称只读自动扩缩,则日志摘要会提供每个副本的计算容量变化的说明和位置。例如 Increased from 1 to 2 nodes in us-central1 to maintain high priority CPU utilization at 80%。如果您未使用非对称自动扩缩,则日志摘要中不会提供位置信息。例如 Increased from 9 to 10 nodes to maintain high priority CPU utilization at 65%

使用 Logs Explorer 查看日志

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

  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 中的Logs Explorer页面中或使用 Cloud Monitoring API 设置基于日志的提醒

后续步骤