← 所有工作經歷

案例研究 02 · 實作內容

AWS 自動擴縮政策與容量排程

以 CDK 設計 EC2 Auto Scaling,結合 CPU 與網路指標的即時調整,以及預先規劃的容量排程。

已實作,部分驗證完成 · 尚未確認正式環境狀態
AWS CDKEC2 Auto ScalingCloudWatchMixed Instances PolicySpot

工程挑戰

多項服務同時使用 CloudWatch 擴縮政策、容量排程,以及 Blue/Green Auto Scaling Group。主要挑戰是釐清這些控制如何互相影響:排程設定的最小與最大容量可能限制擴縮政策;固定容量的群組無法水平擴縮;而歷史 synth 紀錄也不一定符合目前的原始碼快照或 AWS 實際設定。

架構與設計

  • 使用 CPU 階梯式擴縮增加容量,並以獨立的低使用率警示保守地一次移除一個執行個體。
  • 可選擇啟用 Network In/Out 政策;當每個執行個體的流量超過實測目標時向外擴縮。網路政策不負責縮減容量。
  • 依工作負載排程調整 ASG 容量,提前因應預期需求;將服務當地時間轉換為 UTC cron,並處理跨日造成的星期變化。
  • 所有動態調整都限制在 ASG 的最小與最大容量內,並將排程套用至預期承接流量的部署目標。
  • 將 Mixed Instances Policy、ELB 健康檢查、執行個體暖機與 Capacity Rebalance 納入容量生命週期設計。
工作流程概覽
  1. 01CloudWatch 指標
  2. 02即時擴縮政策
  3. 03排程容量調整
  4. 04ASG 容量邊界與部署目標
  5. 05EC2 執行個體與負載平衡器健康狀態

擴縮政策與排程細節

擴縮政策行為

控制項觸發訊號容量調整保護條件
CPU 向外擴縮平均 CPU 依分級區間評估依政策級距增加容量已設定暖機與冷卻時間
CPU 向內縮減持續低使用率;缺失資料視為未違反條件逐步減少容量使用獨立且保守的警示
網路向外擴縮每執行個體網路流量;由服務選擇啟用超過設定目標時增加容量已設定暖機時間;網路政策不負責縮減容量

容量排程模式

排程容量行為目的
每日基準調整最小與最大容量在低需求時段保留規劃好的服務基本容量
預期尖峰時段提前提高最小容量在週期性需求到來前預先啟動執行個體
平日/週末版本分別使用當地時間排程因應不同需求型態,且不公開精確時段
部署目標將排程容量界限套用至目前啟用的目標讓 Blue/Green 容量與流量路由保持一致

實作內容

  • 實作 CPU 階梯式向外擴縮,並以獨立且保守的低使用率警示向內縮減;同時設定執行個體暖機與冷卻控制。
  • 加入可選的每執行個體 Network In 與 Network Out 向外擴縮政策。網路擴縮預設停用,必須明確啟用;這些政策不會縮減容量。
  • 為正式環境 Web 工作負載建立每日及平日/週末容量排程,將服務當地時間轉成 UTC cron,並調整跨越 UTC 日期時的星期設定。
  • 加入部署時的開關,可單獨停用排程動作而保留 CPU 即時擴縮政策。
  • 設定 Mixed Instances Policy,依環境的分配設定混用 On-Demand 與 Spot 容量。
  • 啟用 ELB 健康檢查與 Capacity Rebalance,並在有設定時依服務調整健康檢查寬限期。
  • 讓 Blue/Green 目標各自獨立,使排程能跟隨目前啟用的部署目標;min=max 的固定容量群組不納入水平擴縮。

驗證與影響

  • 容量排程變更有原始碼與提交紀錄,但並非每項歷史變更都有後續 synth、部署及依指標驗收的紀錄。
  • Blue/Green 容量變更有 TypeScript 編譯與 CDK synth 紀錄。目前可讀取的原始碼與歷史結果不同,因此這些紀錄無法證明 AWS 實際 ASG 狀態。
  • 先前的網路政策檢視發現,設定目標可能過於接近受評估執行個體系列的突發流量能力。這表示政策應依實際流量重新調整,但不能據此推論目標值或執行個體系列已在部署中變更。
  • 目前沒有完整的 CDK 與 AWS Console 差異檢視、正式環境行為驗證,也沒有延遲、錯誤率、擴縮時間或成本改善的量測結果。

限制與後續工作

  • 目前可讀取的 helper 使用 CPU 階梯式向外擴縮及 CPU 警示向內縮減;歷史檢視紀錄則提到 Target Tracking。應視為不同的原始碼快照,不可合併描述為單一實際設定。
  • 階梯級距的意義取決於關聯的警示設定。若要將級距解讀為絕對 CPU 門檻,應先確認 synth 產生的 CloudFormation 政策。
  • 共用網路政策預設停用。檢視時發現其目標可能過於接近某執行個體系列的突發流量上限;若要啟用,應依觀測到的流量與突發行為選定目標。
  • ASG 政策不能超出最小與最大容量界限。固定容量群組無法向外擴縮,容量為零且未啟用的 Blue/Green 群組也不能透過擴縮政策預先暖機。
  • 目前可讀取的原始碼與歷史 Blue/Green synth 紀錄不同。描述實際行為前,應先透過 CDK synth 及 AWS Console 確認目標分支設定。
  • 排程是依預期需求預留容量,不能證明預測符合實際流量。仍須驗證排程與政策的互動、健康檢查、暖機時間、網路與儲存 I/O、請求量,以及負載平衡器的延遲與錯誤指標。
  • Mixed Instances 的容量分配設定曾經變更。歷史數值只適用於各自的版本,不能當作目前正式環境設定。