aws-lambda - 从冷启动的角度来看,我们是在同一个文件中编写处理程序还是在 AWS Lambda 的多个文件中编写处理程序是否重要?
问题描述
我正在使用 serverless.com 框架编写我的 lambda 处理程序。第二种方式(多个文件处理程序函数)是否比第一种方式导致更多的冷启动?
例如,在上午 11:00:00 我的应用程序调用GET /pets
,在上午 11:00:30 我的应用程序调用POST /store
。如果两个函数都打包到同一个 lambda 包中,那么第二次调用不会导致冷启动;但是,如果将它们打包到不同的 lambda 包中,则第二次调用将是冷启动。
感谢分享
一种写法如下
--- 单文件处理方式 ----
...
functions:
listPets:
handler: handler.handler1
events:
- http:
method: get
path: pets
addStore:
handler: handler.handler2
events:
- http:
method: post
path: stores
...
// handler.js
// handle GET /pets
exports.handler1 = async (event) { ... }
// handle POST /stores
exports.handler2 = async (event) { ... }
...
另一种组织方式如下:
--- 多文件处理方式 ----
...
functions:
listPets:
handler: handler1.handler1
events:
- http:
method: get
path: pets
addStore:
handler: handler2.handler2
events:
- http:
method: post
path: stores
...
// handler1.js
// handle GET /pets
exports.handler1 = async (event) { ... }
// handler2.js
// handle POST /stores
exports.handler2 = async (event) { ... }
...
解决方案
一个单独定义的 Lambda 函数具有不同的事件来触发它,即使在同一个处理程序处理多个事件的情况下,也会调用单独的实例,这意味着它们都会遭受某种形式的冷启动。但是,您可能需要首先确定冷启动是否是一个实际问题。查看一个我可以访问的项目,该项目每 24 小时收到超过 3 000 000 次 Lambda 调用,其中只有大约 0.02% 的调用实际上是冷启动。因此,花费大量时间减少冷启动可能对您的优化过程实际上有用,也可能没有用。
减少冷启动的最简单和最有效的两种方法是:
- 通过增加内存大小设置来支付更多费用。内存大小也会线性增加 CPU 分配(从 128 MB 到 256 MB 有效地使 CPU 分配翻倍),并且它也被证明可以减少冷启动时间。这也将使您的 Lambda 执行得更快,因此这是一个很好的奖励。
- 支付更多费用并使用预置并发,这是一种告诉 AWS 始终有一个温暖的 Lambda 等待请求的方式,这样您就永远不会冷启动。
推荐阅读
- python - 类实例中的随机值,未保存
- python - Python:为什么每个项目都重复这个循环?
- ios - UITable 视图控制器上的渐变背景
- sql - 显示在主题“M”中通过但在主题“P”中失败的名称
- video - 清除 Pepper 的 chash 内存
- php - 从数据库中插入选择框列
- python - Anaconda Python - 如何重新安装 NumPy
- regex - 在 Blue Prism Application Modeller 中使用正则表达式
- google-sheets - 如何计算范围中的值出现在一个范围内的次数,不包括其他范围
- javascript - 如何将每 2 次递增的值添加到数组的每个对象?