Compute Engine 上的单可用区部署

Last reviewed 2024-02-08 UTC

本文档提供在 Google Cloud 中的单个可用区中的 Compute Engine 虚拟机上运行的多层应用的参考架构。您可以使用此参考架构高效地将本地应用重新托管(直接原样迁移)到云端,并且只需对应用进行少量更改。本文档还介绍了在为云应用构建可用区级架构时应考虑的设计因素。本文档的目标受众是云架构师。

架构

下图展示了在单个 Google Cloud 可用区中运行的应用的架构。此架构与 Google Cloud 可用区级部署原型一致。

使用 Compute Engine 的单可用区架构。

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

上图包括以下组件:

组件 目的
区域级外部负载均衡器

区域级外部负载均衡器接收用户请求并将其分发到 Web 层虚拟机。

根据流量类型和其他要求使用适当的负载均衡器类型。例如,如果后端由 Web 服务器组成(如前面的架构所示),则使用应用负载均衡器来转发 HTTP(S) 流量。如需对 TCP 流量进行负载均衡,请使用网络负载均衡器。如需了解详情,请参阅选择负载均衡器

Web 层的可用区级托管式实例组 (MIG) 应用的 Web 层部署在属于可用区级 MIG 的 Compute Engine 虚拟机上。MIG 是区域级外部负载均衡器的后端。MIG 中的每个虚拟机托管应用 Web 层的一个独立实例。
区域内部负载均衡器

区域级内部负载均衡器将来自 Web 层虚拟机的流量分发到应用层虚拟机。

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

应用层的可用区级 MIG 应用层部署在属于可用区级 MIG 的 Compute Engine 虚拟机上,可用区级 MIG 是内部负载均衡器的后端。MIG 中的每个虚拟机托管应用层的一个独立实例。
部署在 Compute Engine 虚拟机上的第三方数据库

本文档中的架构展示了部署在 Compute Engine 虚拟机上的第三方数据库(例如 PostgreSQL)。您可以在其他可用区中部署备用数据库。数据库复制和故障切换功能取决于您使用的数据库。

在安装和管理第三方数据库时,需要为应用更新、监控和确保可用性投入额外的精力和运营成本。通过使用 Cloud SQL 或 AlloyDB for PostgreSQL 等全托管式数据库服务,您可以避免安装和管理第三方数据库的开销,并利用内置的高可用性 (HA) 功能。如需详细了解托管式数据库选项,请参阅数据库服务

Virtual Private Cloud 网络子网

架构中的所有 Google Cloud 资源都使用一个 VPC 网络和子网。

根据您的需要,您也可以选择构建使用多个 VPC 网络或多个子网的架构。如需了解详情,请参阅“VPC 设计的最佳实践与参考架构”中的决定是否创建多个 VPC 网络

Cloud Storage 区域级存储桶

应用和数据库备份存储在区域级 Cloud Storage 存储桶中。如果发生可用区服务中断,您的应用和数据不会丢失。

或者,您也可以使用备份和灾难恢复服务创建、存储和管理数据库备份。

使用的产品

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

  • Compute Engine:一项安全且可自定义的计算服务,可让您在 Google 的基础设施上创建并运行虚拟机。
  • Cloud Load Balancing:一组高性能、可扩缩的全球和区域级负载均衡器。
  • Cloud Storage:适用于各种数据类型的费用低廉且不受限制的对象存储。数据可从 Google Cloud 内部和外部访问,并且跨位置进行复制以实现冗余。
  • Virtual Private Cloud:为您的 Google Cloud 工作负载提供全球可扩缩的网络功能的虚拟系统。

使用场景

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

  • 云开发和测试:您可以使用单可以区部署架构来构建低成本的云环境,以进行开发和测试。
  • 不需要高可用性的应用:对于可以容忍基础设施服务中断导致的停机的应用,单可用区架构可能就足够了。
  • 应用组件之间的低延迟网络:单区域架构可能适合在计算节点之间需要低延迟和高带宽网络连接的应用(例如批处理计算)。单可用区部署中没有跨可用区网络流量,您也不需要为可用区内的流量付费。
  • 商业工作负载迁移:可用区级部署架构为您无法控制代码或无法支持基本的主动-被动拓扑以外的其他架构的本地商业应用提供简单的云迁移路径。
  • 运行许可受限软件:单可用区架构可能非常适合同时运行多个实例会产生过高费用或不允许同时运行多个实例的许可受限系统。

设计考虑事项

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

系统设计

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

选择区域

为应用选择 Google Cloud 区域和可用区时,请考虑以下因素和要求:

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

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

计算服务

本文档中的参考架构对应用的所有层级使用 Compute Engine 虚拟机。除非另有说明,否则本文档中的设计指南特定于 Compute Engine。

根据应用的要求,您可以从以下其他 Google Cloud 计算服务中进行选择:这些服务的设计指南不在本文档的讨论范围内。

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

存储服务

本文档中显示的架构为所有层级使用可用区级 Persistent Disk 卷。如需获得更持久的永久性存储空间,您可以使用区域级 Persistent Disk 卷,这种类型的卷可提供一个区域内两个可用区的同步数据复制。

