使用 Compute Engine 和 Spanner 进行全球部署

Last reviewed 2025-05-27 UTC

本文档为在 Google Cloud上的全球拓扑中的 Compute Engine 虚拟机和 Spanner 上运行的多层应用提供参考架构。本文档还提供了相关指南,帮助您构建使用其他 Google Cloud 基础设施服务的架构。其中介绍了您在为云应用构建全球架构时应考虑的设计因素。本文档的目标受众是云架构师。

此架构与全球部署原型一致。对于为全球用户提供服务并且需要高可用性和稳健性以应对多个区域的服务中断的应用,我们建议使用此原型。 此架构支持在网络、应用和数据库级别上进行弹性扩缩。它可以让您根据用量调整费用,而不必在性能、可用性或可伸缩性方面做出妥协。

架构

下图展示了在分布于全球多个 Google Cloud区域的基础设施上运行的应用的架构。

使用 Compute Engine 和 Spanner 的全球部署架构。

在此架构中,全球负载均衡器根据 Web 服务器的可用性、容量以及与流量来源的邻近性,将传入请求分配到合适区域的 Web 服务器。跨区域内部负载均衡层根据应用服务器的可用性和容量,处理从 Web 服务器到合适应用服务器的流量分配。应用服务器对在所有区域中都可供使用的同步复制数据库执行数据读写操作。

该架构包括以下 Google Cloud 资源:

组件 用途
全球外部负载均衡器

全球外部负载均衡器接收用户请求并将其分发给应用。全球外部负载均衡器通告单个任播 IP 地址,但负载均衡器作为 Google Front End (GFE) 上的大量代理来实现。客户端请求会定向到距离客户端最近的 GFE。

根据您的需求,您可以使用全球外部应用负载均衡器全球外部代理网络负载均衡器。如需了解详情,请参阅选择负载均衡器

您可以使用 Google Cloud Armor 安全政策保护您的应用免受分布式拒绝服务攻击 (DDoS) 和跨站脚本攻击 (XSS) 等威胁。

网络层的区域级托管式实例组 (MIG)

应用的网络层部署在属于区域级 MIG 的 Compute Engine 虚拟机上。这些 MIG 是全球负载均衡器的后端。

每个 MIG 都包含位于三个不同可用区的 Compute Engine 虚拟机。每个虚拟机托管应用 Web 层的一个独立实例。

跨区域内部负载均衡层

具有跨区域后端的内部负载均衡器处理从任何区域中的网络层虚拟机到所有区域的应用层虚拟机的流量分配。

根据您的需求,您可以使用跨区域内部应用负载均衡器跨区域内部代理网络负载均衡器。如需了解详情,请参阅选择负载均衡器

应用层级的区域级 MIG

应用层部署在属于区域级 MIG 的 Compute Engine 虚拟机上。这些 MIG 是内部负载均衡层的后端。

每个 MIG 都包含位于三个不同可用区的 Compute Engine 虚拟机。每个虚拟机都托管应用层的一个独立实例。

Spanner 多区域实例

应用对多区域 Spanner 实例执行数据读写操作。此架构中的多区域配置包括以下副本

  • 四个读写副本,位于两个区域的不同可用区中。
  • 一个见证者副本,位于第三个区域中。
虚拟私有云 (VPC) 网络和子网

架构中的所有资源都使用单个 VPC 网络。该 VPC 网络具有以下子网:

  • 每个区域中一个用于 Web 服务器虚拟机的子网。
  • 每个区域中一个用于应用服务器虚拟机的子网。
  • (架构图中未显示)每个区域中一个用于跨区域内部负载均衡器的代理专用子网

您可以在每个区域中都创建一个单独的 VPC 网络,并使用 Network Connectivity Center 连接这些网络,而不是使用单个 VPC 网络。

使用的产品

此参考架构使用以下 Google Cloud 产品:

  • Compute Engine:一项安全且可自定义的计算服务,可让您在 Google 的基础设施上创建并运行虚拟机。
  • Cloud Load Balancing:一组高性能、可扩缩的全球和区域级负载均衡器。
  • Spanner:具备高度可伸缩性和全球一致性的关系型数据库服务。

设计考虑事项

