擴充與併發控制
使用 AWS Lambda 的無伺服器應用程式
Claudio Canales
Senior DevOps Engineer
一張圖看擴充
- 需求越高 -> 平行執行越多。
- 每次執行都會用到一個執行環境。
- 併發=此刻正在執行的次數。
什麼是併發?
- 一次呼叫=一個工作單元。
- 併發=現在同時在跑幾個。
- 若同時有 10 個在跑,併發=10。
估算所需併發
- 經驗法則:
concurrency = rps * duration。
- 縮短 duration 可降低併發。
- 用此估算安全的限制值。
範例:50 rps、200 ms
- 200 ms=0.2 秒。
- 50 * 0.2=10 個同時執行。
- 程式越快,平行次數越少。
限制:帳戶池 vs 函式切片
- 併發上限設在帳戶層級。
- 為關鍵函式預留一部分額度。
- 其他函式共用剩餘額度。
Reserved Concurrency:硬性上限
- 安全閥。
- 限制平行工作量。
- 超過上限時會節流。
- 吵雜函式也耗不光資源。
節流:長什麼樣
- Lambda 在併發上限處開始節流。
- 呼叫端不會得到正常執行。
- 你可在監控中看到節流。
Provisioned Concurrency:預熱容量
- 預先初始化的一池環境。
- 常綁在一個別名後。
- 請求啟動更快。
預留 vs 預置(解決不同問題)
- 預留用來控管負載。
- 預置用來控管啟動延遲。
- 許多正式環境同時用兩者。
保護下游系統
- 資料庫能承受的連線有限。
- 併發上限可防護它。
- 否則流量尖峰可能導致停擺。
突發 vs 穩定流量
- 突發會建立大量平行環境。
- 處理器慢會拉高併發。
- 上限可平滑尖峰。
- 縮短 duration 也是擴充策略。
失敗與重試會增加負載
- 重試會放大流量。
- 併發上限可縮小影響範圍。
- 失敗迴圈會壓垮相依服務。
簡單調校流程
- 先從量測開始。
- 出現節流或壓力時設併發上限。
- 冷啟動影響延遲時加預置容量。
重點整理
- 併發有助思考如何擴充。
- 估算:
rps * duration。
- 預留設上限控負載;注意節流。
- 預置可降低冷啟動延遲。
一起來練習吧!
使用 AWS Lambda 的無伺服器應用程式
Preparing Video For Download...