在我们的小系列的第一篇文章中,我们探讨了如何使用 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中文网其他相关文章!