消除应用冷启动对弹性指标的影响

应用(例如:Java应用)在启动阶段通常会消耗比应用正常运行时更多的CPU资源。这种高资源消耗会导致水平Pod自动伸缩器(HPA)在冷启动阶段记录到异常高的指标值,从而影响HPA的准确性和性能调整。如果在应用中配置了健康检查,只有在应用实例通过业务就绪检查(Readiness)后,HPA才会将该应用实例的资源使用情况计入到弹性指标中。通过这种方式,HPA控制器可以更准确地评估应用实例的实际资源需求,避免因启动阶段的资源峰值而导致不合理的扩缩容操作。本文以Java应用为例进行演示说明。

测试说明

为了模拟Java应用的冷启动阶段,本文通过使用Shell脚本来提高Java应用单实例的CPU使用率来进行演示说明。

当Shell脚本执行时,应用单实例的CPU使用率保持在约50%,以模拟应用在启动过程中对CPU资源的高需求。停止脚本后,应用单实例的CPU使用率恢复到正常水平,表明应用已启动完成并进入稳定运行状态,此时应用对CPU资源的需求回归常规。

前提条件

已创建Java应用。具体操作,请参见通过代码包部署Java应用通过镜像部署Java应用

说明

为了方便测试,将应用的实例数设置为一个。

步骤综述

  1. 为应用添加弹性策略:此步骤是为了设置应用实例的扩容阈值和检测CPU实时的使用情况。

  2. 编写Shell脚本:通过Shell脚本提高单实例的CPU使用率,以模拟应用冷启动阶段对CPU资源的高需求,也是为了给后续的测试步骤做好准备。

  3. 未配置健康检查时对弹性指标进行验证:通过此步骤,证明了在不配置Readiness检查时,CPU资源的使用情况会被实时地同步至HPA控制器中,并用于决定是否需要扩容实例数。

  4. 配置健康检查后对弹性指标进行验证:在配置了Readiness检查后,单实例的CPU使用率升高并不会导致实例数在特定的时间段内产生变化。证明了CPU资源的使用情况在配置的延迟时间内不会被同步至HPA控制器中。

  5. 后续操作:在测试任务完成后,终止Shell脚本的进程,以避免不必要的资源浪费。

1. 为应用添加弹性策略

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击目标应用名称。

  2. 在目标应用的基础信息页面,单击实例列表页签,然后在弹性伸缩区域单击添加弹性策略

    jSMS2sWScQ

  3. 添加弹性策略面板,配置以下信息,然后单击确认

    0skNYshEQt

    配置项

    示例

    说明

    策略类型

    监控指标策略

    选择策略类型为监控指标策略。

    策略名称

    demo

    自定义弹性策略名称。

    触发条件

    • 指标类型:CPU使用率

    • 目标值:40%

    指标类型选择CPU使用率,并自定义15秒内应用所有实例平均CPU利用率。

    实例数设置

    • 应用最小实例数:1

    • 应用最大实例数:5

    自定义应用最小实例数和应用最大实例数。

  4. 实例列表页签的弹性策略区域,启用已成功添加的弹性策略。

    HiO36ffrrh

2. 编写Shell脚本

  1. 在目标应用的基础信息页面,单击实例列表页签,然后单击应用实例操作列的Webshell,进入实例的字符界面。

    r99cNx5bFi

  2. 在字符界面,创建Shell脚本并为其添加可执行权限。

    说明

    本Shell脚本为简单的示例脚本。

    1. 创建demo.sh脚本。

      #!/bin/bash
      
      while true; do
      # 这是一个空循环,只是为了消耗应用实例的CPU资源。
          true
      done
    2. 为脚本添加可执行权限。

      chmod +x demo.sh

3. 未配置健康检查时对弹性指标进行验证

  1. 未执行Shell脚本之前,查看单实例CPU使用率及实例个数。

    jHKu98kVcW

  2. 登录Webshell,运行Shell脚本。

    ./demo.sh
  3. 在Shell脚本执行的过程中,查看单实例CPU使用率及实例个数。

    说明

    此过程会随着单实例CPU使用率的提升,实例数也会随之增加(自动扩容),直至扩容至在弹性策略中设置的最大实例数。

    70d52wlZRs

    说明

    通过观察CPU使用率和实例数,当CPU使用率超过在弹性策略中设置的扩容触发值时,系统会为了满足应用实例对CPU资源的需求,在极短的时间内自动进行扩容,直到扩容至设置的实例数上限。这表明CPU的使用情况已同步至HPA控制器,并且HPA控制器根据当前的CPU使用情况对应用实例进行了扩容。

4. 配置健康检查后对弹性指标进行验证

重要

在执行此步骤之前,需要使用kill -15 ${PID}命令结束Shell脚本的进程,并将实例数缩容至一个。

4.1 为应用配置健康检查

进入目标应用的基础信息页面,单击部署应用,然后在部署应用面板,配置以下信息。

  1. 基础信息设置区域,修改版本号。

    cxmy34Q74u

  2. 部署应用面板的应用健康检查设置区域,启用应用业务就绪检查(Readiness配置),然后选择检查方式TCP端口检查,并设置TCP端口延迟时间(秒)

    重要
    • 本文以设置TCP端口检查为例进行演示说明。具体配置健康检查的信息,请参见设置健康检查

    • 如果您只想消除应用冷启动对弹性指标的影响,只需要配置Readiness检查即可。

    • 配置的延迟时间应尽可能接近应用的冷启动时间,可以大于应用的冷启动时间,但不能小于应用的冷启动时间。

    y9dTaBYD9J

  3. 单击确定

4.2 查看应用单实例的CPU使用率及实例数的变化

  1. 未执行Shell脚本之前,查看单实例CPU使用率及实例个数。

    jHKu98kVcW

  2. 登录Webshell,运行Shell脚本。

    ./demo.sh
  3. 在Shell脚本执行的过程中,查看单实例的CPU使用率及实例个数。

    7lDZtXQNAP

  4. 当应用业务就绪检查(300秒)成功后,查看单实例的CPU使用率及实例个数。

    QDTgXvgcEM

    说明

    通过观察CPU使用率和实例数,发现在应用业务就绪检查的时间段内(300秒),CPU资源使用率已超过弹性策略设置的扩容触发值,并自动扩容了一个实例。然而,在这300秒的延迟时间内,尽管CPU使用率仍然很高,但HPA控制器并未继续进行扩容,这表明在这段时间内,CPU使用情况没有被同步到HPA控制器。

    当应用业务就绪检查(300秒)成功后,如果CPU使用率依旧超过了在弹性策略设置的扩容触发值,应用实例会继续进行扩容,这表明在业务就绪检查完成后,CPU资源的使用情况再次被同步到HPA控制器。

5. 后续操作

通过Webshell登录执行了Shell脚本的实例,使用kill -15 ${PID}命令结束Shell脚本的进程,以避免资源的不必要浪费。