在我們的小系列的第一篇文章中,我們探討如何使用 Docker 容器映像和 Java 執行時間來開發和部署 Lambda 函數。我們探討了 2 個用例:
在本文中,我們將使用 AWS Lambda 基礎 Docker 容器映像的方法來測量 Lambda 函數的冷啟動和熱啟動。
對於我們的測量,我們將使用第一部分中的範例應用程序,並為 Lambda 函數使用 Java 21 運行時。對於所有 Lambda 函數,我們提供 1024 MB 記憶體並使用 JAVA_TOOL_OPTIONS:“-XX:+TieredCompilation -XX:TieredStopAtLevel=1”,因為此編譯選項在冷啟動時間和熱啟動時間之間提供了非常好的權衡。
下面的實驗結果是基於使用Lambda 函數GetProductByIdWithPureJava21GraalVMNativeImageLambda 在1 小時內重現超過100 次冷啟動和大約100.000 次熱啟動,該函數映射到Java Lambda 處理程序類,負責檢索產品(存儲)在DynamoDB 中)按id。為此,我使用了負載測試工具,但是您可以使用任何您想要的工具,例如 Serverless-artillery 或 Postman。
冷 (c) 和暖 (m) 開始時間(以毫秒為單位):
c p50 | c p75 | c p90 | c p99 | c p99.9 | c max | w p50 | w p75 | w p90 | w p99 | w p99.9 | w max |
---|---|---|---|---|---|---|---|---|---|---|---|
3093.26 | 3219.44 | 3314.12 | 4632.16 | 6513.35 | 6517.71 | 5.47 | 6.20 | 7.39 | 17.14 | 43.03 | 1386.07 |
在本文中,我們使用 AWS Lambda 基礎 Docker 容器映像的方法測量了 Lambda 函數的冷啟動和熱啟動時間。與使用具有1024 MB 記憶體的Lambda 和Lambda Java 21 託管運行時的不同Lambda 記憶體設定使用Java 21 測量冷啟動和熱啟動相比,我們經歷了相當顯著的冷啟動和相當有競爭力的熱啟動時間。
AWS Lambda SnapStart 可大幅縮短冷啟動時間,目前僅適用於 Java Corretto 託管執行時間(11、17 和 21),不適用於 Docker 容器映像。您可以探索jlink 工具,將一組模組及其相依性組裝和最佳化為更小的自訂執行時間映像和類別資料共享(CDS),但這有助於減少Java 程式語言應用程式(特別是較小的應用程式)的啟動時間,以及減少佔地面積。使用 Docker 映像作為 Java 部署工件的優點是能夠使用最新的 Java 執行時間,例如 Java 22(Java 23 將於 2024 年 9 月發布)。
以上是使用 Docker 容器映像的 Lambda 函數 - 使用 Java(運行時)部分確保 Lambda 函數的冷啟動和熱啟動的詳細內容。更多資訊請關注PHP中文網其他相關文章!