自动扩缩

本页面介绍了自动扩缩的工作原理。在阅读本页内容之前,您应该首先熟悉 Bigtable 概览实例、集群和节点

在 Bigtable 中,实例是集群的容器,而集群则是特定于位置的资源,用于处理请求。每个集群都有一个或多个节点,而节点是用于管理数据的计算资源。在实例中创建集群时,您可以选择手动节点分配自动扩缩

使用手动节点分配时,集群中的节点数将保持不变,直到您进行更改。启用自动扩缩功能后,Bigtable 会持续监控集群,并在必要时自动调整集群中的节点数。自动扩缩功能适用于所有 Bigtable 区域的 HDD 和 SSD 集群。

您可以在 Google Cloud 控制台中使用 gcloud 或使用 Java 版 Cloud Bigtable 客户端库配置自动扩缩功能。

何时使用自动扩缩

在大多数情况下,我们建议您启用自动扩缩。自动扩缩具有以下优势:

  • 费用 - 自动扩缩功能可以帮助您优化费用,因为 Bigtable 会尽可能减少集群中的节点数。这有助于避免过度预配。
  • 性能 - 自动扩缩功能允许 Bigtable 在工作负载发生变化或数据存储需求增加时自动向集群添加节点。这样可以确保集群有足够的节点来满足目标 CPU 利用率和存储需求,有助于维护工作负载性能目标。
  • 自动化 - 自动扩缩可降低管理复杂性。您无需手动监控和扩缩集群大小或编写应用来执行这些任务,因为 Bigtable 服务会自动完成这些工作。

自动扩缩可能不适合以下工作负载类型,因为即使 Bigtable 在流量增加时快速添加节点,也需要一些时间来均衡额外的节点。

  • 突发流量
  • 突发的批量工作负载

如果您的使用高峰是可预测的或定期安排的,您可以使用自动扩缩并在计划的爆发期之前调整设置。如需了解详情,请参阅节点重新均衡时出现延迟现象

自动扩缩的工作原理

自动扩缩是指通过添加或移除节点来更改集群大小,从而自动进行扩缩的过程。启用自动扩缩功能后,Bigtable 会自动调整集群的大小。如果集群的工作负载或存储空间需要波动,Bigtable 要么通过扩容向集群添加节点,要么通过缩容从集群中移除节点。

Bigtable 自动扩缩功能根据以下维度来确定所需的节点数:

  • CPU 利用率目标
  • 存储空间利用率目标
  • 节点数下限
  • 节点数上限

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

随着节点数量的变化,Bigtable 会持续优化存储空间,跨节点重新平衡数据,以确保流量均匀分布且没有节点过载。

集群扩容后,Bigtable 会自动重新平衡集群中的节点以获得最佳性能。在扩缩和重新平衡期间,所有请求将继续到达集群。如需了解详情,请参阅扩缩限制

如果集群已扩容到节点数上限并且超出 CPU 利用率目标,则请求可能会发生高延迟或失败。如果集群已扩容到节点数上限并且超出存储空间利用率上限,则写入请求将失败。如需详细了解存储空间限制,请参阅每个节点的存储空间

当向小型集群(例如单节点集群)添加节点时,您可能会发现,随着集群重新平衡,延迟会暂时增加。这是因为额外的节点使集群的大小成比例地增加了一倍。同样,如果集群的大小从两个节点减少到一个节点,可能会出现一些延迟。

集群缩容时,节点的移除速度会比扩容时慢,以防止对延迟时间产生任何影响。如需了解详情,请参阅扩缩限制

自动扩缩参数

创建或修改集群以及选择自动扩缩时,您可以定义 CPU 利用率目标、节点数下限和节点数上限的值。您可以配置存储空间利用率目标,也可以将其保留为默认值,即 50%(SSD 为 2.5 TB,HDD 为 8 TB)。

参数 说明
CPU 利用率目标

集群 CPU 容量的百分比。介于 10% 到 80% 之间。如果集群的 CPU 利用率超过您设置的目标,Bigtable 会立即向集群添加节点。当 CPU 利用率显著低于目标时,Bigtable 会移除节点。 如需获取相关指导,请参阅确定 CPU 利用率目标

节点数下限

Bigtable 会将集群缩减到的最低节点数。如果启用了2 倍节点伸缩,则此值必须为偶数。该值必须大于零,并且不能小于为节点数上限设置的值的 10%。例如,如果节点数上限为 40,则节点数下限必须至少为 4。10% 的要求是硬性限制。 如需获取相关指导,请参阅确定节点数下限

节点数上限

您希望集群扩容到的最高节点数。如果启用了2 倍节点伸缩,则此值必须为偶数。该值必须大于零并且大于或等于节点数下限。该值不能超过您为节点数下限选择的数值的 10 倍。10 倍要求是硬性限制。如需获取相关指导,请参阅确定节点数上限

存储空间利用率目标

在 Bigtable 扩容之前,您可以在 SSD 或 HDD 集群中存储的最大 TB 数(以每个节点为单位)。此目标可确保始终有足够的节点来处理您存储的数据量波动。如需了解详情,请参阅确定存储空间利用率目标。此目标不包括不经常访问层级。

