本文档为在 Google Cloud 上的全球拓扑中的 Compute Engine 虚拟机和 Spanner 上运行的多层应用提供参考架构。本文档还提供了相关指南,帮助您构建使用其他 Google Cloud 基础设施服务的架构。其中介绍了您在为云应用构建全球架构时应考虑的设计因素。本文档的目标受众是云架构师。
此架构与全球部署原型一致。对于为全球用户提供服务并且需要高可用性和稳健性以应对多个区域的服务中断的应用,我们建议使用此原型。此架构支持在网络、应用和数据库级别上进行弹性扩缩。它可以让您根据用量调整费用,而不必在性能、可用性或可伸缩性方面做出妥协。
架构
下图展示了在分布于全球多个 Google Cloud 区域的基础设施上运行的应用的架构。
在此架构中,全球负载均衡器根据 Web 服务器的可用性、容量以及与流量来源的邻近性,将传入请求分配到合适区域的 Web 服务器。跨区域内部负载均衡层根据应用服务器的可用性和容量,处理从 Web 服务器到合适应用服务器的流量分配。应用服务器对在所有区域中都可供使用的同步复制数据库执行数据读写操作。
该架构包括以下 Google Cloud 资源:
组件 | Purpose |
---|---|
全球外部负载均衡器 |
全球外部负载均衡器接收用户请求并将其分发给应用。全球外部负载均衡器通告单个任播 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 网络具有以下子网:
您可以在每个区域中都创建一个单独的 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 资源的费用。
- 跨区域数据传输费用。
- 法规要求。
其中一些因素和要求可能需要权衡。例如,成本效益最高的区域,其碳足迹可能并非最低。如需了解详情,请参阅 Google Cloud 架构框架中的选择地理可用区和区域。
计算服务
本文档中的参考架构对网络层和应用层使用 Compute Engine 虚拟机。根据应用的要求,您可以从其他 Google Cloud 计算服务中进行选择:
- 您可以在 Google Kubernetes Engine (GKE) 集群中运行容器化应用。GKE 是一个容器编排引擎,可自动部署、扩缩和管理容器化应用。
- 如果您希望将 IT 工作重点放在数据和应用上,而不是放在设置和运营基础设施资源上,就可以使用无服务器服务,例如 Cloud Run 和 Cloud Functions。
无论是决定使用虚拟机、容器还是无服务器服务,都需要在配置灵活性和管理工作量之间作出权衡取舍。虚拟机和容器提供了更大的配置灵活性,但您需要负责管理资源。在无服务器架构中,您将工作负载部署到极少需要管理的预配置平台。如需详细了解如何为 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) 规则。如需了解详情,请参阅安全政策概览。
虚拟机的外部访问权限
在本文档介绍的参考架构中,托管应用层和网络层的虚拟机无需从互联网进行入站访问。请勿为这些虚拟机分配外部 IP 地址。仅具有专用内部 IP 地址的 Google Cloud 资源仍然可以使用 Private Service Connect 或专用 Google 访问通道来访问某些 Google API 和服务。如需了解详情,请参阅服务的专用访问通道选项。
如需从仅具有专用 IP 地址的 Google Cloud 资源(例如此参考架构中的 Compute Engine 虚拟机)建立安全的出站连接,您可以使用安全 Web 代理 或 Cloud NAT。
虚拟机映像安全性
为确保您的虚拟机仅使用已获批准的映像(即具有符合政策或安全要求的软件),您可以定义一个组织政策来限制在特定公共映像项目中使用映像。如需了解详情,请参阅设置可信映像政策。
服务账号权限
在启用了 Compute Engine API 的 Google Cloud 项目中,系统会自动创建一个默认服务账号。对于在 2024 年 5 月 3 日之前创建的 Google Cloud 组织,此默认服务账号会被授予 Editor IAM 角色 (roles/editor
),除非此行为已停用。
默认情况下,默认服务账号会关联到您使用 Google Cloud CLI 或 Google Cloud 控制台创建的所有虚拟机。Editor 角色包含一系列权限,因此将默认服务账号关联到虚拟机会带来安全风险。为避免此风险,您可以为每个应用创建和使用专用服务账号。如需指定服务账号可以访问的资源,请使用精细的政策。如需了解详情,请参阅“使用服务账号的最佳实践”中的限制服务账号权限。
更多安全注意事项
为工作负载构建架构时,请考虑企业基础蓝图中提供的平台级安全最佳实践和建议。
可靠性
本部分介绍在使用此参考架构为 Google Cloud 中的全球部署构建和运营可靠的基础设施时应考虑的设计因素。
MIG 自动扩缩
在多个区域级 MIG 上运行应用时,应用在隔离的可用区服务中断或区域服务中断期间仍然可用。借助无状态 MIG 的自动扩缩功能,您可以使应用的可用性和性能维持在可预测的水平。如需控制无状态 MIG 的自动扩缩行为,您可以指定目标利用率指标,例如平均 CPU 利用率。您还可以为无状态 MIG 配置基于时间表的自动扩缩。有状态 MIG 无法自动扩缩。如需了解详情,请参阅自动扩缩实例组。
虚拟机自动修复
有时,托管应用的虚拟机可能正在运行且可用,但应用本身可能存在问题。它可能会冻结、崩溃或内存不足。如需验证应用是否按预期响应,您可以在 MIG 的自动修复政策中配置基于应用的健康检查。如果特定虚拟机上的应用没有响应,则 MIG 会自动修复该虚拟机。如需详细了解如何配置自动修复,请参阅设置应用健康检查和自动修复。
虚拟机布置
在本文档介绍的架构中,应用层和网络层在分布于多个可用区中的 Compute Engine 虚拟机上运行。这样分布可确保您的应用能够可靠地应对可用区服务中断。如需进一步提高这种稳健性,您可以创建分散布置政策并将其应用于 MIG 模板。MIG 会在创建虚拟机时将每个可用区中的虚拟机布置在不同的物理服务器(称为“主机”)上,因此您的虚拟机可以稳健地应对单个主机故障。如需了解详情,请参阅将分散布置政策应用于虚拟机。
虚拟机容量规划
为确保在 MIG 自动扩缩需要时有 Compute Engine 虚拟机容量可用,您可以创建预留。预留在特定可用区为属于所选机器类型的指定数量的虚拟机提供有保障的容量。预留可以专用于某个项目,也可以在多个项目中共享。如需详细了解预留(包括结算注意事项),请参阅 Compute Engine 可用区级资源的预留。
永久性磁盘状态
应用设计的最佳做法是免去有状态本地磁盘的需要。但如果有相应要求,您可以将永久性磁盘配置为有状态,确保在修复或重新创建虚拟机时保留数据。但是,我们建议您让启动磁盘保持无状态,以便通过新版本和安全补丁轻松地将其更新为最新映像。如需了解详情,请参阅在 MIG 中配置有状态永久性磁盘。
数据耐用性
您可以使用 Backup and DR Service 创建、存储和管理 Compute Engine 虚拟机的备份。备份和灾难恢复以应用可读的原始格式存储备份数据。如有需要,您可以通过直接使用长期备份存储空间中的数据将工作负载恢复到生产环境,而无需进行耗时的数据移动或准备活动。
Compute Engine 提供了以下选项来帮助确保永久性磁盘卷中所存储数据的耐用性:
- 标准快照可让您捕获永久性磁盘卷的时间点状态。快照以冗余方式存储在多个区域中,通过自动校验和来确保数据完整性。快照默认采用增量方式,因此占用的存储空间会更少,而且可以节省资金。快照存储在您可以配置的 Cloud Storage 位置中。如需了解更多关于使用和管理快照的建议,请参阅 Compute Engine 磁盘快照的最佳做法。
- 通过区域级永久性磁盘卷,您可以运行不受永久性磁盘故障影响的高可用性应用。创建区域永久性磁盘卷时,Compute Engine 会在同一区域的不同可用区中保留磁盘的副本。数据会同步复制到两个可用区中的磁盘。如果两个可用区中的任何一个发生服务中断,则数据仍会可用。
您可以使用 Spanner 中的备份和恢复功能来帮助防范由运算符错误和应用问题导致的数据损坏。如需了解详情,请参阅 Spanner 备份和恢复概览。
数据库可靠性
存储在多区域 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,将许可费用降低 50%。
更多费用注意事项
为工作负载构建架构时,请考虑 Google Cloud 架构框架:费用优化中提供的一般最佳实践和建议。
运营效率
本部分介绍使用此参考架构设计和构建可高效运营的全球 Google Cloud 拓扑时应考虑的因素。
虚拟机配置更新
如需更新 MIG 中的虚拟机的配置(例如机器类型或启动磁盘映像),请使用所需的配置创建新的实例模板,然后将新模板应用于 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 架构框架:卓越运营中描述的关于运营效率的一般最佳实践和建议。
性能优化
本部分介绍在使用此参考架构在 Google Cloud 中设计和构建满足工作负载性能要求的全球拓扑时应考虑的因素。
虚拟机布置
如果工作负载需要较短的虚拟机间网络延迟,您可以创建紧凑布置政策并将其应用于 MIG 模板。创建虚拟机时,MIG 会将虚拟机布置在彼此邻近的物理服务器上。如需了解详情,请参阅使用紧凑布置政策缩短延迟时间。
虚拟机机器类型
Compute Engine 提供了各种预定义和可自定义的机器类型,您可以根据费用和性能要求进行选择。机器类型分为各种机器系列。下表总结了适用于不同工作负载类型的推荐机器系列:
要求 | 推荐的机器系列 |
---|---|
为各种工作负载提供最佳性价比 | 通用机器系列 |
提供最高的单核心性能,并针对计算密集型工作负载进行了优化 | 计算优化虚拟机系列 |
为内存密集型工作负载提供较高的内存 vCPU 之比 | 内存优化机器系列 |
面向大规模并行工作负载的 GPU | 加速器优化机器系列 |
较低的核心用量和较高的存储密度 | 存储优化机器系列 |
如需了解详情,请参阅机器系列资源和比较指南。
虚拟机多线程
您分配给 Compute Engine 虚拟机的每个虚拟 CPU (vCPU) 都作为单个硬件多线程实现。默认情况下,两个 vCPU 共用一个物理 CPU 核心。对于高度并行或执行浮点计算的工作负载(例如基因序列分析和财务风险建模),您可以通过减少每个物理 CPU 核心上运行的线程数来提高性能。如需了解详情,请参阅设置每个核心的线程数。
Network Service Tiers
通过 Network Service Tiers,您可以优化工作负载的网络费用和性能。根据您的需求,您可以选择高级层级或标准层级。
本文档中的架构使用具有外部 IP 地址且后端位于多个区域的全球外部负载均衡器。此架构要求您使用高级层级,该层级使用 Google 高度可靠的全球骨干网,帮助您最大限度地减少丢包和延迟时间。
如果您使用区域级外部负载均衡器并使用 Cloud DNS 将流量路由到各个区域,则可以根据需求选择高级层级或标准层级。标准层级的价格低于高级层级。标准层级适用于对丟包不敏感且没有低延迟要求的流量。
Spanner 性能
预配 Spanner 实例时,您可以按照节点或处理单元数量指定实例的计算容量。监控 Spanner 实例的资源利用率,并根据预期负载和应用的性能要求扩缩容量。您可以手动或自动扩缩 Spanner 实例的容量。如需了解详情,请参阅自动扩缩概览。
使用多区域配置时,Spanner 可跨多个区域同步复制数据。这种复制功能可实现从多个位置进行低延迟读取操作。代价是写入操作的延迟时间较长,因为仲裁副本分布在多个区域中。为了最大限度地缩短多区域配置中读写事务的延迟时间,Spanner 使用主要副本感知路由(默认启用)。
如需了解优化 Spanner 实例和数据库性能的相关建议,请参阅以下文档:
缓存
如果您的应用提供静态网站资产,并且您的架构包含全球外部应用负载均衡器,则可以使用 Cloud CDN 缓存更靠近用户的频繁访问的静态内容。Cloud CDN 有助于为用户提高性能,减少后端的基础设施资源用量,并降低网络传送费用。如需了解详情,请参阅提高负载均衡的 Web 性能,加强负载均衡的 Web 保护。
更多性能考虑因素
为工作负载构建架构时,请考虑 Google Cloud 架构框架:性能优化中提供的一般最佳实践和建议。
后续步骤
- 详细了解此参考架构中使用的 Google Cloud 产品:
- 了解 Spanner 中的复制和一致性:
- 开始将工作负载迁移到 Google Cloud。
- 探索和评估您可以选择用于为云工作负载构建架构的部署原型。
- 查看架构选项,为 Google Cloud 中的工作负载设计可靠的基础设施。
- 使用 Google Cloud Armor、负载均衡和 Cloud CDN 部署可编程的 GFE。
- 如需查看更多参考架构、图表和最佳实践,请浏览云架构中心。
贡献者
作者: Kumar Dhanagopal | 跨产品解决方案开发者
其他贡献者:
- Ben Good | 解决方案架构师
- Daniel Lees | 云安全架构师
- Gleb Otochkin | 数据库云技术推广工程师
- Justin Makeig | 产品经理
- Mark Schlagenhauf | 网络技术文档工程师
- Sekou Page | 对外产品经理
- Steve McGhee | 可靠性技术推广工程师
- Victor Morno | Cloud 网络产品经理