本页介绍了 Spanner 中提供的不同类型的实例配置,以及它们之间的差异和权衡。
实例配置
Spanner 实例配置定义了该实例中数据库的地理位置和复制方式。创建实例时,您必须将其配置为单区域、双区域或多区域。您可以通过选择确定实例的数据存储位置的实例配置来进行该选择:
- 单区域配置:所有资源都位于一个 Google Cloud 区域中
- 双区域配置:所有资源均分布在两个区域中,但位于一个国家/地区内(企业 Plus 版提供)
- 多区域配置:资源分布在两个以上的区域中(适用于企业 Plus 版)
如需详细了解特定区域的注意事项,请参阅地理位置和区域。
具有固定区域和复制拓扑的实例配置称为基础实例配置。您可以创建自定义实例配置,并添加额外的可选只读副本(适用于企业版和企业 Plus 版)。您无法更改基础实例配置的复制拓扑。如需了解详情,请参阅只读副本。
您可以将实例从任何实例配置移至任何其他单区域、双区域或多区域实例配置(例如,从 us-central1
移至 nam3
)。您还可以创建包含更多副本的新自定义实例配置,然后将实例移至新的自定义实例配置。例如,如果您的实例位于 us-central1
中,并且您想添加只读副本 us-west1
,则需要创建一个新的自定义实例配置,并将 us-central1
作为基本配置,然后将 us-west1
添加为只读副本。然后,将您的实例移至此新的自定义实例配置。
单区域配置
Google Cloud 服务目前可在北美洲、南美洲、欧洲、亚洲和澳洲的多个位置使用。如果您的用户和服务位于单个区域内,请选择单区域实例配置以实现最低延迟的读取和写入。
对于任何基本区域配置,Spanner 维护三个读写副本,每个副本都位于该区域的不同 Google Cloud 可用区。每个读写副本均包含可操作数据库的完整副本,能够处理读写请求和只读请求。Spanner 在不同可用区使用副本,以便在发生单可用区故障时,您的数据库仍然可用。
可用配置
Spanner 提供以下基本单区域实例配置:
基本配置名称 | 区域说明 | 可选区域 | |
---|---|---|---|
美洲 | |||
northamerica-northeast1 |
蒙特利尔
|
||
northamerica-northeast2 |
多伦多
|
||
northamerica-south1 |
克雷塔罗 | ||
southamerica-east1 |
圣保罗
|
||
southamerica-west1 |
圣地亚哥
|
||
us-central1 |
爱荷华
|
只读:asia-northeast1 1-OR asia-south1 1-OR europe-west2 1-OR europe-west9 1-OR us-west3 1-OR |
|
us-east1 |
南卡罗来纳 | 只读:us-central1 1-OR us-west1 1-OR |
|
us-east4 |
北弗吉尼亚 | ||
us-east5 |
哥伦布 | ||
us-south1 |
达拉斯
|
||
us-west1 |
俄勒冈州
|
||
us-west2 |
洛杉矶 | ||
us-west3 |
盐湖城 | ||
us-west4 |
拉斯维加斯 | ||
欧洲 | |||
europe-central2 |
华沙 | ||
europe-north1 |
芬兰
|
||
europe-southwest1 |
马德里
|
||
europe-west1 |
比利时
|
只读:us-central1 1-OR us-west1 1-OR |
|
europe-west2 |
伦敦
|
||
europe-west3 |
法兰克福
|
||
europe-west4 |
荷兰
|
||
europe-west6 |
苏黎世
|
||
europe-west8 |
米兰 | ||
europe-west9 |
巴黎
|
||
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 |
特拉维夫 | ||
非洲 | |||
africa-south1 |
约翰内斯堡 |
复制
基础区域配置包含三个读写副本。每项 Spanner 数据变动都要求达成最小写票数(即,大多数投票副本同意)。在单区域配置中,当三个副本中的其中两个同意时即达成最小写票数。如需详细了解主副本区域和投票副本,请参阅复制。
您可以创建自定义地区级实例配置并添加可选的只读副本。只读副本有助于扩展读取并支持低延迟过时读取。这些只读副本不会参与写入共识机制,也不会影响区域实例的 Spanner >= 99.99% SLA。您可以将“可选地区”列下列出的位置添加为可选的只读副本。如果您没有看到所选的只读副本位置,可以请求新的可选只读副本区域。如需了解详情,请参阅只读副本。
区域配置的性能最佳实践
为了实现最佳性能,请遵循以下最佳做法:
- 设计架构以防止出现热点和其他性能问题。
- 将关键计算资源放到您的 Spanner 实例所在的同一区域中。
- 预配足够的计算容量,使高优先级总 CPU 利用率保持在 65% 以下。
- 如需了解每个 Spanner 节点的吞吐量,请参阅单区域配置的性能。
双区域配置
根据实例配置的定义,通过双区域配置,您可以在一个国家/地区的两个区域的多个可用区中复制数据库的数据。
双区域配置会执行以下操作:
- 从一个国家/地区内的两个区域为读取请求提供数据。
- 提供比单区域配置更高的可用性和服务等级协议 (SLA)。
- 满足数据驻留要求。
Spanner 在澳大利亚、德国、印度和日本提供双区域配置。
如需了解每个 Spanner 节点的吞吐量,请参阅双区域配置的性能。
可用配置
Spanner 提供以下基本双区域实例配置:
基本配置名称 | 资源位置 | 区域 |
---|---|---|
dual-region-australia1 |
au(澳大利亚) | 悉尼:australia-southeast1 L,2RW+1W 墨尔本: australia-southeast2 2RW+1W |
dual-region-germany1 |
de(德国) | 柏林:europe-west10 L,2RW+1W 法兰克福: europe-west3 2RW+1W |
dual-region-india1 |
in(印度) | 孟买:asia-south1 L,2RW+1W 德里: asia-south2 2RW+1W |
dual-region-japan1 |
jp(日本) | 东京:asia-northeast1 L,2RW+1W 大阪: asia-northeast2 2RW+1W |
优势
双区域实例提供了以下主要优势:
可用性达 99.999%:在同一国家/地区的两个区域内,大于 Spanner 单区域配置提供的 99.99% 的可用性。
数据分布:在保证强一致性的情况下,自动在两个区域之间复制数据。
数据驻留要求:满足双区域可用配置下列出的国家/地区的数据驻留要求。
复制
双区域包含六个副本,每个区域内三个副本。其中一个区域被指定为默认主副本所在区域(上表中列出)。您可以更改数据库的主要区域。每个区域内有两个读写副本和一个见证者副本。当两个区域都处于健康状态并在双区域配置中运行时,系统会在所有六个副本中建立共识。每个区域内至少要有两个副本,才能达成最小票数并提交事务。
故障切换和故障恢复
创建双区域配置后,您可以在系统数据分析信息中心内查看双区域共识主健康时间轴指标。此指标仅适用于双区域配置。它会显示三个共识机制的运行状况:
- 双区域仲裁:
Global
- 每个区域中的单个区域共识团(例如
Sydney
和Melbourne
)
当服务中断时,时间轴中会显示一个橙色条。您可以将鼠标悬停在相应图标上,查看中断的开始时间和结束时间。
为了缩短目标恢复时间 (RTO),我们建议您监控双区域共识机制健康时间表指标或为其设置提醒。此指标可帮助您在发生区域性故障时做出自行管理的故障切换时间决策。触发实例故障切换后,故障切换通常会在一分钟内完成。
Spanner 还支持由 Google 管理的自动故障转移,从首次检测到故障起,此过程最长可能需要 45 分钟。较长的 RTO 是由于 Google 对整个服务进行监控所致。我们需要收集更多信号,以验证整个区域是否出现中断,并验证是否存在区域级影响。这还可确保故障转移可为配置中的用户提供更好的整体服务。
如需手动进行故障切换和故障恢复,请参阅更改双区域共识机制。
在做出手动故障转移和故障恢复决策时,请考虑以下事项:
如果所有三个共识机制都运行正常,则无需执行任何操作。
如果其中一个区域显示服务中断,则可能存在区域性服务中断。这可能会导致在双区域共识机制中运行的数据库可用性降低。写入也可能会失败,因为无法建立共识,并且事务最终会超时。您可以使用“系统数据分析”信息中心观察数据库中的错误率和延迟时间。如果错误率或延迟时间增加,我们建议您进行故障切换,即将双区域 Quorum 从双区域更改为仍处于健康状态的区域。中断的区域恢复正常后,您必须故障恢复,将双区域仲裁从单区域更改为双区域。Google 会在检测到区域性服务中断时自动执行故障切换和故障恢复。如果您检测到中断,也可以手动进行故障转移。不过,如果您执行了手动故障切换,则必须记得手动恢复。
如果双区域仲裁显示中断,但两个单个区域都处于健康状态,则表示存在网络分区问题。这两个区域无法再相互通信,因此它们各自显示为健康状态,即使整个系统的健康状况不佳也是如此。在这种情况下,我们建议您故障转移到默认主副本区域。网络分区问题得到解决且双区域共识机制恢复正常后,您必须手动进行故障回退。
双区域提供零恢复点目标 (RPO),因为在区域性服务中断或出现网络分区问题时不会丢失数据。
如需检查双区域 Quorum 的模式(单区域或双区域),请参阅检查双区域 Quorum。
故障切换和故障恢复最佳实践
故障切换和故障恢复最佳实践包括:
- 如果没有发生区域故障或中断,请勿故障切换到单个区域。如果故障转移到单个区域,则该单个区域发生故障时,整个系统不可用的可能性会增加。
- 选择故障转移区域时请多加留意。如果选择错误的区域进行故障切换,则会导致数据库不可用,并且在该区域重新上线之前无法恢复。如需进行验证,您可以在执行故障转移之前使用 bash 脚本检查单个区域的运行状况。
- 如果不健康的区域是默认主副本区域,请在执行故障切换后将默认主副本区域更改为故障切换区域。确认两个区域都恢复正常后,执行故障恢复,然后将主区域更改回原主区域。
- 如果您执行了手动故障切换,请务必手动恢复。
限制
您无法创建自定义双区域实例配置。您无法向双区域实例配置添加只读副本。
多区域配置
Spanner 单区域配置在单个区域内的多个可用区之间复制数据。不过,如果出现以下情况,区域性配置可能不是最佳配置:
- 您的应用通常需要从多个地理位置读取数据(例如,向北美洲和亚洲的用户提供数据)。
- 写入操作的来源与读取操作的来源不同(例如,如果您在北美有大量写入工作负载,而在欧洲有大量读取工作负载)。
多区域配置可以:
- 处理来自多个区域的写入。
- 在发生区域性故障时保持可用性。
- 提供比单区域配置更高的可用性和服务等级协议 (SLA)。
根据实例配置的定义,通过多区域配置,您可以在多个区域的多个可用区中复制数据库的数据。这些额外的副本使您能够从靠近配置区域或位于配置区域内的多个位置以更低的延迟读取数据。
不过,有得也有失,因为在多区域配置中,共同达成最小写票数的(读写)副本分布在多个区域中。当这些副本互相通信以形成写入共识时,您可能会注意到额外的网络延迟时间。读取不需要达到共识。这样一来,您的应用可以在更多地方实现更快的读取速度,但代价是写入延迟时间会略有增加。如需了解详情,请参阅副本在写入和读取中的角色。
可用配置
Spanner 提供以下基本多区域实例配置:
一个大洲
基本配置名称 | 资源位置 | 读写区域 | 只读区域 | 见证者区域 | 可选区域 |
---|---|---|---|---|---|
asia1 |
asia1 | 东京:asia-northeast1 L,2R 大阪: asia-northeast2 2R |
无 | 首尔:asia-northeast3 |
只读:us-west1 1-OR us-east5 1-OR |
asia2 A |
asia2 | 孟买:asia-south1 L,2R 德里: asia-south2 2R 新加坡: asia-southeast1 1R |
无 | 无 | |
eur3 |
eur3 | 比利时:europe-west1 L,2R 荷兰: europe-west4 2R |
无 | 芬兰:europe-north1 |
只读:us-central1 1-OR us-east4 1-OR |
eur5 |
eur5 | 伦敦:europe-west2 L,2R 比利时: europe-west1 2R |
无 | 荷兰:europe-west4 |
只读:us-central1 1-OR us-east1 1-OR |
eur6 |
eur6 | 荷兰:europe-west4 L,2R 法兰克福: europe-west3 2R |
无 | 苏黎世:europe-west6 |
只读:us-east1 2-OR |
nam3 |
nam3 | 北弗吉尼亚州:us-east4 L,2R 南卡罗来纳州: us-east1 2R |
无 | 爱荷华:us-central1 |
只读:us-west2 1-OR asia-southeast1 1-OR asia-southeast2 1-OR europe-west1 1-OR europe-west2 1-OR |
nam6 |
nam6 | 爱荷华:us-central1 L,2R 南卡罗来纳州: us-east1 2R |
俄勒冈:us-west1 1R 洛杉矶: us-west2 1R |
俄克拉荷马:us-central2 |
|
nam7 |
nam7 | 爱荷华:us-central1 L,2R 北弗吉尼亚: us-east4 2R |
无 | 俄克拉荷马:us-central2 |
只读:us-east1 2-OR us-south1 1-OR europe-west1 2-OR |
nam8 |
nam8 | 洛杉矶: us-west2 L,2R Oregon: us-west1 2R |
无 | 盐湖城: us-west3 |
只读:asia-southeast1 2-OR europe-west2 2-OR us-east5 1-OR |
nam9 |
nam9 | 北弗吉尼亚州:us-east4 L,2R 爱荷华州: us-central1 2R |
俄勒冈州:us-west1 2R |
南卡罗来纳:us-east1 |
|
nam10 |
nam10 | 爱荷华:us-central1 L,2R 盐湖城: us-west3 2R |
无 | 俄克拉荷马:us-central2 |
|
nam11 |
nam11 | 爱荷华:us-central1 L,2R 南卡罗来纳州: us-east1 2R |
无 | 俄克拉荷马:us-central2 |
只读:us-west1 1-OR |
nam12 |
nam12 | 爱荷华:us-central1 L,2R 北弗吉尼亚: us-east4 2R |
俄勒冈州:us-west1 2R |
俄克拉荷马:us-central2 |
|
nam13 |
nam13 | 俄克拉荷马:us-central2 L,2R 爱荷华: us-central1 2R |
无 | 盐湖城: us-west3 |
|
nam14 |
nam14 | 北弗吉尼亚:us-east4 L,2R 蒙特利尔: northamerica-northeast1 2R |
无 | 南卡罗来纳:us-east1 |
|
nam15 |
nam15 | 达拉斯:us-south1 L,2R 北弗吉尼亚: us-east4 2R |
无 | 爱荷华:us-central1 |
|
nam16 |
us(美国) | 爱荷华:us-central1 L,2R 北弗吉尼亚: us-east4 2R |
无 | 哥伦布:us-east5 |
只读:us-west2 2-OR |
三个大洲
基本配置名称 | 资源位置 | 读写区域 | 只读区域 | 见证者区域 | 可选区域 |
---|---|---|---|---|---|
nam-eur-asia1 |
nam-eur-asia1 | 爱荷华:us-central1 L,2R 俄克拉何马: us-central2 2R |
比利时:europe-west1 2R 台湾: asia-east1 2R |
南 卡罗来纳:us-east1 |
只读:us-west2 1-OR |
nam-eur-asia3 |
nam-eur-asia3 | 爱荷华:us-central1 L,2R 南卡罗来纳: us-east1 2R |
比利时:europe-west1 1R 荷兰: europe-west4 1R 台湾: asia-east1 2R |
俄克拉荷马:us-central2 |
L:默认主要区域。如需了解详情,请参阅修改数据库的主要区域。
1R:该地区中有 1 个副本。
2R:该地区中有 2 个副本。
2RW+1W:该地区中有两个读写副本和一个见证者副本。
1-OR:一个可选副本。您可以创建自定义区域实例配置,并添加一个可选的只读副本。 如需了解详情,请参阅创建自定义实例配置。
2-OR:最多两个可选副本。您可以创建自定义区域实例配置,并添加一个或两个可选的只读副本。我们建议您添加两个(如果可能),以帮助保持较低的读取延迟时间。如需了解详情,请参阅创建自定义实例配置。
A:此实例配置受许可名单限制。如需获取访问权限,请与您的技术支持客户经理联系。
多区域实例配置的资源位置决定了该配置的灾难恢复可用区保证。它定义了静态存储数据的位置。
优势
多区域实例提供了以下主要优势:
可用性达 99.999%,大于 Spanner 单区域配置提供的 99.99% 的可用性。
数据分布:Spanner 可在保证高度一致性下的前提下,自动在区域之间复制数据。这样您就可以将数据存储在要使用的位置,从而缩短延迟时间并改善用户体验。
外部一致性:虽然 Spanner 能够跨地理上相距遥远的位置进行复制,但您仍然可以像使用在单台机器上运行的数据库一样使用 Spanner。事务保证可序列化,并且数据库中的事务顺序与客户端观察所提交的事务的顺序相同。外部一致性是比其他一些产品提供的“高度一致性”更有力的保证。如需详细了解此属性,请参阅 TrueTime 和外部一致性。
复制
每个基础多区域配置包含两个指定为读写区域的区域,每个区域包含两个读写副本。其中一个读写区域被指定为“默认主要区域”,也就是说,它包含您的数据库的主要副本。Spanner 还将见证者副本放到称为见证者区域的第三个区域中。
每当客户端向您的数据库发出变更时,就会形成一个最小写票数,该最小写票数由默认主要区域中的一个副本和其他四个投票副本中的任意两个副本共同达成。(最小写票数可以由构成您的配置的两个或三个区域的副本达成,具体取决于有哪些其他副本参与了投票。)除了这 5 个投票副本之外,某些基本多区域配置还包含用于处理低延迟读取的只读副本。包含只读副本的区域称为只读区域。
通常情况下,多区域配置中的投票区域地理位置相近(相距不到一千英里),以便以低延迟达成最小写票数,从而实现快速写入(了解详情)。但是,为了避免协调故障,这些区域之间仍然保持足够远的距离(通常至少有几百英里)。此外,如果您的客户端应用位于非主副本区域,Spanner 会使用主副本感知路由来动态路由读写事务,以缩短数据库中的延迟时间。如需了解详情,请参阅感知主副本的路由。
您可以创建自定义多区域实例配置,并添加可选的只读副本。您创建的任何自定义只读副本都不能包含在写入共识机制中。您可以将“可选区域”列下列出的位置添加为可选的只读副本。如果您没有看到所选的只读副本位置,可以申请新的可选只读副本区域。如需了解详情,请参阅只读副本。
多区域配置的性能最佳实践
为了实现最佳性能,请遵循以下最佳做法:
- 设计架构以防止出现热点和其他性能问题。
- 将写入操作频繁的工作负载的计算资源布置在默认主要区域中或其附近,以尽可能减少写入延迟时间。
- 使用至少 15 秒的过期设置,以使默认主要区域外的读取性能达到最佳。
- 将重要的计算资源放到至少两个区域中,以免您的工作负载出现单区域依赖性。 最好将它们放置在两个不同的读写区域之间,确保任何区域中断都不会影响您的所有应用。
- 预配足够的计算容量,使每个区域的高优先级总 CPU 利用率保持在 45% 以下。
- 如需了解每个 Spanner 节点的吞吐量,请参阅多区域配置的性能。
移动实例
您可以将 Spanner 实例从任何实例配置移至任何其他实例配置,包括单区域配置和多区域配置之间。移动实例不会导致停机,并且 Spanner 会在移动过程中继续提供常规事务保证,包括强一致性。
如需详细了解 Spanner 实例迁移,请参阅迁移实例。
配置默认主要区域
如需将数据库的默认主副本区域的位置更改为更靠近连接客户端,以减少应用延迟时间,您可以更改使用双区域或多区域配置的任何 Spanner 实例的主要区域。如需了解如何更改主副本区域的位置,请参阅更改数据库的主副本区域。如要数据库的默认主副本所在区域,区域必须是双区域或多区域配置中的读写区域。
主副本区域负责处理所有数据库写入,因此,如果您的大部分流量来自一个地理区域,您可以将其移动到该区域以缩短延迟时间。更新默认主要区域费用很低,并且不涉及任何数据移动。新值将在几分钟后生效。
更改默认主要区域是一种架构更改,会使用长时间运行的操作。如果需要,您可以获取长时间运行的操作的状态。
权衡:单区域配置与双区域配置与多区域配置
配置 | 可用性 | 延迟时间 | 费用 | 数据局部性 |
---|---|---|---|---|
单区域 | 99.99% | 单区域内的写入延迟时间较短。 | 费用较低;请参阅价格。 | 支持按地理位置管理数据。 |
双区域 | 99.999% | 两个地理区域的读取延迟时间较短;写入延迟时间略有增加。 | 费用较高;请参阅价格。 | 将数据分布在一个国家/地区内的两个区域。 |
多区域 | 99.999% | 多个地理区域的读取延迟时间较短;写入延迟时间略有增加。 | 费用较高;请参阅价格。 | 数据分布在配置内的多个区域。 |
后续步骤
- 了解如何创建 Spanner 实例。
- 详细了解 Google Cloud 地理位置和区域。