为EAS服务配置更新计划

更新时间:
复制为 MD 格式

在 EAS 服务副本规模达到数十甚至上百个时,传统的全量滚动更新策略因缺乏分批控制和暂停机制,显著增加了发布风险。为此,我们引入了更新计划功能,支持手动分批与自动分批两种模式。该功能让您能够精准掌控大规模服务的发布节奏,并在发现异常时快速回滚,确保业务平稳过渡。

功能特性

  • 多元化更新模式:支持手动分批与自动分批两种模式。

    特性

    手动分批(Partition)

    自动分批(Batch Update)

    控制方式

    完全手动,用户逐步推进

    配置后系统自动执行

    运维成本

    较高

    较低

    灵活度

    最高

    中等

    适用场景

    核心在线服务灰度发布

    大规模服务常规更新

  • 全流程可干预:更新过程中可随时暂停、回滚、调整分批策略,或删除计划退回默认全量策略。

  • 状态实时可见:服务详情页标题栏提供“更新计划”状态标签,悬浮框实时展示进度、批次倒计时等关键信息。

快速开始

以下示例展示从创建更新计划到完成一次服务更新的完整流程(以手动分批为例,服务共 10 个副本)。

前置条件:开启更新计划功能

重要

更新计划仅支持新建服务时开启,暂不支持通过更新服务开启。

新建服务时,需在 JSON 配置的 features 字段中添加 "eas.aliyun.com/enable-rollout": "true",否则无法开启更新计划。示例:

{
  "metadata": {
    "instance": 10
  },
  "features": {
    "eas.aliyun.com/enable-rollout": "true"
  }
}

步骤 1:创建更新计划

  1. 单击目标服务进入 EAS 服务详情页

  2. 在标题栏找到更新计划标签(默认灰色,表示未配置)

  3. 鼠标悬浮标签,在弹出的悬浮框中单击创建更新计划

  4. 在右侧抽屉面板中选择手动分批,设置首批更新副本数为 2

  5. 单击确定

更新计划创建成功,标签变为蓝色,状态显示待生效

步骤 2:触发更新

单击服务详情页的更新,提交新的服务配置。

系统开始按计划推进:先更新 2 个副本,完成后停下等待。悬浮框显示当前进度(2/10)。

步骤 3:验证,推进下一批

观察业务指标(延迟、错误率等),确认无异常后:修改计划,将目标副本数调整为 10。系统继续更新剩余 8 个副本,直到全部完成。

说明

有异常,修改更新计划,将目标副本数调整为 0,已更新的副本将全部回滚到旧版本。

状态说明

更新计划采用两层状态模型:第一层为阶段(phase),第二层为批次状态(stage,仅在生效中时存在)。

  • 未配置(灰色):未创建更新计划,更新服务时默认全量替换

  • 待生效(蓝色):计划已创建,等待更新服务触发

  • 生效中(蓝色):已触发,正在按策略分批替换副本。生效中阶段包含三种批次状态(stage):

    • 当前批次执行中:正在更新,已更新数向目标数靠拢

    • 当前批次暂停中:用户暂停了执行,进度冻结

    • 当前批次已完成:当前批次目标已达成,等待用户推进(手动分批)或倒计时结束自动推进(自动分批)

  • 已完成(蓝色):本轮更新计划已完成。

    • 如果更新服务会重新触发更新计划,状态变为生效中

    • 如果修改更新计划,状态将变为待生效,等待下次更新服务。

各状态下支持的操作如下表所示:

操作

未配置

待生效

生效中

已完成

当前批次执行中

当前批次暂停中

当前批次已完成

创建计划

修改计划

删除计划

暂停

恢复

更新服务

注意事项

  • 修改生效中的更新计划:新参数立即生效;若当前处于暂停中,修改后自动取消暂停

  • 修改已完成的更新计划:仅保存配置,不会自动触发更新,需再次更新服务

  • 删除生效中的更新计划:剩余副本按全量策略继续更新,不会回滚

  • 扩缩容时有更新计划:更新计划参数不变,执行时按实际副本数生效

  • 手动分批首批数设为 0:合法值,等同于更新服务后立即暂停在起点,等待用户手动推进

  • 自动分批每批数量 ≥ 总副本数:等同于一批全量更新,效果接近默认全量替换

JSON 配置

通过 JSON 配置更新计划时,在服务的 metadata.rolling_strategy 字段中设置以下参数。

完整配置结构

{
  "metadata": {
    "rolling_strategy": {
      "max_surge": "25%",
      "max_unavailable": "20%",
      "partition": 5,
      "paused": false,
      "batch_update": {
        "interval": "5m",
        "batch_size": 2
      }
    }
  }
}

字段说明

字段

类型

说明

默认值

max_surge

数字或百分比

更新过程中允许额外创建的副本数

0

max_unavailable

数字或百分比

更新过程中允许不可用的最大副本数

20%

partition

数字或百分比

手动模式:需要更新的副本数量

paused

布尔值

是否暂停更新,对两种模式均有效

false

batch_update.interval

时间字符串(如 5m

自动模式:批次间隔(上一批次完成到下一批次开始之间的等待时间)

batch_update.batch_size

数字或百分比

自动模式:每批次更新的副本数量

等于 max_unavailable

配置示例

手动分批:灰度发布

{
  "metadata": {
    "instance": 10,
    "rolling_strategy": {
      "partition": 2,
      "max_unavailable": 1
    }
  }
}

说明:共 10 个实例,先更新 2 个,其余保持旧版本。

自动分批:大规模服务

{
  "metadata": {
    "instance": 100,
    "rolling_strategy": {
      "batch_update": {
        "interval": "10m",
        "batch_size": 5
      }
    }
  }
}

说明:共 100 个副本,每 10 分钟自动更新 5 个副本。

紧急暂停

{
  "metadata": {
    "rolling_strategy": {
      "paused": true
    }
  }
}

快速回滚

{
  "metadata": {
    "rolling_strategy": {
      "partition": 0
    }
  }
}

说明:将 partition 设为 0,已更新的副本会逐步回滚。对手动分批和自动分批模式均有效。

常见问题

Q:如何快速回滚?

更新计划执行过程中(如更新版本V2->V3)发现问题,建议如下操作,回滚速度更快:

  1. 修改更新计划为手动分批且目标副本数为0,已更新的副本会逐步回滚到旧版本(V2)。

  2. 更新服务配置(版本V4)。

  3. 修改更新计划。

更新全部完成后(所有副本均为新版本V3),无法通过更新计划回滚,请在服务版本列表中指定版本进行回滚。

Q:手动分批和自动分批参数能同时设置吗?

不能。partition(手动分批参数)优先级更高,设置后系统会忽略自动分批参数。

Q:如何在更新过程中暂停?

设置 paused: true 即可暂停,对手动分批和自动分批两种模式均有效。也可通过控制台在更新计划悬浮框中单击暂停

Q:配置自动分批时,不设置每批数量会怎样?

系统会自动使用 max_unavailable 的值作为批次大小。

Q:配置自动分批时,不设置批次间隔会怎样?

批次大小仍然生效,但不会自动推进下一批(相当于手动分批,需手动推进)。