使用 Lambda 提高创业绩效 SnapStart - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Lambda 提高创业绩效 SnapStart

Lambda SnapStart for Java 可以将延迟敏感型应用程序的启动性能提高多达 10 倍,无需支付额外费用,通常无需更改您的函数代码。导致启动延迟的最大因素(通常称为冷启动时间)是指 Lambda 在初始化函数上花费的时间,其中包括加载函数代码、启动运行时以及初始化函数代码。

使用 SnapStart,Lambda 会在您发布函数版本时初始化您的函数。Lambda 会对已初始化的执行环境的内存和磁盘状态创建 Firecracker microVM 快照、加密该快照并对其进行缓存以实现低延迟访问。当您首次调用某个函数版本时,以及随着调用的纵向扩展,Lambda 会从缓存的快照恢复新的执行环境,而不是从头开始初始化,从而减少了启动延迟。

重要

如果您的应用程序要求状态唯一,则必须评估您的函数代码并验证其能否在快照操作后快速恢复。有关更多信息,请参阅使用 Lambda 处理唯一性 SnapStart

支持的功能和限制

SnapStart 支持 Java 11 及更高版本的 Java 托管运行时。不支持其他托管运行时系统(例如 nodejs20.xpython3.12)、仅限操作系统的运行时系统容器映像

SnapStart 不支持预配置并发、arm64 架构、Amazon E lastic File System (Amazon EFS) 或大于 512 MB 的临时存储。

要使用 SnapStart,您可以使用 Lambda 控制台、Amazon Command Line Interface (Amazon CLI)、Lambda API、、Amazon SDK for JavaAmazon CloudFormation、Amazon Serverless Application Model (Amazon SAM) 和。Amazon Cloud Development Kit (Amazon CDK)有关更多信息,请参阅激活和管理 Lambda SnapStart

注意

您 SnapStart 只能在已发布的函数版本和指向版本的别名上使用。你不能在函数的未发布版本 ($LATEST) SnapStart 上使用。

支持的区域

SnapStart 有以下几种版本Amazon Web Services 区域:

  • 美国东部(弗吉尼亚州北部)

  • 美国东部(俄亥俄州)

  • 美国西部(北加利福尼亚)

  • 美国西部(俄勒冈州)

  • 非洲(开普敦)

  • 亚太地区(香港)

  • 亚太地区(孟买)

  • 亚太地区(海得拉巴)

  • 亚太地区(东京)

  • 亚太地区 (首尔)

  • 亚太地区(大阪)

  • 亚太地区(新加坡)

  • 亚太地区(悉尼)

  • 亚太地区(雅加达)

  • 亚太地区(墨尔本)

  • 加拿大(中部)

  • 欧洲地区(斯德哥尔摩)

  • 欧洲地区(法兰克福)

  • 欧洲(苏黎世)

  • 欧洲地区(爱尔兰)

  • 欧洲地区(伦敦)

  • 欧洲地区(巴黎)

  • 欧洲地区(米兰)

  • 欧洲(西班牙)

  • 中东(阿联酋)

  • 中东(巴林)

  • 南美洲(圣保罗)

兼容性注意事项

使用 SnapStart,Lambda 使用单个快照作为多个执行环境的初始状态。如果您的函数在初始化阶段使用了以下任何一项,则可能需要在使用之前进行一些更改 SnapStart:

独特性

如果您的初始化代码生成了唯一内容,而此内容包含在快照中,则跨执行环境重复使用该内容时,该内容可能不唯一。要在使用时保持唯一性 SnapStart,必须在初始化后生成唯一的内容。其中包括唯一 ID、唯一密钥以及用于生成伪随机性的熵。要了解如何还原唯一性,请参阅 使用 Lambda 处理唯一性 SnapStart

网络连接

当 Lambda 从快照恢复您的函数后,无法保证您的函数在初始化阶段所建立连接的状态不变。验证您的网络连接状态,并在必要时重新建立连接。在大多数情况下,Amazon 开发工具包建立的网络连接会自动恢复。关于其他连接,请查看最佳实践

临时数据

有些函数会在初始化阶段下载或初始化暂存数据,例如临时凭证或缓存的时间戳。在使用函数处理程序之前刷新其中的临时数据,即使不使用也是如此。 SnapStart

SnapStart 定价

不收取任何额外费用 SnapStart。您需要根据对您的函数发出的请求数量、您的代码运行所用时间以及为您的函数配置的内存来支付相关费用。持续时间从代码开始运行开始计算,直到代码返回或以其他方式结束为止,并向上取整为最接近的 1 毫秒。

持续时间费用适用于在函数处理程序中运行的代码、在处理程序之外声明的初始化代码、运行时(JVM)加载所用时间以及在运行时挂钩中运行的任何代码。有关 Lambda 如何计算持续时间的更多信息,请参阅 监控 Lambda SnapStart

对于配置为的函数 SnapStart,Lambda 会定期回收执行环境并重新运行您的初始化代码。为了实现弹性,Lambda 会在多个可用区中创建快照。每次 Lambda 在另一个可用区重新运行您的初始化代码时都会收取费用。有关 Lambda 如何计算费用的更多信息,请参阅 Amazon Lambda 定价

比较 Lambda 和预配置的 SnapStart 并发性

当函数向上扩展时,Lambda SnapStart 和预配置的并发都可以减少冷启动和异常值延迟。 SnapStart 无需额外费用,即可帮助您将启动性能提高多达 10 倍。预置并发可使函数保持初始化状态,并做好准备在几十毫秒内做出响应。配置预置并发会让您的 Amazon Web Services 账户 产生费用。如果您的应用程序有严格的冷启动延迟要求,请使用预置并发。您不能在同一个函数版本上同时使用这两个函数 SnapStart 和预配置的并发性。

注意

SnapStart 与大规模函数调用一起使用时效果最佳。不经常调用的函数可能无法获得相同的性能改进。

其他资源

除了阅读本章中的其他主题外,我们还建议您尝试使用Amazon Lambda SnapStart研讨会更快地启动,并观看 reAmazon: Invent 2022 上的 Java 函数快速冷启动会话。