在 EAS 服务副本规模达到数十甚至上百个时,传统的全量滚动更新策略因缺乏分批控制和暂停机制,显著增加了发布风险。为此,我们引入了更新计划功能,支持手动分批与自动分批两种模式。该功能让您能够精准掌控大规模服务的发布节奏,并在发现异常时快速回滚,确保业务平稳过渡。
功能特性
多元化更新模式:支持手动分批与自动分批两种模式。
特性
手动分批(Partition)
自动分批(Batch Update)
控制方式
完全手动,用户逐步推进
配置后系统自动执行
运维成本
较高
较低
灵活度
最高
中等
适用场景
核心在线服务灰度发布
大规模服务常规更新
全流程可干预:更新过程中可随时暂停、回滚、调整分批策略,或删除计划退回默认全量策略。
状态实时可见:服务详情页标题栏提供“更新计划”状态标签,悬浮框实时展示进度、批次倒计时等关键信息。
快速开始
以下示例展示从创建更新计划到完成一次服务更新的完整流程(以手动分批为例,服务共 10 个副本)。
前置条件:开启更新计划功能
更新计划仅支持新建服务时开启,暂不支持通过更新服务开启。
新建服务时,需在 JSON 配置的 features 字段中添加 "eas.aliyun.com/enable-rollout": "true",否则无法开启更新计划。示例:
{
"metadata": {
"instance": 10
},
"features": {
"eas.aliyun.com/enable-rollout": "true"
}
}步骤 1:创建更新计划
单击目标服务进入 EAS 服务详情页
在标题栏找到更新计划标签(默认灰色,表示未配置)
鼠标悬浮标签,在弹出的悬浮框中单击创建更新计划
在右侧抽屉面板中选择手动分批,设置首批更新副本数为
2单击确定
更新计划创建成功,标签变为蓝色,状态显示待生效。
步骤 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
}
}
}
}字段说明
字段 | 类型 | 说明 | 默认值 |
| 数字或百分比 | 更新过程中允许额外创建的副本数 | 0 |
| 数字或百分比 | 更新过程中允许不可用的最大副本数 | 20% |
| 数字或百分比 | 手动模式:需要更新的副本数量 | — |
| 布尔值 | 是否暂停更新,对两种模式均有效 | false |
| 时间字符串(如 | 自动模式:批次间隔(上一批次完成到下一批次开始之间的等待时间) | — |
| 数字或百分比 | 自动模式:每批次更新的副本数量 | 等于 |
配置示例
手动分批:灰度发布
{
"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)发现问题,建议如下操作,回滚速度更快:
修改更新计划为手动分批且目标副本数为
0,已更新的副本会逐步回滚到旧版本(V2)。更新服务配置(版本V4)。
修改更新计划。
更新全部完成后(所有副本均为新版本V3),无法通过更新计划回滚,请在服务版本列表中指定版本进行回滚。
Q:手动分批和自动分批参数能同时设置吗?
不能。partition(手动分批参数)优先级更高,设置后系统会忽略自动分批参数。
Q:如何在更新过程中暂停?
设置 paused: true 即可暂停,对手动分批和自动分批两种模式均有效。也可通过控制台在更新计划悬浮框中单击暂停。
Q:配置自动分批时,不设置每批数量会怎样?
系统会自动使用 max_unavailable 的值作为批次大小。
Q:配置自动分批时,不设置批次间隔会怎样?
批次大小仍然生效,但不会自动推进下一批(相当于手动分批,需手动推进)。