Google Cloud Well-Architected Framework 可持续性核心中的这一原则提供了相关建议,可帮助您优化 Google Cloud中工作负载的资源用量。
原则概览
优化资源用量对于提高云环境的可持续性至关重要。从计算周期到数据存储,每项已配置的资源都会直接影响能耗、用水强度和碳排放量。为了减少工作负载对环境的影响,您需要在预配、管理和使用云资源时做出明智的选择。
建议
如需优化资源使用情况,请考虑以下各部分中的建议。
实现自动化动态伸缩
自动动态伸缩可确保资源得到最佳利用,从而有助于防止因空闲或过度预配的基础设施而造成的能源浪费。减少能源浪费意味着降低成本和碳排放量。
您可以使用以下技术来实现自动化和动态可伸缩性。
使用横向伸缩
对于大多数云优先应用,横向伸缩是首选的伸缩技术。您不是增加每个实例的大小(称为纵向伸缩),而是添加实例来分摊负载。例如,您可以使用代管式实例组 (MIG) 自动扩缩一组 Compute Engine 虚拟机。横向扩缩的基础设施更具弹性,因为实例的故障不会影响应用的可用性。对于负载水平不稳定的应用,横向伸缩也是一种资源高效型技术。
配置适当的伸缩政策
根据工作负载的要求配置自动扩缩设置。 定义特定于应用行为的自定义指标和阈值。 除了仅依赖 CPU 利用率之外,还可以考虑异步任务的队列深度、请求延迟时间和自定义应用指标等指标。为防止频繁、不必要的伸缩或抖动,请定义明确的伸缩政策。例如,对于在 Google Kubernetes Engine (GKE) 中部署的工作负载,请配置适当的集群自动扩缩政策。
结合使用被动伸缩和主动伸缩
借助被动伸缩,系统会根据实时负载变化进行伸缩。此技术适用于负载出现不可预测的峰值的应用。
主动伸缩功能适用于具有可预测模式的工作负载,例如固定的每日营业时间和每周报告生成。对于此类工作负载,请使用基于时间表的自动扩缩功能预先配置资源,以便它们能够应对预期的负载水平。此技术可防止争抢资源,并确保用户体验更流畅、效率更高。此技术还有助于您主动规划已知的高负载时段,例如大型促销活动和有针对性的营销活动。
Google Cloud GKE Autopilot、Cloud Run 和 MIG 等托管式服务和功能会通过学习工作负载模式来自动管理主动伸缩。默认情况下,当 Cloud Run 服务未收到任何流量时,它会缩容到零个实例。
设计无状态应用
为了使应用能够进行水平扩缩,其组件应为无状态组件。这意味着特定用户的会话或数据不会与单个计算实例相关联。当您将会话状态存储在计算实例之外(例如 Memorystore for Redis)时,任何计算实例都可以处理来自任何用户的请求。这种设计方法可实现无缝高效的横向伸缩。
使用调度和批处理
批处理非常适合大规模的非紧急工作负载。批量作业有助于优化工作负载,以提高能效和降低成本。
使用以下技术来实现调度和批处理作业。
低碳排放强度时间表
安排批处理作业在低碳区域运行,并选择当地电网清洁能源占比高的时段运行。如需确定某个区域一天中碳排放强度最低的时间段,请使用碳足迹报告。
将 Spot 虚拟机用于非关键工作负载
竞价型虚拟机可让您以极低的折扣价利用未使用的 Compute Engine 容量。Spot 虚拟机可能会被抢占,但它们提供了一种经济高效的方式来处理大型数据集,而无需专用且始终在线的资源。 Spot 虚拟机非常适合非关键的容错型批处理作业。
整合和并行化作业
为了减少启动和关闭单个作业的开销,请将类似作业分组到一个大型批次中。在 Batch 等服务上运行这些高容量工作负载。该服务会自动预配和管理必要的基础设施,有助于确保最佳资源利用率。
使用托管式服务
Batch 和 Dataflow 等托管式服务会自动处理资源配置、调度和监控。云平台会处理资源优化。您可以专注于应用逻辑。例如,Dataflow 会根据流水线中的数据量自动扩缩工作器数量,因此您无需为闲置资源付费。
根据工作负载要求选择合适的虚拟机机器系列
可用于 Compute Engine 虚拟机的机器类型分为机器系列,这些系列针对不同的工作负载进行了优化。根据工作负载的要求选择合适的机器系列。
| 机器家族 | 建议的工作负载类型 | 可持续发展指南 |
|---|---|---|
| 通用型实例(E2、N2、N4、Tau T2A/T2D):这些实例的 CPU 与内存比率较为均衡。 | Web 服务器、微服务、中小型数据库和开发环境。 | E2 系列可动态分配资源,因此具有极高的成本效益和能效。Tau T2A 系列使用基于 Arm 的处理器,对于大规模工作负载,这些处理器通常具有更高的能效比。 |
| 计算优化型实例(C2、C3):这些实例提供较高的 vCPU 与内存比率,以及较高的每核心性能。 | 高性能计算 (HPC)、批处理、游戏服务器和基于 CPU 的数据分析。 | C 系列实例可让您更快地完成 CPU 密集型任务,从而缩短作业的总计算时间和能耗。 |
| 内存优化型实例(M3、M2):这些实例专为需要大量内存的工作负载而设计。 | 大型内存中数据库和数据仓库,例如 SAP HANA 或内存中分析。 | 内存优化型实例可将内存密集型工作负载整合到较少的物理节点上。与使用多个较小的实例相比,这种整合可减少所需的总能耗。高性能内存可缩短数据访问延迟时间,从而减少 CPU 处于活动状态的总时间。 |
| 存储优化型实例 (Z3): 这些实例提供高吞吐量、低延迟的本地 SSD 存储空间。 | 数据仓储、日志分析以及 SQL、NoSQL 和向量数据库。 | 存储优化型实例可在本地处理海量数据集,从而有助于消除用于跨位置网络数据出站流量的能耗。当您使用本地存储空间来处理高 IOPS 任务时,可以避免过度预配多个标准实例。 |
| 加速器优化型实例(A3、A2、G2):这些实例专为 GPU 和 TPU 加速的工作负载(例如 AI、机器学习和 HPC)而构建。 | 机器学习模型训练和推理,以及科学模拟。 | TPU 经过精心设计,可实现最佳能效。它们可实现更高的每瓦计算次数。 与仅使用 CPU 的替代方案相比,配备 NVIDIA H100 GPU 的 A3 系列等 GPU 加速实例在训练大型模型时能效更高。虽然 GPU 加速实例的额定功耗更高,但完成任务的速度要快得多。 |
升级到最新机器类型
使用最新的机器类型可能有助于提高可持续性。机器类型更新后,通常会更节能,并提供更高的每瓦性能。使用最新机器类型的虚拟机可能以更低的功耗完成相同的工作量。
CPU、GPU 和 TPU 通常受益于芯片架构方面的技术进步,例如:
- 专用核心:处理器方面的进步通常包括用于常见工作负载的专用核心或指令。例如,CPU 可能具有用于矢量运算的专用核心或集成的 AI 加速器。当这些任务从主 CPU 分流时,任务完成效率更高,能耗更低。
- 改进的电源管理:芯片架构的进步通常包括更精密的电源管理功能,例如根据工作负载动态调整电压和频率。这些电源管理功能可让芯片以最高效率运行,并在空闲时进入低功耗状态,从而最大限度地减少能耗。
芯片架构方面的技术改进可直接带来以下可持续性和成本方面的优势:
- 更高的单位能耗性能:这是可持续性的关键指标。例如,在能耗相同的情况下,C4 虚拟机的性价比比 C3 虚拟机高 40%。与同类 x86 处理器相比,C4A 处理器的能效高出 60%。借助这些性能功能,您可以更快地完成任务,或者以更少的实例处理相同的负载。
- 降低总能耗:借助改进的处理器,计算资源可用于在更短的时间内完成给定的任务,从而降低总体能耗和碳足迹。对于生命周期较短的计算密集型工作负载(例如批处理作业和机器学习模型训练),碳排放影响尤其高。
- 最佳资源利用率:最新的机器类型通常更适合现代软件,并且与云平台的先进功能更兼容。这些机器类型通常可以提高资源利用率,从而减少过度预配的需求,并有助于确保每瓦电力都能得到高效利用。
部署容器化应用
您可以将 GKE 和 Cloud Run 等基于容器的全代管式服务纳入可持续的云计算策略中。这些服务有助于优化资源利用率并自动执行资源管理。
利用 Cloud Run 的“缩放至零”功能
Cloud Run 提供了一个托管式无服务器环境,当服务没有入站流量或作业完成时,该环境会自动将实例缩减至零。自动扩缩有助于消除空闲基础设施的能耗。仅当资源主动处理请求时,才会消耗资源。此策略对于间歇性或事件驱动型工作负载非常有效。对于 AI 工作负载,您可以使用 Cloud Run 中的 GPU,这样您只需在实际使用 GPU 时付费。
使用 GKE 自动优化资源
GKE 是一种容器编排平台,可确保应用仅使用所需的资源。为了帮助您自动优化资源,GKE 提供了以下技术:
- 装箱:GKE Autopilot 会在可用节点上智能地打包多个容器。箱子打包可最大限度地提高每个节点的利用率,并减少空闲或未充分利用的节点数量,从而有助于降低能耗。
- Pod 横向自动扩缩 (HPA):借助 HPA,系统会根据预定义的指标(例如 CPU 用量或自定义应用专用指标)自动调整容器副本 (Pod) 的数量。例如,如果您的应用流量激增,GKE 会添加 Pod 来满足需求。当流量减少时,GKE 会减少 Pod 的数量。这种动态伸缩功能可防止资源过度预配,因此您无需为不必要的计算容量付费或供电。
- 纵向 Pod 自动扩缩 (VPA):您可以将 GKE 配置为自动调整各个容器的 CPU 和内存分配及限制。此配置可确保不会为容器分配超出其需求的资源,从而有助于防止资源过度预配。
- GKE 多维 Pod 自动扩缩:对于复杂的工作负载,您可以同时配置 HPA 和 VPA,以优化 Pod 数量和每个 Pod 的大小。此技术有助于确保在达到所需性能的同时,尽可能减少能耗。
- 拓扑感知调度 (TAS):TAS 通过根据数据中心基础设施的物理结构放置 Pod,提高 GKE 中 AI 和 ML 工作负载的网络效率。TAS 会以战略性方式将工作负载放置在同一位置,以最大限度地减少网络跃点。这种并置有助于减少通信延迟和能耗。通过优化节点和专用硬件的物理对齐,TAS 可加快任务完成速度,并最大限度地提高大规模 AI 和机器学习工作负载的能效。
配置碳感知型调度
Google 会不断将工作负载转移到可提供最清洁电力的地点和时间。我们还会将旧设备重新用于其他用途,即回收旧设备。您可以使用这种碳感知调度策略来确保容器化工作负载使用清洁能源。
如需实现碳感知调度,您需要实时了解某个区域内为数据中心供电的能源组合。您可以从 GitHub 中的 Google Cloud 区域的无碳能源数据代码库或 BigQuery 公开数据集中获取机器可读格式的此信息。用于计算 Google 年度碳排放数据集的每小时电网混合碳排放强度数据来自 Electricity Maps。
如需实现碳感知调度,我们建议采用以下技术:
- 地理位置转移:安排工作负载在可再生能源使用比例较高的区域运行。此方法可让您使用更清洁的电网。
- 时间转移:对于非关键的灵活工作负载(例如批处理),请将工作负载配置为在非高峰时段或可再生能源最充足时运行。这种方法称为时间转移,可利用清洁能源(在有清洁能源可用时)来减少总体碳足迹。
设计高能效的灾难恢复方案
为灾难恢复 (DR) 做准备通常需要在次要区域中预先配置冗余资源。不过,闲置或利用率不足的资源可能会造成严重的能源浪费。选择可最大限度提高资源利用率并最大限度减少碳影响的灾难恢复策略,同时不会影响恢复时间目标 (RTO)。
优化冷启动效率
使用以下方法可最大限度地减少或消除次要 (DR) 区域中的有效资源:
- 优先考虑冷灾难恢复:使灾难恢复区域中的资源保持关闭状态或缩减为零状态。这种方法有助于消除空闲计算资源的碳足迹。
- 利用无服务器故障切换:使用 Cloud Run 等托管式无服务器服务作为灾难恢复端点。Cloud Run 在不使用时会缩减到零,因此您可以维护一种灾难恢复拓扑,该拓扑在流量改道到灾难恢复区域之前不会消耗任何能源。
- 使用基础设施即代码 (IaC) 实现自动化恢复:无需让灾难恢复站点中的资源保持运行状态(暖),只需在需要时使用 Terraform 等 IaC 工具快速预配环境。
平衡冗余和利用率
资源冗余是造成能源浪费的主要原因。如需减少冗余,请使用以下方法:
- 主动-主动优于主动-被动:在主动-被动设置中,被动站点的资源处于闲置状态,这会导致能源浪费。经过优化调整大小的主动-主动架构可确保两个区域中的所有预配资源都能主动处理流量。这种方法有助于最大限度地提高基础设施的能效。
- 合理调整冗余:仅在需要复制数据和服务以满足高可用性或灾难恢复要求时,才跨区域复制数据和服务。每增加一个副本,持久性存储和网络出站流量的能耗就会增加。