本页面介绍代管式自动扩缩器的工作原理,以及使用代管式自动扩缩器时的费用和限制。它还提供了一些信息,可帮助您确定如何配置托管式自动扩缩器。
代管式自动扩缩器的工作原理
启用托管式自动扩缩器后,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-units
或autoscaling-max-processing-units
标志一起使用,因为使用--processing-units
会设置特定数量的处理单元,而不是伸缩范围。 - 您不能将节点和处理单元的标志混合在一起。例如,不能将
--autoscaling-max-nodes
与autoscaling-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 控制台的系统数据分析页面上查看代管式自动扩缩器系统事件日志。
您还可以使用日志浏览器查看日志:
在 Google Cloud 控制台中,打开日志浏览器:
选择相应的 Google Cloud 项目。
在查询字段中,输入以下查询:
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"
点击运行查询。
查询结果窗格显示过去一小时的日志。
如需详细了解如何查看日志,请参阅 Cloud Logging。 您可以在 Google Cloud 的日志浏览器页面中设置基于日志的提醒,也可以使用 Cloud Monitoring API 设置。
后续步骤
- 了解如何创建实例
- 了解如何修改实例以添加自动扩缩功能或更改自动扩缩设置
- 了解如何将实例从使用自动伸缩更改为手动伸缩