Compute Engine 上的多区域部署

Last reviewed 2024-02-20 UTC

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

架构

图 1 展示了在两个 Google Cloud 区域部署的独立堆栈中以主动/主动模式运行的应用的架构。在每个区域中,该应用都在三个可用区单独运行。该架构与多区域部署原型一致,可确保您的 Google Cloud 拓扑稳健可靠地应对可用区和区域服务中断,并且为应用用户提供较低的延迟。

使用全球负载均衡器的多区域架构

图 1. 全球负载均衡器会将用户请求路由到区域隔离式应用堆栈。

此架构基于基础设施即服务 (IaaS) 云模型。您可以在 Google Cloud 中预配所需的基础设施资源(计算、网络和存储),并保留对应用栈操作系统、中间件和更高层级的完全控制权和责任。如需详细了解 IaaS 和其他云模型,请参阅 PaaS、IaaS、SaaS 与 CaaS:它们之间有何区别?

上图包括以下组件:

组件 Purpose
全球外部负载均衡器

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

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

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

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

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

区域级内部负载均衡器

每个区域内的内部负载均衡器将流量从网络层虚拟机分配到该区域中的应用层虚拟机。

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

应用层级的区域级 MIG

应用层级部署在属于区域级 MIG 的 Compute Engine 虚拟机上。每个区域中的 MIG 都是该区域内的内部负载均衡器的后端。

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

部署在 Compute Engine 虚拟机上的第三方数据库

第三方数据库(例如 PostgreSQL)部署在两个区域的 Compute Engine 虚拟机上。您可以为数据库设置跨区域复制,然后在每个区域中配置数据库以故障切换到另一个区域中的数据库。复制和故障切换功能取决于您使用的数据库。

在安装和管理第三方数据库时,需要为复制、应用更新、监控和确保可用性投入额外的精力和运营成本。通过使用多区域 Spanner 实例等全托管式数据库,您可以避免安装和管理第三方数据库的开销,并利用内置的高可用性 (HA) 功能。

Virtual Private Cloud 网络子网 该架构中的所有 Google Cloud 资源都使用一个 VPC 网络,该网络在两个不同的区域中具有子网。
Cloud Storage 双区域存储桶 应用数据的备份存储在双区域 Cloud Storage 存储桶中。或者,您也可以使用备份和灾难恢复服务创建、存储和管理数据库备份。

使用场景

本部分介绍了适合选择在 Compute Engine 上进行多区域部署的应用场景。

高效地迁移本地应用

您可以使用此参考架构构建 Google Cloud 拓扑,将本地应用重新托管(直接原样迁移)到云端,并且只需对应用进行少量更改。此参考架构中的所有应用层级都托管在 Compute Engine 虚拟机上。这种方法可让您将本地应用高效地迁移到云,并充分利用 Google Cloud 提供的费用优势、可靠性、性能和运营简便性。

为分布在不同地理位置的用户提供高可用性

针对那些对业务很关键且需要高可用性和稳健性以防区域服务中断的应用,我们建议实施多区域部署。如果某个区域因任何原因而变得不可用(甚至由自然灾害引起大规模中断),应用用户不会遇到任何停机时间。流量会路由到其他可用区域中的应用。如果数据已同步复制,恢复时间目标 (RTO) 将接近于零。

应用用户的延迟时间较短

如果您的用户在特定地理区域(例如某大洲)内,您可以使用多区域部署,以便在可用性和性能之间实现最佳平衡。当其中一个区域发生服务中断时,全球负载均衡器会将源自该区域的请求发送到另一个区域。由于这些区域都在一个地理区域内,因此用户不会感觉到明显的性能影响。

设计替代方案

使用全球负载均衡器的架构(图 1)支持可帮助提高部署可靠性的特定功能,例如使用 Cloud CDN 的边缘缓存。本部分介绍了使用区域级负载均衡器和 Cloud DNS 的替代架构,如图 2 所示。此备用架构额外支持以下功能:

  • 在指定区域中终止传输层安全协议 (TLS)。
  • 能够从您指定的区域传送内容。但是,该区域在指定时间可能不是表现最好的区域。
  • 范围更广的连接协议(如果您使用直通式网络负载均衡器)。

如需详细了解区域级和全球负载均衡器之间的差异,请参阅以下文档:

使用区域级负载均衡器和 DNS 的多区域架构。

图 2. Cloud DNS 将用户请求路由到区域级负载均衡器。

与图 1 中的架构一样,图 2 中的架构可以可靠地应对可用区和区域服务中断。Cloud DNS 公共区域会将用户请求路由到相应的区域。区域级外部负载均衡器会接收用户请求,并将其分布在每个区域内应用的网络层实例中。此架构与基于全球负载均衡器的架构中的组件相同。

设计考虑事项

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

系统设计

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

区域选择

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

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

