Well-Architected Framework 的性能优化核心中的 Google Cloud 这项原则 提供了一些建议,可帮助您融入弹性,即根据工作负载要求的变化动态调整资源的能力。
借助弹性,系统的不同组件可以独立扩缩。这种有针对性的伸缩有助于提高性能和成本效益,因为它能将资源精确地分配到需要的地方,而不会过度预配或预配不足。
原则概览
系统的性能要求直接影响系统何时以及如何纵向扩缩或横向扩缩。您需要评估系统的容量,并确定系统在基准情况下预计要处理的负载。 然后,您需要确定希望系统如何响应负载的增加和减少。
当负载增加时,系统必须横向扩容、纵向扩容或同时进行这两种扩容。对于横向伸缩,请添加副本节点,以确保系统具有足够的总体容量来满足增加的需求。对于纵向伸缩,请将应用的现有组件替换为包含更多容量、更多内存和更多存储空间的组件。
当负载减少时,系统必须缩容(横向、纵向或同时进行这两种缩容)。
定义系统扩容或缩减的 情况。计划在已知的高流量期间手动扩容系统。使用自动扩缩等工具,这些工具可以响应负载的增加或减少。
建议
如需利用弹性,请考虑以下各部分中的建议。
规划峰值负载期
您需要为已知事件(例如预计客户需求增加的时期)规划高效的伸缩路径。
考虑在已知的高流量期之前扩容系统。例如,如果您是零售组织,则预计在季节性促销期间需求会增加。我们建议您在促销活动开始前手动扩容或横向扩容系统,以确保系统可以立即处理增加的负载或立即调整现有限制。否则,系统可能需要几分钟才能添加资源以响应实时变化。应用的容量可能无法快速增加,导致部分用户遇到延迟。
对于未知或意外事件(例如需求或流量突然激增),您可以使用自动伸缩功能来触发基于指标的弹性伸缩。这些指标可以包括 CPU 利用率、负载均衡器处理 能力、延迟,甚至是您在 Cloud Monitoring中定义的自定义指标。
例如,假设有一个应用在 Compute Engine 代管式实例组 (MIG) 上运行。此应用的要求是,每个实例都以最佳方式运行,直到平均 CPU 利用率达到 75% 为止。在此示例中,您可以 定义一个 自动扩缩政策 ,该政策会在 CPU 利用率达到阈值时创建更多实例。 这些新创建的实例有助于吸收负载,从而有助于确保平均 CPU 利用率保持在最佳水平,直到达到您为 MIG 配置的最大实例数。当需求减少时,自动扩缩政策会移除不再需要的实例。
在 BigQuery 中规划 资源槽预留, 或使用 托管式自动扩缩器调整 Spanner 中自动扩缩配置的限制。
使用预测性伸缩
如果您的系统组件包含 Compute Engine,则必须评估是否 预测性自动扩缩 适合您的工作负载。预测性自动扩缩会根据指标的历史趋势(例如 CPU 利用率)预测未来的负载。 预测会每几分钟重新计算,因此自动扩缩器会快速调整其预测,以适应负载的最新变化。如果不使用预测性自动扩缩功能,则自动扩缩器只能根据观察到的实时负载变化来被动地扩缩实例组。预测性自动扩缩功能会同时处理实时数据和历史数据,以响应当前负载和预测负载。
实现无服务器架构
考虑使用无服务器服务(这些服务本身具有弹性)实现无服务器架构,例如:
与其他需要微调规则的服务(例如 Compute Engine)中的自动扩缩不同,无服务器自动扩缩是即时的,并且可以缩容到零资源。
为 Kubernetes 使用 Autopilot 模式
对于需要对 Kubernetes 进行更多控制的复杂应用,请考虑 Google Kubernetes Engine (GKE) 中的 Autopilot 模式。 默认情况下,Autopilot 模式提供自动化和可伸缩性。GKE 会根据流量自动扩缩节点和资源。GKE 负责管理节点、为您的应用创建新节点以及配置自动升级和自动修复。