自动扩缩工具概览

本页介绍了 Spanner 的自动扩缩器工具(自动扩缩器)。它是一种开源工具,可用作 Spanner 的配套工具。借助此工具,您可以根据所使用的容量自动增加或减少一个或多个 Spanner 实例中的计算容量。

如需详细了解如何在 Spanner 中进行扩缩,请参阅自动扩缩 Spanner。如需了解如何部署自动扩缩器工具,请参阅以下内容:

本页介绍了自动扩缩器的功能、架构和概要配置。这些主题将指导您完成在每种不同拓扑中的自动扩缩器部署到受支持的运行时之一。

自动扩缩器

自动扩缩器工具对于管理 Spanner 部署的利用率和性能非常有用。为了帮助您在费用控制和性能需求之间取得平衡,自动扩缩器工具会监视您的实例并自动添加或删除节点或处理单元,以帮助确保它们保持在以下参数范围内:

加上或减去可配置的边际

自动扩缩 Spanner 部署可让您的基础架构自动适应和扩缩以满足负载要求,几乎不需要干预。自动扩缩功能还可为预配的基础架构设置适当的容量,从而帮助您最大限度地减少所产生的费用。

架构

自动扩缩器有两个主要组件,即轮询器和规模扩缩器。虽然您可以将配置不同的自动扩缩器部署到配置不同的多个拓扑中的多个运行时,但这些核心组件的功能是相同的。

本部分详细介绍了这两个组件及其用途。

轮询器

轮询器会收集和处理一个或多个 Spanner 实例的时间序列指标。轮询器对每个 Spanner 实例的指标数据进行预处理,以便仅评估最相关的数据点并将其发送到 Scaler。轮询器执行的预处理还可以简化区域、双区域和多区域 Spanner 实例的阈值的评估流程。

标量

扩缩器可评估从轮询器组件接收的数据点,并确定是否需要调整节点或处理单元数量,以及如果需要,则调整多大的幅度。该函数将指标值与阈值进行比较,加上或减去允许的边际,并根据配置的扩缩方法调整节点或处理单元数量。如需了解详情,请参阅扩缩方法

在整个流程中,自动扩缩器工具都会将建议和操作的摘要写入 Cloud Logging 以进行跟踪和审核。

自动扩缩器功能

本部分介绍了自动扩缩器工具的主要功能。

管理多个实例

自动扩缩器工具可以跨多个项目管理多个 Spanner 实例。多区域实例、双区域实例和区域实例在扩缩时使用的利用率阈值也不同。例如,多区域部署和双区域部署在 45% 高优先级 CPU 利用率时进行扩缩,而区域部署在 65% 的高优先级 CPU 利用率时进行扩缩,两者加上或减去允许的边际。如需详细了解不同的扩缩阈值,请参阅高 CPU 利用率提醒

独立的配置参数

每个自动扩缩的 Spanner 实例可以有一个或多个轮询时间表。每个轮询时间表都有自己的一组配置参数。

这些参数确定以下因素:

  • 控制实例大小的最小或最大节点数或处理单元数,可帮助您控制所产生的费用。
  • 扩缩方法,用于调整您的工作负载的 Spanner 实例。
  • 冷却期,可让 Spanner 管理数据拆分。

扩缩方法

自动扩缩器工具为 Spanner 实例(阶梯、线性和直接)支持扩容和缩容。每种方法旨在支持不同类型的工作负载。创建独立的轮询时间表时,您可以将一个或多个方法应用于自动扩缩的每个 Spanner 实例。

以下部分详细介绍了这些缩放方法。

阶梯

阶梯扩缩对于规模较小或具有多个峰值的工作负载非常有用。它预配了一个自动扩缩事件,使其可以平滑处理所有负载。

下图显示了具有多个负载水平或阶梯的负载模式,其中每个阶梯有多个小峰值。此模式非常适合阶梯方法。

加载模式包含多个阶梯。

超过负载阈值时,此方法会使用固定但可配置的数字预配和移除节点或处理单元。例如,系统会为每个扩缩操作添加或移除三个节点。通过更改配置,您可以允许在任何时间添加或移除增量更大的容量。

线性

线性扩缩最适合负载逐步变化或具有一些大峰值的负载模式。该方法会计算使利用率低于扩缩阈值所需的最小节点数或处理单元数。每个扩缩事件中添加或移除的节点或处理单元数不限于固定步数。