其中一些因素和要求可能需要权衡。例如,成本效益最高的区域,其碳足迹可能并非最低。如需了解详情,请参阅 Google Cloud 架构框架中的选择地理可用区和区域

计算服务

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

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

存储服务

本文档中显示的架构对所有层使用区域级 Persistent Disk 卷。永久性磁盘可以跨一个区域中的两个可用区同步复制数据。

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

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

如果您的数据库是 Microsoft SQL Server,您可以部署故障切换集群实例 (FCI),并使用全托管式 Google Cloud NetApp Volumes 为数据库提供持续可用性 (CA) SMB 存储。

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

数据库服务

本文档中的参考架构使用部署在 Compute Engine 虚拟机上的第三方数据库,如 PostgreSQL。安装和管理第三方数据库时,需要为以下操作投入精力和财力,例如应用更新、监控和确保可用性、执行备份以及从故障中恢复。

您可以使用全托管式数据库服务(例如 Cloud SQLAlloyDB for PostgreSQLBigtableSpannerFirestore)来免去安装和管理第三方数据库所需的工作和费用。这些 Google Cloud 数据库服务提供正常运行时间服务等级协议 (SLA),且包含可伸缩性和可观测性的默认功能。如果您的工作负载需要 Oracle 数据库,您可以使用 Google Cloud 提供的裸金属解决方案。如需简要了解每个 Google Cloud 数据库服务适用的用例,请参阅 Google Cloud 数据库

为多区域部署选择和设置数据库时,请考虑应用对跨区域数据一致性的要求,并权衡考虑性能和费用因素。

  • 如果应用需要强一致性(所有用户都必须始终读取相同的数据),则必须跨架构中的所有区域同步复制数据。但是,同步复制可能会降低费用并降低性能,因为写入的数据必须跨区域实时复制,然后才能用于读取操作。
  • 如果您的应用可以容忍最终一致性,则您可以异步复制数据。这有助于提高性能,因为数据不需要跨区域同步复制。但是,不同区域的用户可能会读取不同的数据,因为在请求时可能尚未完全复制这些数据。

安全与合规性

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

防范威胁

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

虚拟机的外部访问权限

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

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

虚拟机映像安全性

为确保您的虚拟机仅使用已获批准的映像(即具有符合政策或安全要求的软件),您可以定义一个组织政策来限制在特定公共映像项目中使用映像。如需了解详情,请参阅设置可信映像政策

服务账号权限

在启用了 Compute Engine API 的 Google Cloud 项目中,系统会自动创建一个默认服务账号。除非此行为已停用,否则默认服务账号将获得 Editor IAM 角色 (roles/editor)。默认情况下,默认服务账号会关联到您使用 Google Cloud CLI 或 Google Cloud 控制台创建的所有虚拟机。Editor 角色包含一系列权限,因此将默认服务账号关联到虚拟机会带来安全风险。为避免此风险,您可以为每个应用创建和使用专用服务账号。如需指定服务账号可以访问的资源,请使用精细的政策。如需了解详情,请参阅“使用服务账号的最佳实践”中的限制服务账号权限

数据驻留注意事项

您可以使用区域级负载均衡器来构建多区域架构,以帮助您满足数据驻留要求。例如,欧洲的国家/地区可能会要求在位于欧洲的数据中心存储和访问所有用户数据。为了满足此要求,您可以使用基于图的区域级负载均衡器架构(图 2)。在该架构中,应用在欧洲的 Google Cloud 区域运行,您可以将 Cloud DNS 与地理围栏路由政策搭配使用以通过区域级负载均衡器路由流量。若要满足数据库层级的数据驻留要求,请使用分片架构,而不是跨区域复制。使用此方法时,每个区域中的数据都是独立的,但您无法为数据库实现跨区域高可用性和故障切换。

更多安全注意事项

为工作负载构建架构时,请考虑安全基础蓝图中提供的平台级安全最佳实践和建议。

可靠性

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

MIG 自动扩缩

在多个区域级 MIG 上运行应用时,应用在隔离的可用区中断或地区服务中断期间仍然可用。借助无状态 MIG 的自动扩缩功能,您可以使应用的可用性和性能维持在可预测的水平。如需控制无状态 MIG 的自动扩缩行为,您可以指定目标利用率指标,例如平均 CPU 利用率。您还可以为无状态 MIG 配置基于时间表的自动扩缩。有状态 MIG 无法自动扩缩。如需了解详情,请参阅自动扩缩实例组

虚拟机自动修复

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

虚拟机布置

在本文档介绍的架构中,应用层和网络层在分布于多个可用区中的 Compute Engine 虚拟机上运行。这样分布可确保您的应用能够可靠地应对可用区服务中断。如需进一步提高这种稳健性,您可以创建分散布置政策并将其应用于 MIG 模板。MIG 会在创建虚拟机时将每个可用区中的虚拟机布置在不同的物理服务器(称为“主机”)上,因此您的虚拟机可以稳健地应对单个主机故障。如需了解详情,请参阅将分散布置政策应用于虚拟机