如需使用在一个区域内的可用区中冗余的低成本存储,您可以使用 Cloud Storage 区域级存储桶。

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

如果您的数据库是 Microsoft SQL Server,我们建议使用 Cloud SQL for SQL Server。如果 Cloud SQL 不支持您的配置要求,或者您需要访问操作系统,则可以部署故障切换集群实例 (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) 等外部威胁。安全政策在边界上(即流量到达 Web 层之前)强制执行。每项政策都是一组规则,用于指定应评估的特定条件以及满足条件时要执行的操作。例如,规则可以指定在传入流量的源 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 角色包含一系列权限,因此将默认服务账号关联到虚拟机会带来安全风险。为避免此风险,您可以为每个应用创建和使用专用服务账号。如需指定服务账号可以访问的资源,请使用精细的政策。如需了解详情,请参阅“使用服务账号的最佳实践”中的限制服务账号权限

网络安全

如需控制架构中资源之间的网络流量,您必须设置适当的 Cloud 新一代防火墙规则。每个防火墙规则都可让您根据协议、IP 地址和端口等参数来控制流量。例如,您可以配置防火墙规则以允许从 Web 服务器虚拟机到数据库虚拟机特定端口的 TCP 流量,并阻止所有其他流量。

更多安全注意事项

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

可靠性

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

基础设施服务中断

在单可用区部署架构中,如果基础设施堆栈中的任何组件发生故障,则当每个层级至少包含一个具有足够容量并且正常运行的组件时,应用即可处理请求。例如,如果 Web 服务器实例发生故障,则负载均衡器会将用户请求转发到其他可用的 Web 服务器实例。如果托管 Web 服务器或应用服务器实例的虚拟机崩溃,MIG 会自动重新创建虚拟机。如果数据库崩溃,您必须手动激活第二个数据库,并更新应用服务器实例以连接到数据库。

可用区服务中断或区域服务中断会影响单可用区部署中的所有 Compute Engine 虚拟机。可用区服务中断不会影响此架构中的负载均衡器,因为它是区域级资源。但是,负载均衡器无法分配流量,因为没有可用的后端。如果发生可用区或区域服务中断,您必须等待 Google 解决服务中断故障,然后验证应用按预期工作。

您可以通过在另一个 Google Cloud 可用区或区域中维护基础设施堆栈的被动(故障切换)副本来减少由可用区或区域服务中断引起的停机时间。如果主要可用区发生服务中断,您可以在故障切换可用区或区域中激活堆栈,并使用 DNS 路由政策将流量路由到故障切换可用区或区域中的负载均衡器。

对于需要稳健可靠地应对可用区或区域服务中断的应用,请考虑使用单区域或多区域架构。请参阅以下参考架构:

MIG 自动扩缩

借助无状态 MIG 的自动扩缩功能,您可以使应用的可用性和性能维持在可预测的水平。有状态 MIG 无法自动扩缩。

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

MIG 大小限制

默认情况下,一个可用区级 MIG 最多可以有 1,000 个虚拟机。您可以提高 MIG 的大小限制至 2,000 个虚拟机。

虚拟机自动修复

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

虚拟机布置

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

虚拟机容量规划

为确保 MIG 自动扩缩时有 Compute Engine 虚拟机容量可用,您可以创建预留。预留在特定可用区为属于所选机器类型的指定数量的虚拟机提供有保障的容量。预留可以专用于某个项目,也可以在多个项目中共享。即使未预配或使用预留的资源,您也需要为预留的资源付费。如需详细了解预留(包括结算注意事项),请参阅 Compute Engine 可用区级资源的预留

永久性磁盘状态

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

数据耐用性

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

如果您使用 Cloud SQL 等托管式数据库服务,则系统会根据您定义的保留政策自动进行备份。您可以使用额外的逻辑备份对备份策略进行补充,以满足监管、工作流或业务要求。

如果您使用第三方数据库,并且需要存储数据库备份和事务日志,则可以使用区域级 Cloud Storage 存储桶。区域级 Cloud Storage 存储桶提供费用低廉的备份存储,支持跨可用区冗余。

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

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

数据库可用性

如果您使用托管式数据库服务(如高可用性配置中的 Cloud SQL),则在主数据库发生故障时,Cloud SQL 会自动故障切换到备用数据库。您无需更改数据库端点的 IP 地址。如果您使用部署在 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%。

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

更多费用注意事项

为工作负载构建架构时,请考虑 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 高度可靠的全球骨干网,帮助您最大限度地减少丟包并缩短延迟时间。流量会在靠近最终用户的全球边缘入网点 (PoP) 进入和离开 Google 网络。为获得最佳性能,我们建议使用高级层级作为默认层级。
  • 使用标准层级时,流量会在最靠近工作负载运行的 Google Cloud 位置的边缘 PoP 进入和离开 Google 网络。标准层级的价格低于高级层级。标准层级适用于对丟包不敏感且没有低延迟要求的流量。

更多性能考虑因素

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

后续步骤

贡献者

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

其他贡献者: