水平自动扩缩容功能

面对业务流量的波峰波谷,手动管理实例效率低下,且响应不及时,可能导致服务过载或资源闲置。EAS 水平自动扩缩容功能可根据实时业务负载自动调整实例数量,在保障服务稳定性的同时最大化资源利用率,实现成本与性能的最佳平衡。

工作原理

水平自动扩缩容功能基于设定的指标阈值动态调整实例数。

  • 计算目标实例数:目标实例数(desiredReplicas)由当前实例数(currentReplicas)、当前指标值(currentMetricValue)与阈值(desiredMetricValue)的比值共同决定。

    • 公式desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

    • 示例:假设当前2个实例,实例QPS伸缩阈值设置为10。当实例平均QPS量上升至23时,目标实例个数为5 = ceil[2 * (23/10)];后续实例平均 QPS 降至2,则目标实例个数为1 = ceil[5 * (2/10)]。缩容过程相对平滑,避免因请求波动引起异常缩容。

    • 配置多指标:系统会为每个指标计算期望的实例数,并取其中的最大值作为最终目标实例数。

  • 触发逻辑:当计算出的目标实例数大于当前实例数,系统即触发扩容。当计算出的目标实例数小于当前实例数,系统才会触发缩容

  • 延迟生效:扩缩容操作支持延迟生效机制,避免因短暂流量波动导致频繁伸缩。

操作指南

可以通过控制台或客户端(eascmd)来配置水平自动扩缩容策略。

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

通过控制台

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

  2. 在服务列表中,单击目标服务名称,进入服务详情页面。

  3. 切换到自动伸缩页签,在弹性伸缩区域,单击开启弹性伸缩更新

    imageimage

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

参数说明
  • 基础配置

    参数

    说明

    设置建议与风险提示

    最小实例数

    服务实例自动缩容的下限数量,最小值为0。

    生产环境建议:对于需要持续在线的服务,强烈建议将此值设置为 1 或更高

    重要

    设置为 0 意味着在无流量时服务实例将被完全回收。此时新请求将面临完整的冷启动延迟(可能长达数十秒至数分钟),期间服务不可用。此外,使用专属网关的服务不支持将此值设为 0

    最大实例数

    服务实例自动扩容的上限数量。最大为 1000。

    请根据业务峰值预估和账户配额合理设置,以防意外的流量高峰导致费用超出预算。

    常规扩缩容指标

    用于触发扩缩容的内置性能指标。

    • 单实例QPS伸缩阈值:建议基于压测结果设置,通常为单实例最优性能的 70%-80%。

    • CPU利用率阈值:过低易浪费资源,过高可能影响请求延迟。建议根据RT指标来设置。

    • GPU利用率阈值:建议根据RT指标来设置。

    • 异步队列长度:仅适用于异步服务。建议根据任务平均处理时长和可接受的延迟来设定。更多请参见异步推理服务配置水平自动扩缩容

    自定义扩缩容指标

    可以上报自定义指标并据此进行扩缩容,详情请参见自定义监控及扩缩容指标

    适用于内置指标无法满足业务需求的复杂场景。

  • 高级配置

    参数

    说明

    设置建议与风险提示

    扩容生效时长

    扩容决策的观察窗口。触发扩容后,系统会在此段时间内观察指标,若指标值回落至阈值以下,则取消本次扩容。单位为秒。

    默认值为 0 秒,即立即执行扩容。适当增加此值(如 60 秒)可避免因瞬时毛刺流量引发不必要的扩容。

    缩容生效时长

    缩容决策的观察窗口,是防止服务抖动的关键参数。系统会确认指标值在此段时间内持续低于阈值后,才执行缩容。单位为秒。

    默认值为 300 秒。此值是防止服务因流量波动而频繁缩容的核心保障。不建议设置过小,以免影响服务稳定性。

    缩容到0的生效时长

    最小实例数设为 0 时,此参数定义了从满足缩容条件到实例数缩减至 0 的等待时间。

    用于延迟服务彻底下线的时间,为可能的流量恢复提供缓冲。

    0扩容的实例数

    服务从 0 个实例冷启动时,一次性扩容到的实例数量。

    建议设置为一个能应对初始流量冲击的合理值,以缩短冷启动期间的服务不可用时间。