本部分提供的指导可帮助您使用此参考架构开发满足特定的系统设计、安全性和合规性、可靠性、费用、运营效率和性能要求的架构。

系统设计

本部分提供的指导可帮助您为全球部署选择 Google Cloud 区域以及选择适当的 Google Cloud服务。

区域选择

当您选择必须在其中部署应用的 Google Cloud 区域时,请考虑以下因素和要求:

  • Google Cloud 服务在每个区域的可用性。如需了解详情,请参阅各位置可使用的产品
  • Compute Engine 机器类型在每个区域的可用性。如需了解详情,请参阅区域和可用区
  • 最终用户延迟时间要求。
  • Google Cloud 资源的费用
  • 跨区域数据传输费用。
  • 法规要求。

其中一些因素和要求可能需要权衡。例如,成本效益最高的区域,其碳足迹可能并非最低。如需了解详情,请参阅 Compute Engine 区域选择最佳实践

计算基础架构

本文档中的参考架构对应用的某些层级使用 Compute Engine 虚拟机。根据应用的要求,您可以从其他 Google Cloud 计算服务中进行选择:

  • 容器:您可以在 Google Kubernetes Engine (GKE) 集群中运行容器化应用。GKE 是一个容器编排引擎,可自动部署、扩缩和管理容器化应用。
  • 无服务器:如果您希望将 IT 工作重点放在数据和应用上,而不是放在设置和运营基础设施资源上,就可以使用无服务器服务,例如 Cloud Run

无论是决定使用虚拟机、容器还是无服务器服务,都需要在配置灵活性和管理工作量之间作出权衡取舍。虚拟机和容器提供了更大的配置灵活性,但您需要负责管理资源。在无服务器架构中,您将工作负载部署到极少需要管理的预配置平台。如需详细了解如何为Google Cloud中的工作负载选择适当的计算服务,请参阅在 Google Cloud上托管应用

存储服务

本文档中显示的架构对虚拟机使用区域级永久性磁盘卷。区域级永久性磁盘卷可跨一个区域中的两个可用区提供数据的同步复制功能。永久性磁盘卷中的数据不会跨区域进行复制。

多区域部署的其他存储选项包括 Cloud Storage 双区域或多区域存储桶。存储在双区域或多区域存储桶中的对象以冗余方式存储在至少两个不同的地理位置。元数据跨区域同步写入,数据以异步方式复制。对于双区域存储桶,您可以使用增强型复制来确保跨区域更快地复制。如需了解详情,请参阅数据可用性和耐用性

如需存储跨一个区域中的多个虚拟机(例如,网络层或应用层中的所有虚拟机)共享的文件,您可以使用 Filestore Enterprise 实例。您存储在 Filestore Enterprise 实例中的文件会在该区域内的三个可用区中同步复制。这种复制方式可确保高可用性和稳健性,以防可用区服务中断。您可以在 Filestore 实例中存储共享配置文件、常用工具和实用程序以及中心化日志,并将实例装载到多个虚拟机上。

在为多区域工作负载设计存储时,请考虑工作负载的功能特征、弹性要求、性能预期以及费用目标。如需了解详情,请参阅为云工作负载设计最佳存储策略

数据库服务

本文档中的参考架构使用 Spanner,这是一种全托管式、可横向伸缩、全球分布且同步复制的数据库。对于需要高度跨区域一致性的任务关键型部署,我们建议使用多区域 Spanner 配置。Spanner 支持同步跨区域复制,而无需停机进行故障切换、维护或调整大小。

如需了解您可以根据自己的要求选择的其他托管式数据库服务,请参阅Google Cloud 数据库。 为多区域部署选择和配置数据库时,请考虑应用对跨区域数据一致性的要求,并权衡考虑性能和费用因素。

外部负载均衡选项

使用全球外部负载均衡器的架构(例如本文档中的架构)支持某些可帮助您提高部署可靠性的功能。例如,如果您使用全球外部应用负载均衡器,则可以使用 Cloud CDN 实现边缘缓存。

如果您的应用要求在特定区域终止传输层安全协议 (TLS),或者您需要能够从特定区域传送内容,则可以将区域级负载均衡器与 Cloud DNS 搭配使用,以将流量路由到不同的区域。如需了解区域级和全球负载均衡器之间的差异,请参阅以下文档:

