站長阿川

站長阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

站長精心設計,帶你實作 63 個小專案,得到作品集!

立即開始免費試讀!

引言

我是GMO Connect的永田。
在某個案件中,對於性能的要求異常嚴格,經過多次嘗試終於達成了,所以我總結了一些技術要點。

性能要求事項

  • 數分鐘內請求量增加數十倍
  • 最終請求量可達數萬rps(每秒請求數)
  • 由於幾乎不會發生最大負荷,因此希望盡可能讓ECS Fargate的任務數量透過AutoScaling自動伸縮

總結

  • (前提條件)ECS的Image使用golang+distroless做最小化處理
  • 自行實作fast scaler,以提高Scale-Out速度
  • Scale-In則交由ECS Fargate的目標追蹤策略處理

ECS Fargate Scale Out速度的挑戰

一開始,我樂觀地認為ECS的縮放策略可以達到一定效果,但實際上當我構建環境並測試時,發現無法在數分鐘內達到ELB目標的ServiceIn😇
簡單查看一下目標追蹤策略中的Scale Out內容,分配大約如下。

No 實施內容 大約時間 備註
1 收集CloudWatch指標 2分鐘〜3分鐘? 參考數據至1分鐘間隔的Metrics大約需要這麼長時間
2 依據指標觸發Alarm(desiredCount增加) 3分鐘 在目標追蹤下固定為3分鐘(Alarm的設置無法自行調整),若為步進縮放則至少1分鐘
3 Alarm觸發後,至ELB的target INIT 20秒〜30秒 ECS任務啟動後到ELB INIT需要時間
4 從ELB target INIT至ServiceIn 30秒〜60秒 即使將ELB健康檢查最小化(5秒x2次),仍然需要時間

No3和No4的過程在AWS服務中是黑盒子,即使將容器Image尺寸縮小、健康檢查等所有可想到的參數都設為最小,這些時間也不會再縮短。
因此,我們需要自行實作No1和No2所需的大約5分鐘觸發時間(desiredCount增加),以提高速度(=自定義實作fast scaler),這便是本文的重點。

fast scaler的實作內容

「fast scaler」的概念並不是獨創的,而是透過AWS樣本取得的,本次的實作基本思想相同。
改動的內容如下:

  • 由Lambda實現狀態管理
    • 範例使用的是Step Function,但因為成本及不需要無代碼的條件調整,轉而使用EventBridge+Lambda
  • 仍然通過Lambda(VPC Lambda)收集指標
  • 針對ECS容器取得指標,準備返回ECS內CPU使用率的自定義端點
    • 在此次系統中,rps和CPU使用率幾乎成正比
    • 此部分需根據項目內容進行調整
    • 備註:由於golang每幾分鐘就會執行一次GC,CPU使用率瞬間(1秒〜2秒)會上升,因此採取去除幾次獲得的CPU使用率中最高值後計算AVG的方式

以下是用序列圖表示的內容。(僅記載要點)

fast scaler導入後的Scale Out速度

在導入上述fast scaler後,我們大約能以以下速度完成Scale Out。No1和No2大幅改善,最終能在大約1分半鐘內實現ELB target Service In!

No 實施內容 大約時間 備註
1 收集指標 1秒 每秒呼叫ECS的自定義端點
2 依據指標觸發Alarm(desiredCount Up) 5秒 根據指標AVG所需的datapoint數量
3 Alarm觸發後,至ELB的target INIT 20秒〜30秒 ECS任務啟動後到ELB INIT仍需時間
4 從ELB target INIT至ServiceIn 30秒〜60秒 即使將ELB健康檢查最小化(5秒x2次),仍需要時間

不過,No3和No4這部分無法避免,因此在Service In至多1分半的時間內,針對ECS任務選擇了充裕的硬體規格與台數以應對突發流量。

Scale In的應對

至此為止我們討論了Scale Out的部分,但由於Scale In可以「慢慢來」,因此將目標追蹤策略的CPU使用率設為範圍。

(重申)總結

  • (前提條件)ECS的Image使用golang+distroless做最小化處理
  • 自行實作fast scaler,以提高Scale-Out速度
  • Scale-In則交由ECS Fargate的目標追蹤策略處理

我們公司廣泛提供基於AWS的服務開發及技術支援,如有需要,隨時歡迎聯繫我們。
聯繫方式: https://gmo-connect.jp/contactus/


原文出處:https://qiita.com/ntaka329/items/9f72bf6824abe8b4af97


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
站長阿川

站長阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

站長精心設計,帶你實作 63 個小專案,得到作品集!

立即開始免費試讀!