SSD 和不频繁访问的存储空间的组合使用情况

在 Bigtable 扩容之前,您可以在 SSD 和低频访问集群中存储的最大 TB 数(以每个节点为单位)。此目标可确保始终有足够的节点来处理您存储的数据量波动。如需了解详情,请参阅本文档的分层存储和自动扩缩部分。

配置自动扩缩

本部分介绍如何选择自动扩缩功能参数。设置初始值后,监控您的集群并在必要时调整数量。

确定 CPU 利用率目标

根据唯一工作负载确定 CPU 利用率目标。集群的最佳目标取决于工作负载的延迟时间和吞吐量需求。如需了解详情,请参阅规划 Bigtable 容量

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

确定存储空间利用率目标

如果您的应用对延迟时间较为敏感,请将存储空间利用率保持在 60% 以下。如果您的应用对延迟时间不敏感,则可以选择 70% 或更高的存储空间利用率目标。如需了解详情,请参阅规划 Bigtable 容量

对于自动扩缩,存储空间利用率表示为每个节点的存储空间字节数,而不是百分比。存储空间利用率目标是按节点指定的,但会应用于整个集群。节点的容量限制为每节点 5 TB(对于 SSD 存储)和每节点 16 TB(对于 HDD 存储)。

下表显示了典型存储空间利用率目标百分比的目标数量。 Google Cloud 控制台接受每个节点的值 (TB),而 gcloud CLI、API 和 Cloud Bigtable 客户端库接受每个节点的整数值 (GiB)。

百分比 SSD HDD
80% 4 TB 或 4,096 GiB 12.8 TB 或 13,107 GiB
70% 3.5 TB 或 3,584 GiB 11.2 TB 或 11,468 GiB
60% 3 TB 或 3,072 GiB 9.6 TB 或 9,830 GiB
50% 2.5 TB 或 2,560 GiB 8 TB 或 8,192 GiB

分层存储和自动扩缩

分层存储(预览版)不会影响本文档的确定存储空间利用率目标值部分中所述的 SSD 自动扩缩。如果您启用不常访问的存储空间作为分层存储的一部分,自动扩缩功能还会确保 SSD 和不常访问的存储空间的组合容量不超过每个节点 32 TB 的限制。达到此限制后,Bigtable 会自动扩容。

例如,在 SSD 集群上,如果您将每个节点的存储空间利用率目标设置为 2.5 TB(50%),并且您的不频繁访问使用量足够高,以至于分层存储的存储空间使用量超过了限制,Bigtable 会添加节点。即使您的 SSD 使用率保持在 50% 的目标值以内,也会发生这种情况。

下表可帮助您了解自动扩缩功能如何根据 SSD 用量和不频繁访问的用量来建议节点数量:

场景 存储空间利用率目标 利用率百分比 固态硬盘使用情况 非频繁访问使用情况 SSD 和不常访问的存储空间总计 建议的节点数
SSD 用量在目标范围内,且没有不频繁访问的用量。 5 TB 100% 小于 5 TB 0 TB 小于 5 TB 1
SSD 用量已超出每个节点的存储空间限制。 5 TB 100% 6 TB 0 TB 6 TB 2
SSD 使用量和不常访问的存储空间使用量在分层存储空间限额范围内。 5 TB 100% 5 TB 27 TB 32 TB 1
分层存储空间用量超出了分层存储空间上限。 5 TB 100% 5 TB 28 TB 33 TB 2
SSD 用量几乎超过 SSD 用量目标值,并且没有不频繁访问的用量。 3 TB 60% 3 TB 0 TB 3 TB 1
SSD 用量几乎超出 SSD 用量目标,分层存储空间用量几乎超出分层存储空间上限。 3 TB 60% 3 TB 29 TB 32 TB 1
SSD 使用量超过了 SSD 存储空间目标,并且没有不常访问的使用量。 2.5 TB 50% 4 TB 0 TB 4 TB 2
分层使用量超出了分层存储空间上限。 2.5 TB 50% 2 TB 31 TB 33 TB 2

如需详细了解分层存储,请参阅分层存储概览

确定节点数上限

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

需要同时满足您设置的 CPU 利用率目标和 Bigtable 设置的存储空间利用率目标的最大数量。

如果要将集群从手动分配更改为自动扩缩,请查找集群在过去一个月左右的时间中拥有的节点数上限。您的自动扩缩上限至少应为该数字。

如果您为现有实例中的新集群启用自动扩缩功能,请使用实例中其他集群的指标作为指导。

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

如果您启用了分层存储,则必须考虑每个节点 32 TB 的存储空间限制。即使您的 SSD 使用率较低,大量不经常访问层中的数据也可能会触发节点伸缩。

为了达到此数量,请估算您计划在集群上存储的数据量,然后将该数量除以您使用的存储类型的存储空间利用率目标。

例如,如果您在 SSD 集群上存储 10 TB,则可以将 10 TB 除以 2.5 TB,这是为使用自动扩缩功能的 SSD 集群默认设置的存储空间利用率目标。结果为 4,这意味着 4 是可以处理该数据量的节点数,最大值应大于该数字