安全性、隐私权和合规性

本部分介绍使用此参考架构在Google Cloud 中设计和构建满足工作负载的安全性、隐私权和合规性要求的全球拓扑时应考虑的因素。

防范外部威胁

您可以使用 Google Cloud Armor 安全政策保护您的应用免受分布式拒绝服务攻击 (DDoS 攻击) 和跨站脚本攻击 (XSS) 等威胁。每项政策都是一组规则,用于指定应评估的特定条件以及满足条件时要执行的操作。例如,规则可以指定在传入流量的源 IP 地址与特定 IP 地址或 CIDR 范围匹配时必须拒绝该流量。您还可以应用预配置的 Web 应用防火墙 (WAF) 规则。如需了解详情,请参阅安全政策概览

虚拟机的外部访问权限

在本文档介绍的参考架构中,Compute Engine 虚拟机无需从互联网进行入站访问。请勿为虚拟机分配外部 IP 地址。仅具有专用内部 IP 地址的 Google Cloud 资源仍然可以使用 Private Service Connect 或专用 Google 访问通道来访问某些 Google API 和服务。如需了解详情,请参阅服务的专用访问通道选项

如需从仅具有专用 IP 地址的 Google Cloud 资源(例如此参考架构中的 Compute Engine 虚拟机)建立安全的出站连接,您可以使用安全 Web 代理Cloud NAT

服务账号权限

对于架构中的 Compute Engine 虚拟机,我们建议您创建专用服务账号,并指定该服务账号可以访问的资源,而不是使用默认服务账号。默认服务账号包含此实例中不需要的广泛权限,而您可以定制专用服务账号,使其仅具有所需的权限。如需了解详情,请参阅限制服务账号

SSH 安全性

为了增强此架构中与 Compute Engine 虚拟机的 SSH 连接的安全性,请通过 Cloud OS Login API 实现 Identity-Aware Proxy (IAP) 转发。借助 IAP,您可以根据用户身份和 Identity and Access Management (IAM) 政策来控制网络访问权限。借助 Cloud OS Login API,您可以根据用户身份和 IAM 政策控制 Linux SSH 访问权限。如需详细了解如何管理网络访问权限,请参阅控制 SSH 登录访问权限的最佳实践

更多安全注意事项

为工作负载构建架构时,请考虑企业基础蓝图Google Cloud Well-Architected Framework:安全性、隐私权和合规性中提供的平台级安全最佳实践和建议。

可靠性

本部分介绍在使用此参考架构为 Google Cloud中的全球部署构建和运营可靠的基础设施时应考虑的设计因素。

MIG 自动扩缩

在多个区域级 MIG 上运行应用时,应用在隔离的可用区服务中断或区域服务中断期间仍然可用。借助无状态 MIG 的自动扩缩功能,您可以使应用的可用性和性能维持在可预测的水平。

如需控制无状态 MIG 的自动扩缩行为,您可以指定目标利用率指标,例如平均 CPU 利用率。您还可以为无状态 MIG 配置基于时间表的自动扩缩。有状态 MIG 无法自动扩缩。如需了解详情,请参阅自动扩缩实例组

MIG 大小限制

在决定 MIG 的大小时,考虑可在 MIG 中创建的虚拟机数量的默认值和上限。如需了解详情,请参阅在 MIG 中添加和移除虚拟机

虚拟机自动修复

有时,托管应用的虚拟机可能正在运行且可用,但应用本身可能存在问题。应用可能会冻结、崩溃或内存不足。如需验证应用是否按预期响应,您可以在 MIG 的自动修复政策中配置基于应用的健康检查。如果特定虚拟机上的应用没有响应,则 MIG 会自动修复该虚拟机。如需详细了解如何配置自动修复,请参阅关于修复虚拟机以实现高可用性

虚拟机布置

在本文档介绍的架构中,应用层和网络层在分布于多个可用区中的 Compute Engine 虚拟机上运行。这样分布可确保您的应用能够可靠地应对可用区服务中断。

如需提高架构的稳健性,您可以创建分散布置政策并将其应用于 MIG 模板。MIG 会在创建虚拟机时将每个可用区中的虚拟机布置在不同的物理服务器(称为“主机”)上,因此您的虚拟机可以稳健地应对单个主机故障。如需了解详情,请参阅创建分散布置政策并将其应用于虚拟机

