AWS Lambda的热启动和冷启动

15

大家好,我是AWS Lambda的新手。我想知道什么是热Lambda函数(热启动)和冷Lambda函数(冷启动)?有没有人能够详细解释一下它们之间的区别?

3个回答

17

在上传代码或者闲置一段时间后,您的Lambda将会被关闭或处于“冷启动”状态。当新事件到来时,Lambda会短暂地启动一个新的代码实例——这包括AWS进行初始化以启动“容器”的操作,以及初始化所上传的代码。

因此,在理论上,如果事件能够触发一个已初始化(“热启动”)的Lambda,它将比触发一个“冷启动”的Lambda更快地处理。但是没有保证一个Lambda会在最后一个事件之后保持热启动状态的时间长度,但它可以长达5分钟。


还要注意,如果您增加内存量,AWS Lambda 在冷启动时将更快地启动。因此,在访问不频繁时增加 Lambda 内存,并在有更多流量且 Lambda 处于暖状态时减少内存。 - adnan
1
@adnan,你能解释为什么增加内存会让Lambda启动更快吗?我注意到,仅使用可用内存的一小部分(例如30-40%)的Lambda仍然遭受缓慢的冷启动(冷启动时约6秒,热启动时约2毫秒)。 - Carlos Macasaet
3
我认为这是因为CPU与内存同时增加。更多的内存意味着有一个更大的底层虚拟计算机。 - adnan
这在2017年仍然是一个问题吗?解决方案是否相同,只需将“内存”调高即可? - Costa Michailidis
1
@Costa 是的,根据Lambda FAQ所述。https://aws.amazon.com/lambda/faqs/ "在AWS Lambda资源模型中,您可以选择为函数分配所需的内存量,并分配相应的CPU计算能力和其他资源。" - Ryan
@Ryan 容器生命周期是否有任何事件? - Viswanath Lekshmanan

0

有一种普遍的观念认为,当人们提到“热启动”时,他们指的是同一容器/沙盒已准备好接收新连接 - 但那并不准确。

  • 热启动 - 使用带有预先烘焙未使用的沙箱资源的热容器来调用函数。之前调用的资源不会被回收。
  • 冷启动 - 当没有容器/沙盒准备好接收请求时调用函数。必须创建一个新容器,并加载运行时和用户代码。冷启动的延迟大多是内部指标,在外部,冷启动只是可能影响最终用户体验的总体开销的一部分。在某些情况下,我们可以遇到完整冷启动的一部分,考虑规模预测和统计算法

然而,使用“冷启动”和“热启动”这些术语可能会误导,作为开发人员,你应该关心“调用开销” - 调用用户函数并返回响应所需的时间。


0
Lambda的执行需要预先配置的环境。这个执行环境是基于用户提供的以下内容创建的:
1. 内存 2. 函数的最大超时时间 3. 配置参数、运行代码所需的依赖等等
冷启动意味着创建一个新的环境来运行函数。由于创建环境需要时间,这会增加延迟。
热启动意味着重用之前创建的环境来再次运行函数,因为这次不需要花费时间来创建环境,所以响应更快。
您可以通过设置最佳的预置并发数来最小化冷启动,即定义预初始化环境的数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接