在 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:配置自動分批時,不設定批次間隔會怎樣?
批次大小仍然生效,但不會自動推進下一批(相當於手動分批,需手動推進)。