虚拟机容量规划

为确保在需要预配虚拟机时有可用的 Compute Engine 虚拟机容量,您可以创建预留。预留在特定可用区为属于所选机器类型的指定数量的虚拟机提供有保障的容量。预留可以特定于项目,也可以跨多个项目进行共享。如需详细了解预留,请参阅选择预留类型

有状态存储空间

应用设计的最佳做法是免去有状态本地磁盘的需要。但如果有相应要求,您可以将永久性磁盘配置为有状态,确保在修复或重新创建虚拟机时保留数据。但是,我们建议您让启动磁盘保持无状态,以便通过新版本和安全补丁将其更新为最新映像。如需了解详情,请参阅在 MIG 中配置有状态永久性磁盘

数据耐用性

您可以使用备份和灾难恢复来创建、存储和管理 Compute Engine 虚拟机的备份。 Backup and DR 以应用可读的原始格式存储备份数据。如有需要,您可以通过直接使用长期备份存储空间中的数据将工作负载恢复到生产环境,而无需准备或移动数据。

Compute Engine 提供了以下选项来帮助确保永久性磁盘卷中所存储数据的耐用性:

  • 您可以使用快照来捕获 Persistent Disk 卷的时间点状态。快照以冗余方式存储在多个区域中,通过自动校验和来确保数据完整性。快照默认采用增量方式,因此占用的存储空间会更少,而且可以节省资金。快照存储在您可以配置的 Cloud Storage 位置中。如需了解更多关于使用和管理快照的建议,请参阅 Compute Engine 磁盘快照的最佳做法
  • 为了确保在发生可用区级服务中断时,Persistent Disk 中的数据仍然可用,您可以使用区域级 Persistent DiskHyperdisk Balanced 高可用性。这些磁盘类型中的数据会在同一区域中的两个可用区之间同步复制。如需了解详情,请参阅同步磁盘复制简介

数据库可靠性

存储在多区域 Spanner 实例中的数据会跨多个区域同步复制。前面的架构图中显示的 Spanner 配置包含以下副本

  • 四个读写副本,位于两个区域的不同可用区中。
  • 一个见证者副本,位于第三个区域中。

如果对多区域 Spanner 实例执行写入操作,则至少要在三个副本(位于两个区域的不同可用区中)提交该操作后,才能确认该操作。如果发生可用区或区域故障,Spanner 可以访问所有数据(包括来自最新写入操作的数据),并且可以继续处理读取和写入请求。

Spanner 使用分解式存储,其中计算资源和存储资源会分离。添加计算容量以实现高可用性或扩缩时,您无需移动数据。新计算资源会在需要时从最近的 Colossus 节点获取数据。这样可以提高故障切换和扩缩的速度并降低风险。

Spanner 提供外部一致性,这是比事务处理系统可序列化更严格的属性。详情请参阅以下内容:

更多可靠性注意事项

在为工作负载构建云架构时,请查看以下文档中提供的与可靠性相关的最佳实践和建议:

费用优化

本部分将指导您优化使用此参考架构构建的全球 Google Cloud 拓扑的设置和运营费用。

虚拟机机器类型

为了帮助您优化虚拟机实例的资源利用率,Compute Engine 提供了机器类型建议。使用建议来选择符合工作负载计算要求的机器类型。对于具有可预测资源要求的工作负载,您可以使用自定义机器类型根据需求自定义机器类型并节省资金。

虚拟机预配模型

如果您的应用具备容错能力,则 Spot 虚拟机可以帮助您降低应用层和网络层中虚拟机的 Compute Engine 费用。Spot 虚拟机的费用远低于常规虚拟机。但是,Compute Engine 可能会提前停止或删除 Spot 虚拟机来收回容量。

Spot 虚拟机适用于可以容忍抢占且没有高可用性要求的批量作业。Spot 虚拟机提供与常规虚拟机相同的机器类型、选项和性能。但是,如果某个可用区中的资源容量有限,则在重新获得所需容量后,MIG 可能才会自动横向扩容(即创建虚拟机)。

