单区域和多区域配置

本页面介绍了实例配置以及 Cloud Spanner 提供的两种实例配置:单区域配置和多区域配置。还描述了单区域配置和多区域配置之间的差异和权衡。

实例配置

实例配置定义了该实例中数据库的地理位置和复制方式。创建实例时,您必须将其配置为“单区域”(所有资源包含在单个 Google Cloud 区域中)或“多区域”(资源跨多个区域)。您可以通过选择确定实例的数据存储位置的实例配置来进行该选择。

具有固定区域和复制拓扑的实例配置称为“基本实例配置”。您可以创建自定义实例配置并添加其他可选只读副本。请注意,您无法更改基本实例配置的复制拓扑。如需了解详情,请参阅只读副本

您还可以将实例从任何实例配置移动到任何其他单区域或多区域实例配置。

单区域配置

Google Cloud 服务目前可在北美洲、南美洲、欧洲、亚洲和澳洲的多个位置使用。如果您的用户和服务位于单个区域内,请选择单区域实例配置以实现最低延迟的读取和写入。

对于任何基本区域配置,Spanner 都会维护三个读写副本,每个副本都位于该区域的不同 Google Cloud 可用区中。每个读写副本均包含可操作数据库的完整副本,能够处理读写请求和只读请求。Spanner 在不同区域中使用副本,以便在发生单区域故障时,您的数据库仍然可用。

可用配置

Spanner 提供以下基本区域实例配置:

基本配置名称 区域说明 可选地区
美洲
northamerica-northeast1 蒙特利尔 叶形图标 低碳2
northamerica-northeast2 多伦多 叶形图标 低碳2
southamerica-east1 圣保罗 叶形图标 低碳2
southamerica-west1 圣地亚哥 叶形图标 低碳2
us-central1 爱荷华 叶形图标 低碳2 只读:asia-northeast1 1-OR
asia-south1 1-OR
europe-west2 1-OR
europe-west9 1-OR
us-east1 南卡罗来纳 只读:us-central1 1-OR
us-west1 1-OR
us-east4 北弗吉尼亚
us-east5 哥伦布
us-south1 达拉斯
us-west1 俄勒冈州 叶形图标 低碳2
us-west2 洛杉矶
us-west3 盐湖城
us-west4 拉斯维加斯
欧洲
europe-central2 华沙
europe-north1 芬兰 叶形图标 低碳2
europe-southwest1 马德里
europe-west1 比利时 叶形图标 低碳2 只读:us-central1 1-OR
us-west1 1-OR
europe-west2 伦敦 叶形图标 低碳2
europe-west3 法兰克福 叶形图标 低碳2
europe-west4 荷兰
europe-west6 苏黎世 叶形图标 低碳2
europe-west8 米兰
europe-west9 巴黎 叶形图标 低碳2
europe-west10 柏林
europe-west12 都灵
亚太地区
asia-east1 台湾
asia-east2 香港
asia-northeast1 东京
asia-northeast2 大阪
asia-northeast3 首尔
asia-south1 孟买
asia-south2 德里
asia-southeast1 新加坡
asia-southeast2 雅加达
australia-southeast1 悉尼
australia-southeast2 墨尔本
中东
me-central1 多哈
me-central2 达曼
me-west1 特拉维夫

复制

基本区域配置包含三个读写副本。每项 Spanner 变更都要求达成最小写票数(即,大多数投票副本同意)。在单区域配置中,当三个副本中有两个副本会达成最小写票数。如需详细了解主要区域和投票副本,请参阅复制

您可以创建自定义区域实例配置,并添加可选的只读副本。只读副本有助于扩缩读取并支持低延迟过时读取。这些只读副本不参与最小写票数,并且不会影响区域级实例的 Spanner >= 99.99% 的服务等级协议 (SLA)。您可以将“可选区域”列下列出的位置添加为可选的只读副本。如果您没有看到所需的只读副本位置,可以请求新的可选只读副本区域。如需了解详情,请参阅只读副本