通过使用相同的公式,以下示例展示了某些示例存储量可能需要的节点数:

每个集群的 SSD 存储空间 最小节点数上限
25 TB 10
35 TB 14
50 TB 20

集群启动后并在启用自动扩缩功能的情况下运行时,监控集群并确保您为节点数上限选择的值至少与 recommended number of nodes for CPU targetrecommended number of nodes for storage target 相同。

确定节点数下限

您可以将最小值设置为低至 1,以确保 Bigtable 可以尽可能缩容到最小、最经济实惠的大小。该集群绝不会太小,因为 Bigtable 会自动防止节点数低于保持 CPU 和存储空间利用率目标所需的最小值。 如需详细了解接受的值,请参阅自动扩缩参数

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

  • 您有一个即将到来的高峰规模事件,希望流量暂时增加,并且希望确保有足够的容量。
  • 应用发送的流量急剧增加。添加新节点后,Bigtable 会自动重新平衡到新节点。由于此过程可能需要几分钟,因此您通常最好采用保守的方法并选择更高的最小值,以便您的集群可以无缝应对高峰期。
  • 增加节点数上限。下限必须始终为节点数上限的 10% 或更少。例如,如果将上限设置为 30,则必须将下限设置为 3。

增大集群的节点数下限后,Bigtable 会立即尝试将集群扩容至新的下限值。但是,需遵循标准限制条件,这意味着,如果某个可用区已无节点配额可用,则系统不会预配额外的节点来满足配置的下限值。Bigtable 会继续尝试添加节点并为每次失败尝试创建相应的审核日志条目,直到成功将集群扩容至新的节点数下限。在这种情况下,Bigtable 不会更改所配置的值。因此,您可能会观察到集群的节点数小于下限值,直到扩容完成。

微调设置

启用自动扩缩功能后,请务必监控其行为,并根据需要调整设置。使用监控指标可观察以下内容:

  • 建议的节点数:请密切关注 recommended_node_count_for_cpurecommended_node_count_for_storage 指标。这些指标分别表示根据 CPU 和存储空间利用率目标值计算出的理想节点数。
  • 已配置的节点数:将建议的节点数与实际配置的节点数进行比较。如果集群始终使用的节点数高于建议值,您可以考虑减少节点数下限,以降低费用。
  • 节点数上限:确保节点数上限足够高,以便集群可以扩容来满足需求。如果您发现集群经常达到节点数上限,请增加该上限以提供更多容量。

您还可以调整 CPU 利用率目标值以提高性能。如果您发现延迟问题,可能需要降低 CPU 利用率目标值,以确保集群在需求增加时更积极地扩容。反之,如果集群始终过度预配,但延迟时间可以接受,您可以考虑提高 CPU 目标值。

用于复制的账号

在使用复制功能的实例中,每个集群的自动扩缩设置和活动均完全独立于实例中其他集群的设置。您必须为实例中的每个集群配置扩缩模式。

通常,对于复制实例,您应该为实例中的每个集群启用自动扩缩。对于实例中的每个集群,自动扩缩配置通常相同,但根据每个集群的用例、工作负载和性能要求而异。

由于复制的实例中的集群会执行一些额外工作来管理复制,因此您应该为集群选择比单集群实例更高的节点数上限。如需了解详情,请参阅复制和性能

访问权限控制

要配置自动扩缩功能,您需要是具有所配置集群和实例的 createupdate 权限的角色中的主账号。

监控

Bigtable 提供了多种指标,可帮助您了解 Bigtable 自动扩缩功能在扩容和缩容规模以满足工作负载要求时的工作原理。这些指标还可以帮助您衡量您的设置是否最符合您的企业的工作负载和费用要求。例如,如果您发现集群的节点数通常接近节点数上限,则可以考虑提高节点数上限。如需详细了解如何监控 Bigtable 资源,请参阅监控实例

以下指标显示在 Google Cloud 控制台的集群概览页面上的图表中。您还可以使用 Cloud Monitoring 查看这些指标。

  • bigtable.googleapis.com/cluster/autoscaling/min_node_count
  • bigtable.googleapis.com/cluster/autoscaling/max_node_count
  • bigtable.googleapis.com/cluster/autoscaling/recommended_node_count_for_cpu
  • bigtable.googleapis.com/cluster/autoscaling/recommended_node_count_for_storage

日志记录

Bigtable 会在每次扩缩集群时发出系统事件审核日志。日志条目类似于以下内容:

Grew from 9 to 10 nodes to maintain CPU utilization at 60%.

您可以在 Google Cloud 控制台中的 Bigtable 集群概览页面上查看自动扩缩系统事件日志。您还可以使用日志浏览器查看它们:

  1. 导航到日志浏览器:

    转到日志浏览器

    选择相应的 Google Cloud 项目。

  2. 查询字段中,输入以下查询:

    resource.type="audited_resource" resource.labels.service="bigtableadmin.googleapis.com"
    resource.labels.method="AutoscaleCluster"
    
  3. 点击运行查询

    查询结果窗格显示过去一小时的日志。

如需详细了解如何查看日志,请参阅 Cloud Logging

后续步骤