虚拟机资源利用率

借助无状态 MIG 的自动扩缩功能,应用可以顺利应对流量增加的情况,并有助于您在资源需求较低时降低费用。有状态 MIG 无法自动扩缩。

数据库费用

Spanner 可帮助确保数据库费用可预测。您指定的计算容量(节点或处理单元数量)决定了存储容量。读写吞吐量随计算容量线性扩缩。您只需为实际用量付费。如果需要根据工作负载的需求调整费用,您可以调整 Spanner 实例的大小。

第三方许可

将第三方工作负载迁移到 Google Cloud时,可以通过自带许可 (BYOL) 来降低费用。例如,如需部署 Microsoft Windows Server 虚拟机,您可以创建并使用自定义 Windows BYOL 映像,而不要使用高级映像,这种方式将使用第三方许可并因而产生额外费用。然后,您只需为在 Google Cloud上使用的虚拟机基础设施付费。此策略可帮助您继续从现有第三方许可投资中实现价值。 如果您决定使用 BYOL 方法,以下建议可能有助于降低费用:

  • 使用自定义机器类型预配独立于内存的所需计算 CPU 核心数量。这样,您就可以将所需的第三方许可费用限制为所需的 CPU 核心数量。
  • 通过停用并发多线程 (SMT),将每个核心的 vCPU 数量从 2 减少到 1。

如果您在 Compute Engine 虚拟机上部署 Microsoft SQL Server 等第三方数据库,则必须考虑第三方软件的许可费用。使用 Cloud SQL 等托管式数据库服务时,数据库许可费用包含在该服务的费用中。

更多费用注意事项

为工作负载构建架构时,也考虑 Google Cloud Well-Architected Framework:费用优化中提供的一般最佳实践和建议。

运营效率

本部分介绍使用此参考架构设计和构建可高效运营的全球 Google Cloud 拓扑时应考虑的因素。

虚拟机配置更新

如需更新 MIG 中的虚拟机的配置(例如机器类型或启动磁盘映像),请使用所需的配置创建新的实例模板,然后将新模板应用于 MIG。MIG 会使用您选择的更新方法(自动或选择性)更新虚拟机。请根据可用性和运营效率要求选择适当的方法。如需详细了解这些 MIG 更新方法,请参阅在 MIG 中应用新的虚拟机配置

虚拟机映像

对于虚拟机,我们建议您创建并使用包含应用所需配置和软件的自定义操作系统映像,而不是使用 Google 提供的公共映像。您可以将自定义映像分组到一个自定义映像系列中。映像系列总是指向该系列中最新的映像,因此实例模板和脚本可以在无需更新对特定映像版本的引用的情况下使用该映像。您必须定期更新自定义映像,以纳入操作系统供应商提供的安全更新和补丁。

确定性实例模板

如果用于 MIG 的实例模板包含安装第三方软件的启动脚本,请确保这些脚本明确指定软件安装参数,例如软件版本。否则,当 MIG 创建虚拟机时,安装在虚拟机上的软件可能不一致。例如,如果您的实例模板包含用于安装 Apache HTTP Server 2.0(apache2 软件包)的启动脚本,请确保该脚本指定应安装的确切 apache2 版本,例如版本 2.4.53。如需了解详情,请参阅确定性实例模板

迁移到 Spanner

您可以将数据从其他数据库(如 MySQL、SQL Server 和 Oracle 数据库)迁移到 Spanner。迁移过程取决于源数据库、数据大小、停机时间限制和应用代码的复杂性等因素。为了帮助您高效地规划和实现向 Spanner 的迁移,我们提供了一系列 Google Cloud和第三方工具。如需了解详情,请参阅迁移概览

数据库管理

使用 Spanner 时,您无需配置或监控复制或故障切换。同步复制和自动故障切换是内置功能。您的应用在数据库维护和故障切换期间无需停机。如需进一步降低操作复杂性,您可以配置自动扩缩。启用自动扩缩功能后,您无需手动监控和扩缩实例大小。

更多运营注意事项

为工作负载构建架构时,考虑 Google Cloud Well-Architected Framework:卓越运营中描述的关于运营效率的一般最佳实践和建议。

性能优化

