# AWS - Lambda Efficiency SnapStart and Concurrency
# Lambda Efficiency
AWS Lambda 效能優化有兩項關鍵技術
- SnapStart 冷啟動優化
- Concurrency 同時執行能力
# Lambda SnapStart
AWS Lambda SnapStart
是一種讓 Lambda 在執行時能「快速冷啟動 (cold start)」的技術,
透過 預先初始化並快照 (snapshot) 執行環境,加速第一次呼叫的啟動時間。
# 為什麼需要 SnapStart
Lambda 函數啟動有兩種情況
| 類型 | 說明 | 問題 |
|---|---|---|
| Warm Start | Lambda 容器尚未銷毀,直接重用 | 快 |
| Cold Start | 新容器啟動 → 載入程式碼 → 初始化 | 慢,Java 最明顯 |
尤其是 Java Lambda
- 啟動 JVM
- 載入 class 與依賴
- 執行 static {} 初始化
這些在第一次執行時可能要花 數百毫秒到幾秒。
# SnapStart 運作原理
啟用 SnapStart 後的運作流程如下
- 部署階段
- 當你發佈一個 新版本 (Version) 的 Lambda
- AWS 會
- 啟動 Lambda 執行環境
- 執行你的程式初始化(init () 階段)
- 對整個記憶體狀態做 快照 (Snapshot)
- 執行階段
- 當 Lambda 被觸發時,AWS 直接 從快照恢復環境,而不是重新初始化 JVM
- 所以冷啟動變得非常快(通常減少 90% 以上)
- 每個版本的 SnapShot 都獨立儲存
- SnapStart 只適用於 特定版本($LATEST 不支援)
# SnapStart 加速效果
| Lambda 類型 | 冷啟動平均時間 |
|---|---|
| 一般 Java | 1–3 秒 |
| SnapStart Java | < 300 毫秒 |
實測常見為 10x 提升
# AWS Lambda Concurrency
Concurrency(併行) 指 Lambda 同時能處理的請求數量。
每個請求都會在獨立的執行環境(container)中運行。
# 關鍵類型
| 類型 | 說明 |
|---|---|
| Unreserved Concurrency | 預設可動態擴展(受帳戶上限限制) |
| Reserved Concurrency | 為特定函數保留一定的並行容量(可防止其他函數搶資源) |
| Provisioned Concurrency | 預先初始化固定數量的執行環境,避免冷啟動延遲 |
# 運作方式(Lambda 執行流程)
當有事件進來:
- 若已有空閒容器 → Warm start
- 若沒有空閒容器 → 建立新容器(冷啟動)
- 若超過併行限制 → 請求被拒絕(429 Throttling)