单区域配置的性能最佳实践

为了实现最佳性能,请遵循以下最佳做法:

  • 设计架构以防止出现热点和其他性能问题。
  • 将关键计算资源布置在 Spanner 实例所在的同一区域中。
  • 预配足够的计算容量,使高优先级的总 CPU 利用率保持在 65% 以下。
  • 如需了解每个 Spanner 节点的吞吐量,请参阅单区域配置的性能

多区域配置

Spanner 单区域配置会在单个区域内的多个可用区之间复制数据。但是,在以下情况下,单区域配置可能并非最佳选择:

  • 如果您的应用经常需要从多个地理位置读取数据(例如,为了同时向北美和亚洲的用户提供数据)
  • 写入操作的发起位置与读取位置不同(例如,在北美的大型写入工作负载和欧洲的大型读取工作负载)

多区域配置还有其他优点,例如:

  • 在发生区域性故障时保持可用性。
  • 提供比单区域配置更高的可用性和服务等级协议 (SLA)。
  • 从多个区域传送写入操作。

根据实例配置的定义,通过多区域配置,您不仅可以在多个地区中复制数据库的数据,还可以在多个区域的多个地区中复制数据库的数据。这些额外的副本使您能够从靠近配置区域或位于配置区域内的多个位置以低延迟读取数据。但也有需要权衡的因素,因为在多区域配置中,仲裁(读写)副本分布在多个区域中。当这些副本互相通信以针对写入进行投票时,可能会产生额外的网络延迟时间。换句话说,多区域配置使您的应用可以在更多地方实现更快的读取速度,但代价是写入延迟时间会略有增加。

可用配置

Spanner 提供以下多区域基本实例配置:

同一大洲

基本配置名称 位置 读写区域 只读区域 见证者区域 可选地区
asia1 亚洲 东京:asia-northeast1 L2R
大阪:asia-northeast2 2R
首尔:asia-northeast3
asia2 A 亚洲 孟买:asia-south1 L2R
德里:asia-south2 2R
新加坡:asia-southeast1 1R
eur3 欧洲 比利时:europe-west1 L2R
荷兰:europe-west4 2R
芬兰:europe-north1
eur5 欧洲 伦敦:europe-west2 L2R
比利时:europe-west1 2R
荷兰:europe-west4 只读:us-central1 1-OR
us-east1 1-OR
eur6 欧洲 荷兰:europe-west4 L2R
法兰克福:europe-west3 2R
苏黎世:europe-west6 只读:us-east1 2-OR
nam3 北美洲 北弗吉尼亚:us-east4 L2R
南卡罗来纳:us-east1 2R
爱荷华:us-central1 只读:us-west2 1-OR
nam6 北美洲 爱荷华:us-central1 L2R
南卡罗来纳:us-east1 2R
俄勒冈:us-west1 1R
洛杉矶:us-west2 1R
俄克拉荷马:us-central2
nam7 北美洲 爱荷华:us-central1 L2R
北弗吉尼亚:us-east4 2R
俄克拉荷马:us-central2 只读:us-east1 2-OR
us-south1 1-OR
europe-west1 2-OR
nam8 北美洲 洛杉矶:us-west2 L2R
俄勒冈:us-west1 2R
盐湖城: us-west3 只读:asia-southeast1 2R
europe-west2 2R
nam9 北美洲 北弗吉尼亚:us-east4 L2R
爱荷华:us-central1 2R
俄勒冈州:us-west1 2R 南卡罗来纳:us-east1
nam10 北美洲 爱荷华:us-central1 L2R
盐湖城:us-west3 2R
俄克拉荷马:us-central2
nam11 北美洲 爱荷华:us-central1 L2R
南卡罗来纳:us-east1 2R
俄克拉荷马:us-central2 只读:us-west1 1-OR
nam12 北美洲 爱荷华:us-central1 L2R
北弗吉尼亚:us-east4 2R
俄勒冈州:us-west1 2R 俄克拉荷马:us-central2
nam13 北美洲 俄克拉何马州:us-central2 L2R
爱荷华:us-central1 2R
盐湖城: us-west3
nam14 北美洲 北弗吉尼亚:us-east4 L2R
蒙特利尔:northamerica-northeast1 2R
南卡罗来纳:us-east1
nam15 北美洲 达拉斯:us-south1 L2R
北弗吉尼亚:us-east4 2R
爱荷华:us-central1

