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