使用 Lambda 改善啟動效能 SnapStart - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Lambda 改善啟動效能 SnapStart

適用 SnapStart 於 Java 的 Lambda 可將延遲敏感應用程式的啟動效能提升高達 10 倍,無需額外成本,通常不需要變更函數程式碼。啟動延遲的最大歸因 (通常稱為冷啟動時間) 是 Lambda 花費在初始化函數的時間,其中包括載入函數的程式碼、啟動執行階段以及初始化函數程式碼。

Lambda 會在您發佈函數版本時初始化您的函數。 SnapStartLambda 會擷取已初始化執行環境的記憶體和磁碟狀態的 Firecracker microVM 快照、將快照加密,並快取以進行低延遲存取。第一次調用函數版本時且呼叫縱向擴展時,Lambda 會從快取的快照恢復新的執行環境,而不是從頭開始執行,進而改善啟動延遲。

重要

如果您的應用程式依賴狀態的唯一性,則必須評估函數程式碼,並確認其對快照作業具有復原能力。如需詳細資訊,請參閱 以 Lambda 處理獨特性 SnapStart

支援的功能和限制

SnapStart 支援 Java 11 及更新版本的 Java 管理執行階段。不支援其他受管執行期 (例如 nodejs20.xpython3.12)、僅限作業系統的執行期容器映像

SnapStart 不支援佈建並行arm64 架構Amazon Elastic File System (Amazon EFS) 或大於 512 MB 的暫時儲存。

若要使用 SnapStart,您可以使用 Lambda 主控台、AWS Command Line Interface (AWS CLI)、Lambda API AWS SDK for Java AWS CloudFormation、、、AWS Serverless Application Model (AWS SAM) 和AWS Cloud Development Kit (AWS CDK). 如需詳細資訊,請參閱 啟用和管理 Lambda SnapStart

注意

您 SnapStart 只能在指向版本的已發佈函數版本別名上使用。您不能 SnapStart 在函數的未發布版本($LATEST)上使用。

支援地區

SnapStart 可在以下內容中使用AWS 區域:

  • 美國東部 (維吉尼亞北部)

  • 美國東部 (俄亥俄)

  • 美國西部 (加利佛尼亞北部)

  • 美國西部 (奧勒岡)

  • 非洲 (開普敦)

  • 亞太區域 (香港)

  • Asia Pacific (Mumbai)

  • 亞太區域 (海德拉巴)

  • 亞太區域 (東京)

  • 亞太區域 (首爾)

  • 亞太區域 (大阪)

  • 亞太區域 (新加坡)

  • 亞太區域 (雪梨)

  • 亞太區域 (雅加達)

  • 亞太區域 (墨爾本)

  • 加拿大 (中部)

  • 歐洲 (斯德哥爾摩)

  • 歐洲 (法蘭克福)

  • 歐洲 (蘇黎世)

  • 歐洲 (愛爾蘭)

  • 歐洲 (倫敦)

  • Europe (Paris)

  • 歐洲 (米蘭)

  • 歐洲 (西班牙)

  • 中東 (阿拉伯聯合大公國)

  • Middle East (Bahrain)

  • 南美洲 (聖保羅)

相容性考量

Lambda 會使用單一快照作為多個執行環境的初始狀態。 SnapStart如果您的函數在初始化階段使用以下任何一項,則可能需要在使用之前進行一些更改 SnapStart:

Uniqueness

如果您的初始化程式碼會產生包含在快照中的唯一內容,則在跨執行環境中重複使用該內容時,該內容可能不是唯一的。為了在使用時保持唯一性 SnapStart,您必須在初始化後生成唯一的內容。這包括唯一 ID、唯一密碼,以及用來產生偽隨機性的熵。若要了解如何還原唯一性,請參閱:以 Lambda 處理獨特性 SnapStart

網路連線

Lambda 從快照恢復函數時,無法保證函數在初始化階段建立的連線狀態。驗證網路連線的狀態,並視需要重新建立。在大多數情況下,AWS SDK 建立的網路連線會自動恢復。針對其他連線,請檢閱最佳實務

暫存資料

某些函數會在初始化階段下載或初始化暫存資料,例如臨時憑證或快取的時間戳記。在使用函數處理常式之前重新整理暫時資料,即使不使用也是如此。 SnapStart

SnapStart 定價

沒有額外的費用 SnapStart。我們會根據函數的請求數量、程式碼執行的時間,以及為函數配置的記憶體向您收費。持續時間是從程式碼開始執行的時間開始計算,直到傳回資料或結束為止,四捨五入至最接近的 1 ms。

持續時間費用適用於在函數處理常式中執行的程式碼、在處理常式之外宣告的初始化程式碼、執行階段 (JVM) 載入所花的時間,以及在執行階段掛鉤中執行的任何程式碼。如需 Lambda 如何計算持續時間的詳細資訊,請參閱:監控 Lambda SnapStart

對於使用設定的函數 SnapStart,Lambda 會定期回收執行環境,並重新執行初始化程式碼。為提供備援,Lambda 會在多個可用區域建立快照。每次 Lambda 在另一個可用區域重新執行初始化程式碼時,都會收取費用。如需費用的詳細資訊,請參閱 AWS Lambda 定價

比較 Lambda SnapStart 和佈建並行

當函數擴展時,Lambda SnapStart 和佈建的並行可以減少冷啟動和異常延遲。 SnapStart 幫助您將啟動性能提高高達 10 倍,無需額外費用。佈建並行可讓函數保持初始化,並準備好在兩位數的毫秒內回應。設定佈建並行會對您的 AWS 帳戶 帳戶產生費用。如果您的應用程式有嚴格的冷啟動延遲需求,請使用佈建並行。您不能在相同的函數版本上同時使用 SnapStart 和佈建的並發。

注意

SnapStart 與大規模函數調用一起使用時效果最好。不常調用的函數效能改進效果可能不會相同。

其他資源

除了閱讀本章中的其他主題之外,我們還建議您嘗試使用AWS Lambda SnapStart研討會更快啟動,並觀看 AWS Re: Invent 2022 開始的 Java 函數會話的快速冷啟動