三大洲

基本配置名称 位置 读写区域 只读区域 见证者区域
nam-eur-asia1 北美洲
欧洲
亚洲
爱荷华:us-central1 L2R
俄克拉荷马:us-central2 2R
比利时:europe-west1 2R
台湾:asia-east1 2R
南 卡罗来纳:us-east1
nam-eur-asia3 北美洲
欧洲
亚洲
爱荷华:us-central1 L2R
南卡罗来纳:us-east1 2R
比利时:europe-west1 1R
荷兰:europe-west4 1R
台湾:asia-east1 2R
俄克拉荷马:us-central2
  • L:默认主要区域。如需了解详情,请参阅修改数据库的主要区域

  • 1R:区域中的一个副本。

  • 2R:区域中的两个副本。

  • 1-OR:一个可选的副本。您可以创建自定义区域实例配置,并添加一个可选的只读副本。如需了解详情,请参阅创建自定义实例配置

  • 2-OR:最多两个可选副本。您可以创建自定义区域实例配置,并添加一个或两个可选的只读副本。我们建议添加两个(如果可能),以帮助保持较短的读取延迟时间。如需了解详情,请参阅创建自定义实例配置

  • :此实例配置受许可名单限制。如需获取使用权限,请与您的技术支持客户经理联系。

优势

多区域实例提供了以下主要优势:

  • 可用性达 99.999%,大于 Spanner 单区域配置提供的 99.99% 可用性。

  • 数据分布:Spanner 会自动在区域之间复制数据,并保证强一致性。这样,您的数据就可以存储在使用这些数据的位置,从而缩短延迟时间并改善用户体验。

  • 外部一致性:虽然 Spanner 可以跨地理上相距较远的位置进行复制,但您仍然可以像使用在单台机器上运行的数据库一样使用 Spanner。事务保证可序列化,并且数据库中的事务顺序与客户端观察所提交的事务的顺序相同。外部一致性是比其他一些产品提供的“高度一致性”更有力的保证。如需详细了解此属性,请参阅 TrueTime 和外部一致性

复制

每个基本多区域配置包含两个指定为读写区域的区域,每个区域包含两个读写副本。其中一个读写区域被指定为默认主要区域,这意味着它包含您的数据库的主要副本。Spanner 还将见证者副本放在称为见证者区域的第三个区域中。

每当客户端向您的数据库发出变更时,就会形成一个最小写票数,该最小写票数由默认主要区域中的一个副本和其他四个投票副本中的任意两个副本共同达成。(最小写票数可以由构成您的配置的两个或三个区域的副本达成,具体取决于有哪些其他副本参与了投票。)除了这五个投票副本之外,一些基本多区域配置还包含用于处理低延迟读取的只读副本。包含只读副本的区域称为只读区域

通常情况下,多区域配置中的投票区域地理位置相近(相距不到一千英里),以便以低延迟达成最小写票数,从而实现快速写入(了解详情)。但是,为了避免协调故障,这些区域之间仍然保持足够远的距离(通常至少有几百英里)。

您可以使用可选的只读副本来创建自定义多区域实例配置。您创建的任何自定义只读副本都不能参与最小写票数。您可以将“可选区域”列下列出的位置添加为可选的只读副本。如果您没有看到所需的只读副本位置,可以请求新的可选只读副本区域。如需了解详情,请参阅只读副本

多区域配置的性能最佳实践

