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:配置自动分批时,不设置批次间隔会怎样?
批次大小仍然生效,但不会自动推进下一批(相当于手动分批,需手动推进)。