水平自动扩缩容功能

当业务流量存在明显波峰波谷时,手动管理服务实例数量效率低、响应慢,容易造成资源浪费或服务过载。启用水平自动扩缩容功能后,EAS 能根据实时负载自动增减实例数量,动态匹配计算资源与业务需求,保障服务稳定运行的同时提升资源利用率。本文介绍如何通过控制台或客户端开启、更新和关闭该功能,并说明自动扩缩容的目标实例数计算逻辑。

工作原理

水平自动扩缩容基于设定的指标阈值动态调整实例数。当单实例的 QPS、CPU 利用率、GPU 利用率等指标超过阈值时触发扩容;低于阈值时触发缩容。目标实例数由当前实例数、当前指标值与阈值的比值共同决定,具体公式见下文。扩缩容操作支持延迟生效机制,避免因短暂流量波动导致频繁伸缩。

方式一:通过控制台管理水平自动扩缩容功能

开启水平自动扩缩容功能

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 在服务列表中,单击目标服务名称,进入服务详情页面。切换到自动伸缩页签,在弹性伸缩区域,单击开启弹性伸缩

    image

  3. 自动弹性扩缩容设置对话框,配置以下参数。

    说明

    当某个扩缩容指标达到预设的阈值时,系统将自动执行扩缩容操作。

    • 基础配置

      参数

      描述

      最小实例数

      自动弹性扩缩容的下界,最小值为0(使用专属网关,不支持设置为0)。但生产环境中不建议设为0。这样做可能会在缩容时导致所有实例被删除,从而使服务无法正常运行。

      说明

      即使按伸缩指标计算所需的实例数更少,也不会小于该值。

      最大实例数

      自动弹性扩缩容的上界,最大值为1000。

      说明

      即便按伸缩指标计算所需的实例数更多,也不会多于该值。

      常规扩缩容指标

      单击常规扩缩容指标,在下拉列表中选择指标并配置伸缩阈值:

      • 单实例QPS伸缩阈值:单实例的平均QPS大于该阈值时扩容。

      • CPU利用率阈值:单实例的平均CPU使用率大于该阈值时扩容。

      • 异步队列长度:仅异步服务支持配置。队列中的请求数大于该阈值时扩容。

      • GPU利用率阈值:单个实例的平均GPU使用率大于该阈值时扩容。

      自定义扩缩容指标

      自定义配置扩缩容指标和伸缩阈值。具体配置方法,请参见自定义监控及扩缩容指标

    • 高级配置

      参数

      描述

      扩容生效时长

      指定从扩容指令下达开始到扩容实际生效所需的时长,如果在此期间系统检测到请求量恢复了,将会取消扩容指令。单位为秒,默认值为0秒。

      缩容生效时长

      指定从缩容指令下达开始到缩容实际生效所需的时长,如果在此期间系统检测到请求量增加了,将会取消缩容指令。单位为秒,默认值为300秒。

      缩容到0的生效时长

      指定从缩容指令下达开始到服务实例缩容到0所需的时长。

      0扩容的实例数

      服务从实例数为0开始扩容时,直接扩容到指定的实例数量。

  4. 单击开启

更新水平自动扩缩容配置信息

  1. 您可以使用以下任意一种方式,打开自动弹性扩缩容设置对话框。

    • 方式一:在自动伸缩页签的弹性伸缩区域,单击更新

      image

    • 方式二:在服务列表中,单击目标服务操作列下的image>弹性伸缩,打开自动弹性扩缩容设置对话框。

      image

  2. 自动弹性扩缩容设置对话框,修改相关配置信息。

  3. 单击更新

关闭水平自动扩缩容功能

  1. 自动伸缩页签的弹性伸缩区域,单击关闭弹性伸缩

  2. 确定关闭弹性伸缩对话框,单击确定

image

方式二:通过本地客户端管理水平自动扩缩容功能

开启或更新水平自动扩缩容功能

服务创建后默认不开启Autoscaling(水平自动扩缩容)功能。可通过eascmd客户端使用autoscale子命令开启。如何登录eascmd客户端,请参见下载并认证客户端。开启与更新使用相同命令,支持两种方式:

说明

当某个扩缩容指标达到预设的阈值时,系统将自动执行扩缩容操作。

参数形式

  • 命令格式

    eascmd autoscale [region]/[service_name] -D[attr_name]=[attr_value]
  • 使用示例

    eascmd autoscale cn-shanghai/test_autoscaler -Dmin=2 -Dmax=5 -Dstrategies.qps=10

配置形式

  • 命令格式

    eascmd autoscale [region]/[service_name] -s [desc_json]

    Autoscaling功能通过配置desc_json来控制伸缩策略,desc_json参数配置示例如下。

    {
        "min": 2,
        "max": 5,
        "strategies": {
            "qps": 10
        }
    }
  • 使用示例

    eascmd autoscale cn-shanghai/test_autoscaler -s scaler.json

参数

描述

min

自动弹性扩缩容的下界,最小值为0(使用专属网关,不支持设置为0)。但生产环境中不建议设为0。这样做可能会在缩容时导致所有实例被删除,从而使服务无法正常运行。

说明

即使按伸缩指标计算所需的实例数更少,也不会小于该值。

max

自动弹性扩缩容的上界,最大值为1000。

说明

即便按伸缩指标计算所需的实例数更多,也不会多于该值。

strategies

根据业务使用场景,您可以选择qpscpu定义伸缩策略:

  • qps:单实例的QPS伸缩阈值,当单实例的平均QPS大于该值时会触发扩容。qps不支持设置小数,如需设置为小数,请使用qps1k, 例如,设置qps1k200表示单实例的平均QPS大于0.2时会触发扩容。

  • cpu:单实例的CPU使用率阈值,取值范围(0,100),当单实例的平均CPU使用率大于该值时会触发扩容。

关闭水平自动扩缩容功能

  • 命令格式

    eascmd autoscale rm [region]/[service_name]
  • 使用示例

    eascmd autoscale rm cn-shanghai/test_autoscaler

弹性伸缩策略说明

  • 目标实例数计算公式

    desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
  • 参数说明

    • desiredReplicas:目标实例个数。

    • currentReplicas:当前实例个数。

    • currentMetricValue:当前的扩缩容指标均值。

    • desiredMetricValue:扩缩容指标阈值。

  • 使用示例

    QPS伸缩为例,部署服务时压测或预估单实例能够承载的QPS量为10,将单实例的QPS伸缩阈值(strategies.qps)设置为10。

    • 当前2个实例,每个实例平均QPS量上升至23,则目标实例个数为5:ceil[2 * (23/10)] = 5

    • 若后续负载下降,每个实例平均 QPS 降至2,则目标实例个数为1:ceil[5 * (2/10)] =1。此时实例个数会逐步缩容至1,缩容过程相对平滑一些,避免因请求波动引起异常缩容。

相关文档