自动扩缩

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

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

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

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

何时使用自动扩缩

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

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

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

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

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

自动扩缩的工作原理

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

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

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

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

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

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

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

向小型集群(例如一个节点的集群)添加节点后,您可能会发现延迟时间暂时增加,这是因为集群正在重新平衡。这是因为额外的节点会使集群的大小成比例地增加一倍。同样,如果集群的大小从 2 个节点缩减到 1 个节点,可能会出现一些延迟。

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

自动扩缩参数

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

参数 说明
CPU 利用率目标

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

节点数下限

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

节点数上限

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

存储空间利用率目标

在 Bigtable 扩容之前,每个节点可以存储的最大 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

确定节点数上限

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

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

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

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

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

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

例如,如果您在 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 不会更改所配置的值。因此,您可能会观察到集群的节点数小于下限值,直到扩容完成。

微调设置

密切关注您的节点使用情况,并在必要时调整设置,尤其是在首次启用自动扩缩功能后。

用于复制的账号

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

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

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

访问权限控制

如需配置自动扩缩,您需要是具有所配置集群和实例的 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

后续步骤