通过客户端

在执行命令前,请确保已完成下载并认证客户端。开启与更新使用相同的autoscale命令。可以通过命令的-D参数或JSON配置文件来设置策略。

  • 参数形式

    # 格式:eascmd autoscale [region]/[service_name] -D[attr_name]=[attr_value]
    # 示例:设置最小2实例,最大5实例,QPS阈值为10
    eascmd autoscale cn-shanghai/test_autoscaler -Dmin=2 -Dmax=5 -Dstrategies.qps=10
    # 示例:设置缩容生效时长为100秒
    eascmd autoscale cn-shanghai/test_autoscaler -Dbehavior.scaleDown.stabilizationWindowSeconds=100
  • 配置文件形式

    # 步骤1: 创建配置文件(例如 scaler.json)
    # 步骤2: 执行命令 eascmd autoscale [region]/[service_name] -s [desc_json]
    # 示例
    eascmd autoscale cn-shanghai/test_autoscaler -s scaler.json
配置示例

以下是一个包含所有常用配置项的 scaler.json 完整示例:

scaler.json

{
    "min": 1,
    "max": 2,
    "behavior": {
        "onZero": {
            "interceptTraffic": false,
            "scaleDownGracePeriodSeconds": 700,
            "scaleUpActivationReplicas": 2
        },
        "scaleDown": {
            "stabilizationWindowSeconds": 20
        },
        "scaleUp": {
            "stabilizationWindowSeconds": 10
        }
    },
    "scaleStrategies": [
        {
            "metricName": "queue[backlog]",
            "threshold": 10
        },
        {
            "metricName": "qps",
            "threshold": 1
        },
        {
            "metricName": "cpu",
            "threshold": 80
        },
        {
            "metricName": "gpu[util]",
            "threshold": 60
        }
    ]
}
参数说明

参数

说明

min

最小实例数

max

最大实例数

scaleStrategies

扩缩容指标及阈值。

behavior.scaleUp.stabilizationWindowSeconds

对应控制台的扩容生效时长

behavior.scaleDown.stabilizationWindowSeconds

对应控制台的缩容生效时长

关闭水平自动扩缩容功能

通过客户端

  • 命令格式

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

    eascmd autoscale rm cn-shanghai/test_autoscaler

生产应用建议

场景化配置指南

  • CPU 密集型在线推理服务:建议同时配置CPU利用率阈值单实例QPS伸缩阈值。 CPU利用率反映资源消耗, QPS反映业务负载,二者结合可实现更精准的扩缩容。

  • GPU 密集型在线推理服务:建议主要关注GPU利用率。当 GPU 计算单元饱和时,及时扩容以处理更多并发任务。

  • 异步任务处理服务:建议使用异步队列长度作为核心指标。当队列中积压的任务数超过阈值时,扩容实例可提高整体处理能力,缩短任务等待时间。

稳定性最佳实践

  • 避免缩容到零:对于生产环境的同步服务,请务必将最小实例数设置为 1 或更高,以保证服务的持续可用性和低延迟。

  • 合理设置冷静期:使用缩容生效时长可防止因流量正常波动导致的服务抖动。默认值 300 秒适用于大多数场景。

常见问题

为什么服务达到了阈值却没有扩容?

可能的原因包括:

  • 配额不足:您账户下当前地域的可用资源配额(如 vCPU、GPU)已用尽。

  • 处于扩容冷静期:如果配置了扩容生效时长,系统会等待该时间段结束,以确认流量增长的持续性。

  • 实例健康检查失败:新扩容的实例未能通过健康检查,导致扩容操作失败。

  • 已达最大实例数:当前实例数已达到您设置的最大实例数上限。

为什么服务会频繁扩容和缩容(抖动)?

主要原因通常是扩缩容策略配置不当:

  • 阈值设置过于敏感:阈值设置得太接近常规负载水平,导致微小波动即可触发扩缩容。

  • 缩容生效时长过短:过短的冷静期使系统对流量的短暂下降反应过度,导致不必要的缩容。当流量恢复后,又会立即触发扩容。建议适当延长缩容生效时长

相关文档