本页面介绍了 Spanner 中提供的不同类型的实例配置,以及它们之间的差异和权衡。
实例配置
Spanner 实例配置定义了该实例中数据库的地理位置和复制情况。创建实例时,您必须将其配置为“单区域”“双区域”或“多区域”。您可以通过选择实例配置来进行此选择,该配置决定了该实例的数据存储位置:
具有固定区域和复制拓扑的实例配置称为“基本实例配置”。您可以创建自定义实例配置并添加其他可选的只读副本。您无法更改基本实例配置的复制拓扑。如需了解详情,请参阅只读副本。
您可以将实例从任何实例配置迁移到任何其他单区域或多区域实例配置(例如,从 us-centra1
迁移到 nam3
)。您还可以创建具有额外副本的新自定义实例配置,然后将实例迁移到新的自定义实例配置。例如,如果您的实例位于 us-central1
并且您想要添加只读副本 us-west1
,则需要使用 us-central1
作为基本配置创建新的自定义实例配置,并添加 us-west1
作为只读副本。然后,将您的实例迁移到这个新的自定义实例配置。
单区域配置
Google Cloud 服务目前可在北美洲、南美洲、欧洲、亚洲和澳洲的多个位置使用。如果您的用户和服务位于单个区域内,请选择单区域实例配置以实现最低延迟的读取和写入。
对于任何基本区域配置,Spanner 都会维护三个读写副本,每个副本都位于该区域的不同 Google Cloud 可用区中。每个读写副本均包含可操作数据库的完整副本,能够处理读写请求和只读请求。Spanner 在不同可用区中使用副本,以便在发生单可用区故障时,您的数据库仍然可用。
可用配置
Spanner 提供以下基本区域实例配置:
基本配置名称 | 区域说明 | 可选区域 | |
---|---|---|---|
美洲 | |||
northamerica-northeast1 |
蒙特利尔
|
||
northamerica-northeast2 |
多伦多
|
||
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 SLA 不低于 99.99%。您可以将“可选区域”列下列出的位置添加为可选的只读副本。如果您没有看到所选的只读副本位置,可以请求新的可选只读副本区域。如需了解详情,请参阅只读副本。
单区域配置的性能最佳实践
为了实现最佳性能,请遵循以下最佳做法:
- 设计架构以防止出现热点和其他性能问题。
- 将关键计算资源放在 Spanner 实例所在的同一区域内。
- 配置足够的计算容量,将高优先级总 CPU 利用率保持在 65% 以下。
- 如需了解每个 Spanner 节点的吞吐量,请参阅单区域配置的性能。
双区域配置
通过双区域配置,您可以根据实例配置的定义,在单个国家/地区的两个区域的多个区域中复制数据库的数据。
双区域配置的作用如下:
- 处理一个国家/地区中两个区域的读取操作。
- 提供比区域级配置更高的可用性和服务等级协议 (SLA)。
- 满足数据驻留要求。
Spanner 在澳大利亚、德国、印度和日本提供双区域配置。
可用配置
Spanner 提供以下基本双区域实例配置:
基本配置名称 | 资源位置 | 读写区域 |
---|---|---|
dual-region-australia1 |
澳大利亚 | 悉尼:australia-southeast1 L、2R 墨尔本: australia-southeast2 2R |
dual-region-germany1 |
德国 | 柏林:europe-west10 L、2R 法兰克福: europe-west3 2R |
dual-region-india1 |
印度 | 孟买:asia-south1 L、2R 德里: asia-south2 2R |
dual-region-japan1 |
日本 | 东京:asia-northeast1 L,2R 大阪: asia-northeast2 2R |
优势
双区域实例具有以下主要优势:
可用性达 99.999%:跨同一个国家/地区的两个区域,大于 Spanner 单区域配置提供的 99.99% 的可用性。
数据分布:在保证强一致性的前提下自动在两个区域之间复制数据。
数据驻留要求:符合双区域可用配置下所列国家/地区的数据驻留要求。
复制
双区域包含六个副本,每个区域三个。其中一个区域被指定为默认主要区域(如上表所列)。您可以更改数据库的主要区域。在每个区域中,有两个读写副本和一个见证者副本。当两个区域运行状况良好且采用双区域配置运行时,会在所有六个副本之间达成仲裁。每个区域中至少需要两个副本才能达成仲裁并提交事务。
故障切换和故障恢复
创建双区域配置后,您可以在系统数据分析信息中心查看双区域仲裁可用性指标。此指标仅适用于双区域配置。它显示了三个仲裁的运行状况:
- 双区域仲裁,该仲裁使用以下代号:
au
(澳大利亚)de
(德国)in
(适用于印度)asia1
(日本)
- 每个区域中的单区域仲裁(例如
asia-south1
和asia-south2
)
该指标具有一个仲裁可用性下拉列表,其中显示哪些区域处于运行状况良好或中断模式。
双区域仲裁可用性指标可帮助您在发生区域级故障时自行管理进行故障切换决策。自行管理的故障切换通常会在一分钟内完成。如需手动进行故障切换和故障恢复,请参阅更改双区域仲裁。Spanner 还支持由 Google 管理的自动故障切换,从首次检测到故障起,最多可能需要 45 分钟才能完成故障切换。
在做出故障切换和故障恢复决策时,请考虑以下事项:
如果三个仲裁均正常,则无需执行任何操作。
如果其中一个区域显示中断,则可能是区域服务中断。这可能会导致在双区域仲裁中运行的数据库可用性降低。此外,由于无法建立仲裁且事务最终会超时,因此写入也可能会失败。使用 System Insights 信息中心,观察数据库中的错误率和延迟时间。如果错误率或延迟时间增加,我们建议您执行故障切换,这意味着将双区域仲裁从双区域更改为运行状况仍然良好的区域。当中断区域的运行状况恢复良好后,您必须执行故障恢复操作,将双区域仲裁从单区域更改为双区域。Google 会在检测到区域级服务中断时自动执行故障切换和故障恢复。如果检测到中断,您也可以手动进行故障切换。但是,如果您执行了手动故障切换,则必须记住手动故障恢复。
如果双区域仲裁显示中断(即使两个单区域运行状况都良好),则表示存在网络分区问题。这两个区域无法再相互通信,因此即使整个系统运行状况不佳,这两个区域也都显示健康状况良好。在这种情况下,我们建议您故障切换到默认主要区域。网络分区问题得到解决且双区域仲裁恢复正常后,您必须手动进行故障恢复。
双区域提供零恢复点目标 (RPO),因为在区域级服务中断或出现网络分区问题时不会丢失数据。
如需检查双区域仲裁的模式(单区域或双区域),请参阅检查双区域仲裁。
故障切换和故障恢复最佳实践
故障切换和故障恢复最佳实践包括:
- 如果未发生区域故障或中断,则不要故障切换到单个区域。切换到单个区域后,如果该单个区域发生故障,则整个系统不可用的可能性会增加。
- 选择要进行故障切换的区域时请务必谨慎。选择错误的区域进行故障切换会导致数据库不可用,这种情况在区域恢复在线之前不可恢复。
- 如果您执行了手动故障切换,请记得手动故障恢复。
限制
双区域配置具有以下限制:
- 您无法创建自定义双区域实例配置。您不能向双区域实例配置添加只读副本。
- 不支持客户管理的加密密钥 (CMEK)。
多区域配置
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 |
|
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 2R europe-west2 2R |
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 |
三大洲
基本配置名称 | 资源位置 | 读写区域 | 只读区域 | 见证者区域 | 可选区域 |
---|---|---|---|---|---|
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:该区域中的一个副本。
2R:该区域中的两个副本。
1-OR:一个可选副本。您可以创建自定义区域实例配置,并添加一个可选的只读副本。如需了解详情,请参阅创建自定义实例配置。
2-OR:最多两个可选副本。您可以创建自定义区域实例配置,并添加一个或两个可选的只读副本。我们建议您(如果可能)添加 2 个,以帮助保持低读取延迟。如需了解详情,请参阅创建自定义实例配置。
答:此实例配置使用许可名单加以限制。要获得访问权限,请与您的技术支持客户经理联系。
多区域实例配置的资源位置决定了配置的灾难恢复可用区保证。它定义了静态数据的存储位置。
优势
多区域实例提供了以下主要优势:
可用性达 99.999%,大于 Spanner 单区域配置提供的 99.99% 的可用性。
数据分布:Spanner 可在保证强一致性下的前提下,自动在区域之间复制数据。这样一来,您就可以将数据存储在使用数据的位置,从而缩短延迟时间并改善用户体验。
外部一致性:虽然 Spanner 能够跨地理上相距遥远的位置进行复制,但您仍然可以像使用在单台机器上运行的数据库一样使用 Spanner。事务保证可序列化,并且数据库中的事务顺序与客户端观察所提交的事务的顺序相同。外部一致性是比其他一些产品提供的“高度一致性”更有力的保证。如需详细了解此属性,请参阅 TrueTime 和外部一致性。
复制
每个基本多区域配置包含两个指定为读写区域的区域,每个区域包含两个读写副本。其中一个读写区域被指定为“默认主要区域”,这意味着它包含数据库的主要副本。Spanner 还会将见证者副本放置在第三个区域,该区域称为见证者区域。
每当客户端向您的数据库发出变更时,就会形成一个最小写票数,该最小写票数由默认主要区域中的一个副本和其他四个投票副本中的任意两个副本共同达成。(最小写票数可以由构成您的配置的两个或三个区域的副本达成,具体取决于有哪些其他副本参与了投票。)除了这五个投票副本之外,一些基本多区域配置还包含用于处理低延迟读取的只读副本。包含只读副本的区域称为只读区域。
通常情况下,多区域配置中的投票区域地理位置相近(相距不到一千英里),以便以低延迟达成最小写票数,从而实现快速写入(了解详情)。但是,这些区域之间仍然相距足够远(通常至少为几百英里),以避免协同故障。此外,如果您的客户端应用位于非主要区域,Spanner 会使用主要区域感知型路由来动态地路由读写事务,以缩短数据库的延迟时间。如需了解详情,请参阅领导者感知路由。
您可以使用可选的只读副本创建自定义多区域实例配置。您创建的任何自定义只读副本都不能包含在最小写票数中。您可以将“可选区域”列下列出的位置添加为可选的只读副本。如果您没有看到所选的只读副本位置,可以请求新的可选只读副本区域。如需了解详情,请参阅只读副本。
多区域配置的性能最佳实践
为了实现最佳性能,请遵循以下最佳做法:
- 设计架构以防止出现热点和其他性能问题。
- 将写入操作频繁的工作负载的计算资源布置在默认主要区域中或其附近,以尽可能减少写入延迟时间。
- 使用至少 15 秒的过期设置,以使默认主要区域外的读取性能达到最佳。
- 将重要的计算资源放到至少两个区域中,以免您的工作负载出现单区域依赖性。 一种较好的选择是将它们放在两个不同的读写区域旁边,这样任何单个区域服务中断都不会影响您的应用。
- 配置足够的计算容量,使每个区域中高优先级的总 CPU 利用率低于 45%。
- 如需了解每个 Spanner 节点的吞吐量,请参阅多区域配置的性能。
移动实例
您可以将 Spanner 实例从任何实例配置迁移到任何其他实例配置,包括在单区域配置和多区域配置之间。移动实例不会造成停机,并且 Spanner 会在移动过程中继续提供常规的事务保证,包括强一致性。
如需详细了解 Spanner 实例移动,请参阅移动实例。
配置默认主要区域
如需更改数据库的默认主要区域的位置,使其更靠近连接客户端以缩短应用延迟时间,您可以更改使用多区域配置的 Spanner 实例的主要区域。如需了解如何更改主要区域的位置,请参阅更改数据库的主要区域。如要数据库的默认主要区域,区域必须是多区域配置中的读写区域。
主要区域负责处理所有数据库写入,因此,如果您的大多数流量都来自某个地理区域,则可以将其移至该区域以缩短延迟时间。更新默认主要区域费用很低,并且不涉及任何数据移动。新值将在几分钟后生效。
更改默认主要区域是一种架构更改,会使用长时间运行的操作。如果需要,您可以获取长时间运行的操作的状态。
权衡:单区域配置、双区域配置与多区域配置
配置 | 可用性 | 延迟时间 | 费用 | 数据局部性 |
---|---|---|---|---|
单区域 | 99.99% | 单区域内的写入延迟时间较短。 | 费用较低;请参阅pricing。 | 支持按地理位置管理数据。 |
双区域 | 99.999% | 两个地理区域的读取延迟时间较短;写入延迟时间略有增加。 | 费用较高;请参阅pricing。 | 将数据分布到一个国家/地区的两个区域。 |
多区域 | 99.999% | 多个地理区域的读取延迟时间较短;写入延迟时间略有增加。 | 费用较高;请参阅pricing。 | 数据分布在配置内的多个区域。 |
后续步骤
- 了解如何创建 Spanner 实例。
- 详细了解 Google Cloud 区域和地区。