下图中的示例负载模式显示了负载较大的突然增加和减少。这些波动不会像在上一张图表中的阶梯一样明显。使用线性扩缩可以更好地处理此模式。

具有波动的负载模式。

自动扩缩器工具会使用观察到的利用率与利用率阈值的比率,计算当前节点或处理单元数量是增加还是减少部分。

计算新节点或处理单元数的公式如下所示:

newSize = currentSize * currentUtilization / utilizationThreshold

直接

直接扩缩功能可以即时提升容量。此方法旨在支持批处理工作负载,在其中,需要定期按已知的开始时间调度预先定义的较高节点计数。此方法会将实例扩容到在时间表中指定的最大节点或处理单元数,并且旨在用作线性或阶梯方法之外的补充方法。

下图描述了负载计划的计划大幅增加,而自动扩缩器为使用直接方法提前预配了容量。

预配置直接扩缩的负载模式。

当批量工作负载完成并且利用率达到正常水平(具体取决于您的配置)后,系统将应用线性或阶梯扩缩功能来自动缩减实例。

配置

自动扩缩器工具有不同的配置选项,可用于管理 Spanner 部署的扩缩。虽然 Cloud Run 函数和 GKE 参数相似,但它们的提供方式不同。如需详细了解如何配置自动扩缩器工具,请参阅配置 Cloud Run 函数部署配置 GKE 部署

高级配置

自动扩缩器工具具有高级配置选项,让您可以更精细地控制 Spanner 实例的管理时间和方式。以下各部分将介绍这些控件的选择。

自定义阈值

自动扩缩器工具根据以下负载指标,使用建议的 Spanner 阈值确定要添加或移除实例的节点或处理单元数:

  • 高优先级 CPU
  • CPU 24 小时滚动平均值
  • 存储空间利用率

我们建议您使用为 Spanner 指标创建提醒中所述的默认阈值。但是,在某些情况下,您可能需要修改自动扩缩器工具使用的阈值。例如,您可以使用较低的阈值,让自动扩缩器工具响应速度比较高的阈值还快。此修改有助于防止系统以更高的阈值触发提醒。

自定义指标

虽然自动扩缩器工具中的默认指标可以满足大多数性能和扩缩场景,但在某些情况下,您可能需要指定自己的指标,以确定何时进行扩缩。在这些情况下,您可以使用 metrics 属性在配置中定义自定义指标。

边际

边际定义了阈值的上限和下限。只有在指标值大于上限或小于下限时,自动扩缩器工具才会触发自动扩缩事件。

此参数的目标是避免自动扩缩事件围绕阈值附近的小工作负载波动触发,从而减少自动扩缩器操作中的波动量。阈值和边际共同根据指标值您想要定义以下范围:

[threshold - margin, threshold + margin]

边际越小,范围越小,自动扩缩事件触发的可能性就越高。

指定指标的边际参数是可选的,并且默认为该参数前后的 5 个百分点。

数据拆分

Spanner 将称为“分块”的数据范围分配给节点或名为处理单元的节点子级。节点或处理单元独立管理和处理分配的分片中的数据。数据分块是基于多个因素创建的,包括数据量和访问模式。如需了解详情,请参阅 Spanner - 架构和数据模型

数据会整理成分片,Spanner 会自动管理分片。因此,当自动扩缩器工具添加或移除节点或处理单元时,它需要为 Spanner 后端留出足够的时间来重新分配和重新组织分片,因为在实例中添加或移除了新的容量。

自动扩缩器工具对纵向扩容和缩减事件使用冷却期来控制在实例中添加或移除节点或处理单元的速度。此方法为实例留出重新整理计算节点或处理单元与数据分块之间的关系的时间。默认情况下,纵向扩容和缩减冷却期设置为以下最小值:

  • 扩容值:5 分钟
  • 缩减值:30 分钟

如需详细了解扩缩建议和冷却期,请参阅扩缩 Spanner 实例

价格

自动扩缩器工具在计算、内存和存储方面消耗的资源很少。在部署到 Cloud Run 函数后,自动扩缩器的资源利用率通常在其依赖服务(Cloud Run 函数、Cloud Scheduler、Pub/Sub 和 Firestore)的免费层级内。具体取决于您对自动扩缩器的配置。

您可以使用价格计算器根据您的预计使用情况来估算环境费用。

后续步骤