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 负责管理节点、为您的应用创建新节点以及配置自动升级和自动修复。