当您在云中的分布式资源上运行应用堆栈时,必须高效地将网络流量路由到多个位置的可用资源。Google Cloud 基础设施可靠性指南的这一部分介绍了可用于提高云工作负载可靠性的流量和负载管理方法。
容量规划
为确保部署在 Google Cloud 中的应用具有足够的基础设施资源,您必须估算所需的容量,并管理已部署的容量。本部分提供了可帮助您规划和管理容量的指南。
预测应用负载
在预测负载时,请考虑用户数量和应用接收请求的速率等因素。在预测中,请考虑历史负载趋势、季节性变化、特殊事件期间的负载峰值,以及由业务变化(例如扩展到新地理位置)所带来的增长。
估算容量要求
根据您的部署架构并考虑应用的性能和可靠性目标,估算处理预期负载所需的 Google Cloud 资源数量。例如,如果您计划使用 Compute Engine 代管式实例组 (MIG),请确定每个 MIG 的大小、虚拟机机器类型以及永久性磁盘的数量、类型和大小。您可以使用 Google Cloud 价格计算器来估算 Google Cloud 资源的费用。
规划足够的冗余
估算容量要求时,请为应用堆栈的每个组件提供足够的冗余。例如,要实现 N+1 冗余,应用堆栈中的每个组件必须至少比处理预测负载所需的最少组件多一个冗余组件。
对应用进行基准测试
运行负载测试以确定应用的资源效率。资源效率是指应用的负载与应用消耗的资源(如 CPU 和内存)之间的关系。当负载异常高时,应用的资源效率可能会下降,并且效率可能会随时间发生变化。对正常和峰值负载条件进行负载测试,并定期重复执行基准测试。
管理配额
Google Cloud 服务配额是每个项目的限制,配额可帮助您控制云资源的消耗。配额有两种类型:资源配额是您可以创建的资源数量上限,例如一个区域中的区域级 Google Kubernetes Engine (GKE) 集群的数量。速率配额限制了在特定时间段内可发送到服务的 API 请求数。配额可以是可用性的、区域性的或全球性的。查看您计划在项目中使用的服务的当前资源配额和 API 速率配额。确保配额能够满足您需要的容量。如有需要,您可以申请更多配额。
预留计算容量
要确保 Compute Engine 资源的容量根据需要提供,您可以创建预留。预留在特定可用区为您选择的机器类型的指定数量的虚拟机提供有保障的容量。预留可以专用于某个项目,也可以在多个项目中共享。如需详细了解预留(包括结算注意事项),请参阅 Compute Engine 可用区级资源的预留。
监控利用率并定期重新评估要求
部署所需资源后,请监控容量利用率。通过移除空闲资源,您可能会发现优化费用的机会。定期重新评估容量要求,并考虑应用行为、性能和可靠性目标、用户负载以及 IT 预算的变化。
自动扩缩
当您在分布于多个位置的资源上运行应用时,应用会在其中一个位置的服务中断期间保持可用状态。此外,冗余有助于确保用户体验到一致的应用行为。例如,当出现负载高峰时,冗余资源可确保应用继续以可预测的水平运行。但是,当应用上的负载较低时,冗余可能导致云资源的利用效率低下。
例如,对于 99.9% 的订单,电子商务应用的购物车组件可能需要在订单确认后的 200 毫秒内处理付款。为了在高负载期间满足此要求,您可以预配冗余的计算和存储容量。但是,如果应用上的负载较低,则预配的部分容量可能未使用或未充分利用。如需移除未使用的资源,您需要监控利用率并调整容量。自动扩缩功能可帮助您管理云容量并维持所需的可用性级别,而不会产生管理冗余资源的运营开销。当应用的负载增加时,自动扩缩功能会自动预配更多资源,从而提高应用的可用性。在低负载期间,自动扩缩功能会移除未使用的资源,以降低费用。
某些 Google Cloud 服务(例如 Compute Engine)可让您为预配的资源配置自动扩缩功能。Cloud Run 等托管式服务可以自动扩缩容量,您无需进行任何配置。以下是支持自动扩缩功能的 Google Cloud 服务的示例。该列表并不详尽。
- Compute Engine:MIG 可让您自动扩缩部署在 Compute Engine 虚拟机上的无状态应用,使容量与当前负载相匹配。如需了解详情,请参阅自动扩缩实例组。
- GKE:您可以将 GKE 集群配置为自动调整节点池的大小以匹配当前负载。如需了解详情,请参阅集群自动扩缩器。对于在 Autopilot 模式下预配的 GKE 集群,GKE 会根据流量自动扩缩节点和工作负载。
- Cloud Run:您在 Cloud Run 中预配的服务会自动扩容到适当的容器实例数量,以满足处理当前负载的需求。当应用没有负载时,服务会自动将容器实例数缩减至零。如需了解详情,请参阅容器实例自动扩缩简介。
- Cloud Run 函数:对函数的每个请求都会分配给函数的实例。如果入站请求的数量超过了现有函数实例的数量,Cloud Run 函数会自动启动新的函数实例。如需了解详情,请参阅 Cloud Run 函数执行环境。
- Bigtable:在 Bigtable 实例中创建集群时,可以将集群配置为自动扩缩。Bigtable 会监控 CPU 和存储负载,并调整集群中的节点数量,以维持您指定的目标利用率。如需了解详情,请参阅 Bigtable 自动扩缩。
- Dataproc Serverless:当您提交 Apache Spark 批处理工作负载时,Dataproc Serverless 会动态扩缩工作负载资源(例如执行程序的数量),以便高效地运行工作负载。如需了解详情,请参阅适用于 Spark 自动扩缩的 Dataproc Serverless。
负载均衡
负载均衡会将流量仅路由到可用资源,并确保各个资源不会过载,从而提高应用可靠性。
在为云部署选择和配置负载均衡器时,请考虑以下与可靠性相关的设计建议。
对内部流量进行负载均衡
您还应该为应用堆栈层级之间的流量配置负载均衡,而不仅仅是为外部客户端和应用之间的流量配置负载均衡。例如,在 3 层式 Web 应用栈中,您可以使用内部负载均衡器在 Web 层和应用层之间实现可靠的通信。
选择适当的负载均衡器类型
要对分布在多个区域的应用的外部流量进行负载均衡,您可以使用全球负载均衡器或多个区域负载均衡器。如需了解详情,请参阅多区域部署的全球负载均衡的优势和风险。
如果后端位于单个区域中,并且您不需要全球负载均衡的功能,则可以使用区域负载均衡器,用于应对可用区服务中断。
选择负载均衡器类型时,除了可用性之外,请考虑其他因素,例如对 TLS 终结、性能、费用和流量类型的地理位置控制。如需了解详情,请参阅选择负载均衡器。
配置健康检查
自动扩缩功能可帮助确保应用拥有足够的基础设施资源来处理当前负载。但即使有足够的基础设施资源,应用或应用的某些部分也可能无法响应。例如,托管您的应用的所有虚拟机可能都处于 RUNNING
状态。但是,部署在某些虚拟机上的应用软件可能已崩溃。负载均衡健康检查可确保负载均衡器仅将应用流量路由到响应的后端。如果您的后端是 MIG,请考虑配置额外的健康检查层以自动修复不可用的虚拟机。为 MIG 配置自动修复后,系统会主动删除不可用的虚拟机,并创建新虚拟机。
速率限制
有时,应用可能会遇到负载快速或持续增加的情况。如果应用不是为处理增加的负载而设计的,则应用或它使用的资源可能会失败,从而使应用不可用。负载增加可能是恶意请求导致的,例如基于网络的分布式拒绝服务 (DDoS) 攻击。负载也可能因客户端软件中的配置错误等其他原因而突然激增。为了确保您的应用能够处理过多的负载,请考虑应用合适的速率限制机制。例如,您可以为 Google Cloud 服务可以接收的 API 请求数设置配额。
速率限制技术还有助于优化云基础架构的费用。例如,通过为特定资源设置项目级配额,您可以限制项目针对这些资源产生的结算费用。
网络服务层级
通过 Google Cloud Network Service Tiers,您可以优化互联网上的系统和 Google Cloud 工作负载之间的连接。对于在全球范围内为用户提供服务并在多个区域拥有后端的应用,请选择高级层级。来自互联网的流量在距离发送系统最近的入网点 (PoP) 进入高性能 Google 网络。在 Google 网络中,流量会从入网点路由到相应的 Google Cloud 资源,例如 Compute Engine 虚拟机。出站流量会经由 Google 网络从距离目的地最近的入网点传出。此路由方法可减少用户与距离用户最近的入网点之间的网络跃点数,从而有助于提升可用性。