代管式自动扩缩器

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

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

启用代管式自动扩缩器后,Spanner 会自动为您调整实例的大小。当负载增加或减少时,代管式自动扩缩器功能会对实例的工作负载或存储需求的变化做出响应。代管式自动扩缩会纵向扩容,为实例添加计算容量,或缩减,从而移除实例的计算容量。

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

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

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

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

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

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

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

费用

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

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

如果您过去手动配置 Spanner 实例以使其有足够的计算容量来应对平均工作负载,并且当工作负载流量增加时,整体性能会下降,则使用代管式自动扩缩器产生的费用可能会更高,因为当实例处于忙碌状态时,代管式自动扩缩器可能会增加计算容量。不过,这可以为用户提供更加稳定的性能。

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

限制

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

  • 启用代管式自动扩缩器功能后,您无法移动实例。您必须先停用代管式自动扩缩器,然后再移动实例。移动实例后,您可以重新启用代管式自动扩缩器。
  • 您必须将自动扩缩实例的下限设置为 1000 个或更多处理单元,或者 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 个节点(1, 000 个处理单元)及更大的实例,每个节点的存储空间大小上限为 4 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 控制台中,打开 Logs Explorer:

    转到 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 进行设置。

后续步骤