本部分介绍在使用此参考架构在Google Cloud 中设计和构建满足工作负载性能要求的全球拓扑时应考虑的因素。

网络性能

对于需要在应用层和网络层内实现较短的虚拟机间网络延迟时间的工作负载,您可以创建紧凑布置政策,并将其应用于用于这些层的 MIG 模板。创建虚拟机时,MIG 会将虚拟机布置在彼此邻近的物理服务器上。紧凑布置政策有助于提高虚拟机间网络性能,而分散布置政策有助于提高虚拟机可用性,如前所述。为了在网络性能和可用性之间实现最佳平衡,在创建紧凑布置政策时,您可以指定虚拟机之间的放置距离。如需了解详情,请参阅布置政策概览

Compute Engine 对每个虚拟机的出站流量网络带宽有限制。此限制取决于虚拟机的机器类型以及流量是否通过与来源虚拟机相同的 VPC 网络进行路由。对于具有特定机器类型的虚拟机,为了提高网络性能,您可以通过启用 Tier_1 网络来获得更高的最大出站流量带宽。

计算性能

Compute Engine 为您在虚拟机上运行的工作负载提供了各种预定义和可自定义的机器类型。根据您的性能要求选择适当的机器类型。如需了解详情,请参阅机器系列资源和比较指南

虚拟机多线程

您分配给 Compute Engine 虚拟机的每个虚拟 CPU (vCPU) 都作为单个硬件多线程实现。默认情况下,两个 vCPU 共用一个物理 CPU 核心。对于涉及高度并行运算或执行浮点计算的应用(例如基因序列分析和财务风险建模),您可以通过减少每个物理 CPU 核心上运行的线程数来提高性能。如需了解详情,请参阅设置每个核心的线程数

虚拟机多线程可能会给某些第三方软件(例如数据库)带来许可方面的影响。如需了解详情,请阅读第三方软件的许可文档。

Network Service Tiers

通过 Network Service Tiers,您可以优化工作负载的网络费用和性能。您可以选择高级层级或标准层级。高级层级通过 Google 的全球骨干网传输流量,以最大限度地减少丟包并缩短延迟时间。标准层级使用对等互连、网络服务提供商 (ISP) 或中转网络在最靠近 Google Cloud 工作负载运行所在区域的边缘入网点 (PoP) 传输流量。为优化性能,我们建议您使用高级层级。为优化费用,我们建议您使用标准层级。

本文档中的架构使用具有外部 IP 地址且后端位于多个区域的全球外部负载均衡器。此架构要求您使用高级层级,该层级使用 Google 高度可靠的全球骨干网,帮助您最大限度地减少丢包和延迟时间。

如果您使用区域级外部负载均衡器并使用 Cloud DNS 将流量路由到各个区域,则可以根据需求选择高级层级或标准层级。标准层级的价格低于高级层级。标准层级适用于对丟包不敏感且没有低延迟要求的流量。

Spanner 性能

预配 Spanner 实例时,您可以按照节点或处理单元数量指定实例的计算容量。监控 Spanner 实例的资源利用率,并根据预期负载和应用的性能要求扩缩容量。您可以手动或自动扩缩 Spanner 实例的容量。如需了解详情,请参阅自动扩缩概览

使用多区域配置时,Spanner 可跨多个区域同步复制数据。这种复制功能可实现从多个位置进行低延迟读取操作。代价是写入操作的延迟时间较长,因为仲裁副本分布在多个区域中。为了最大限度地缩短多区域配置中读写事务的延迟时间,Spanner 使用主要副本感知路由(默认启用)。

如需了解优化 Spanner 实例和数据库性能的相关建议,请参阅以下文档:

缓存

如果您的应用提供静态网站资产,并且您的架构包含全球外部应用负载均衡器,则可以使用 Cloud CDN 缓存更靠近用户的定期访问的静态内容。Cloud CDN 有助于为用户提高性能,减少后端的基础设施资源用量,并降低网络传送费用。如需了解详情,请参阅提高负载均衡的 Web 性能,加强负载均衡的 Web 保护

更多性能考虑因素

为工作负载构建架构时,请考虑 Google Cloud Well-Architected Framework:性能优化中提供的一般最佳实践和建议。

后续步骤

贡献者

作者:

其他贡献者: