# 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 後的運作流程如下

  1. 部署階段
    • 當你發佈一個 新版本 (Version) 的 Lambda
    • AWS 會
      • 啟動 Lambda 執行環境
      • 執行你的程式初始化(init () 階段)
      • 對整個記憶體狀態做 快照 (Snapshot)
  2. 執行階段
    • 當 Lambda 被觸發時,AWS 直接 從快照恢復環境,而不是重新初始化 JVM
    • 所以冷啟動變得非常快(通常減少 90% 以上)
  3. 每個版本的 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 執行流程)

當有事件進來:

  1. 若已有空閒容器 → Warm start
  2. 若沒有空閒容器 → 建立新容器(冷啟動)
  3. 若超過併行限制 → 請求被拒絕(429 Throttling)