为了实现最佳性能,请遵循以下最佳做法:

  • 设计架构以防止出现热点和其他性能问题。
  • 将写入操作频繁的工作负载的计算资源布置在默认主要区域中或其附近,以尽可能减少写入延迟时间。
  • 使用至少 15 秒的过期设置,以使默认主要区域外的读取性能达到最佳。
  • 将重要的计算资源放到至少两个区域中,以免您的工作负载出现单区域依赖性。 一种比较好的做法是将它们放在两个不同的读写区域旁边,这样任何单个区域的服务中断都不会影响所有应用。
  • 预配足够的计算容量,使每个区域的高优先级总 CPU 利用率保持在 45% 以下。
  • 如需了解每个 Spanner 节点的吞吐量,请参阅多区域配置的性能

区域类型

Spanner 具有三种区域类型:读写区域、只读区域和见证者区域。

读写地区

每个多区域配置包含两个读写区域,每个读写区域包含两个读写副本

其中一个读写区域被指定为默认主要区域。系统会从每个分块的默认主要区域中的副本中选择主要副本。在主要副本出现故障的情况下,默认主要地区中的其他副本会自动成为主要副本。事实上,主要副本会对自身进行健康检查,如果检测到健康状况不佳,则可以提前让出主要副本的身份。在大多数情况下,当默认主要区域恢复到运行状况良好的状态时,它会自动重新认定为是主要区域。

写入操作首先在默认主要区域中处理。您可以使用 instance/leader_percentage_by_region 监控指标监控给定区域内的副本所占的百分比。如需了解详情,请参阅 Spanner 指标

第二个读写区域包含额外的副本,这些副本用于处理读取操作并参与针对提交写入的投票。第二个读写区域中的这些额外副本可以成为主要副本。如果默认主要区域中的所有副本都丢失(这种情况不太可能发生),则系统会从第二个读写区域中选择新的主要副本。

您可以按照更改数据库的主要区域中的说明配置数据库的主要区域。如需了解详情,请参阅配置默认主要区域

只读区域

只读区域包含只读副本,可以为读写区域之外的客户端处理低延迟读取。只读副本会保留数据的完整副本,该副本从读写副本复制。它们不参与针对提交写入的投票,因此绝不会造成任何写入延迟。

一些基本多区域配置包含只读副本。您还可以创建自定义实例配置,并向自定义实例配置添加只读副本,以扩缩读取并支持低延迟过时读取。所有只读副本都会计入计算容量和数据库存储费用。此外,向实例配置添加只读副本不会更改实例配置的 Spanner 服务等级协议 (SLA)。如需了解详情,请参阅只读副本

见证者区域

见证者区域包含见证者副本,用于针对写入进行投票。在读写区域不可用的情况下(这种情况很少见),见证者会变得非常重要。

移动实例

您可以将 Spanner 实例从任何实例配置移至任何其他实例配置,包括在单区域配置和多区域配置之间。移动实例不会导致停机,并且 Spanner 在移动过程中会继续提供常见的事务保证,包括强一致性。

如需详细了解 Spanner 实例移动,请参阅移动实例

配置默认主要区域

如需将数据库的默认主要区域的位置更改为更接近连接客户端的位置,以缩短应用延迟时间,您可以更改任何使用多区域配置的 Spanner 实例的主要区域。如需了解如何更改主要区域的位置,请参阅更改数据库的主要区域。如要数据库的默认主要区域,区域必须是多区域配置中的读写区域。

主要区域负责处理所有数据库写入,因此,如果您的大部分流量来自一个地理区域,您可以将其移动到该区域以缩短延迟时间。更新默认主要区域费用很低,并且不涉及任何数据移动。新值将在几分钟后生效。

更改默认主要区域是一种架构更改,会使用长时间运行的操作。如果需要,您可以获取长时间运行的操作的状态

权衡:单区域配置与多区域配置

配置 可用性 延迟时间 费用 数据局部性
单区域 99.99% 单区域内的写入延迟时间较短。 费用较低;请参阅pricing 支持按地理位置管理数据。
多区域 99.999% 来自多个地理区域的读取延迟时间较短;写入延迟时间略有增加。 费用较高;请参阅pricing 数据分布在配置内的多个区域。

后续步骤