虚拟机容量规划

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

永久性磁盘状态

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

数据耐用性

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

如需存储数据库备份和事务日志,您可以使用区域级 Cloud Storage 存储桶,它提供的跨区域冗余备份存储费用最低。

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

  • 您可以使用标准快照来捕获 Persistent Disk 卷的时间点状态。快照以冗余方式存储在多个区域中,通过自动校验和来确保数据完整性。快照默认采用增量方式,因此占用的存储空间会更少,而且可以节省资金。快照存储在您可以配置的 Cloud Storage 位置中。如需了解更多关于使用和管理快照的建议,请参阅 Compute Engine 磁盘快照的最佳做法
  • 通过区域级永久性磁盘卷,您可以运行不受永久性磁盘故障影响的高可用性应用。创建区域永久性磁盘卷时,Compute Engine 会在同一区域的不同可用区中保留磁盘的副本。数据会同步复制到两个可用区中的磁盘。如果两个可用区中的任何一个发生服务中断,则数据仍会可用。

数据库可用性

如需在每个区域中为数据库实现跨可用区故障切换,您需要一种主数据库故障标识机制,还需要一个故障切换到备用数据库的过程。故障切换机制的具体细节取决于您使用的数据库。您可以设置观察器实例来检测主数据库的故障并编排故障切换。您必须适当地配置故障切换规则,以避免脑裂情况和不必要的故障切换。如需了解可用于为 PostgreSQL 数据库实现故障切换的架构示例,请参阅 Compute Engine 上 PostgreSQL 集群的高可用性架构

更多可靠性注意事项

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

费用优化

本部分将指导您优化您使用此参考架构构建的多区域 Google Cloud 拓扑的设置和操作费用。

虚拟机机器类型

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

虚拟机预配模型

如果您的应用具备容错能力,则 Spot 虚拟机可以帮助您降低应用层和网络层中虚拟机的 Compute Engine 费用。Spot 虚拟机的费用远低于常规虚拟机。但是,Compute Engine 可能会提前停止或删除 Spot 虚拟机来收回容量。Spot 虚拟机适用于可以容忍抢占且没有高可用性要求的批量作业。Spot 虚拟机提供与常规虚拟机相同的机器类型、选项和性能。但是,如果某个可用区中的资源容量有限,则在重新获得所需容量后,MIG 可能才会自动横向扩容(即创建虚拟机)。

资源利用率

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

第三方许可

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

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

更多费用注意事项

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

运营效率

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

虚拟机配置更新

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

虚拟机映像

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

确定性实例模板

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

更多运营注意事项

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

性能优化

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

虚拟机布置

如果工作负载需要较短的虚拟机间网络延迟,您可以创建紧凑布置政策并将其应用于 MIG 模板。创建虚拟机时,MIG 会将虚拟机布置在彼此邻近的物理服务器上。如需了解详情,请参阅使用紧凑布置政策缩短延迟时间

虚拟机机器类型

Compute Engine 提供了各种预定义和可自定义的机器类型,您可以根据费用和性能要求进行选择。机器类型分为各种机器系列。下表总结了针对不同工作负载类型推荐的机器系列:

要求 推荐的机器系列 机器系列示例
为各种工作负载提供最佳性价比 通用机器系列 C3、C3D、E2、N2、N2D、Tau T2D、Tau T2A
提供最高的单核心性能,并针对计算密集型工作负载进行了优化 计算优化虚拟机系列 C2、C2D、H3
为内存密集型工作负载提供较高的内存 vCPU 之比 内存优化机器系列 M3、M2、M1
面向大规模并行工作负载的 GPU 加速器优化机器系列 A2、G2

如需了解详情,请参阅机器系列资源和比较指南

虚拟机多线程

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

Network Service Tiers

通过 Network Service Tiers,您可以优化工作负载的网络费用和性能。您可以从以下层级中进行选择:

  • 高级层级使用 Google 高度可靠的全球骨干网,帮助您最大限度地减少丟包并缩短延迟时间。流量会在最靠近最终用户 ISP 的全球边缘入网点 (PoP) 进入和离开 Google 网络。为获得最佳性能,我们建议使用高级层级作为默认层级。对于虚拟机和负载均衡器,高级层级既支持区域级外部 IP 地址,又支持全球级外部 IP 地址。
  • 标准层级仅适用于使用区域级外部 IP 地址的资源。流量会在最靠近 Google Cloud 工作负载运行区域的边缘 PoP 进入和离开 Google 网络。标准层级的价格低于高级层级。标准层级适用于对丟包不敏感且没有低延迟要求的流量。

缓存

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

更多性能考虑因素

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

后续步骤

贡献者

作者: Kumar Dhanagopal | 跨产品解决方案开发者

其他贡献者: