我已经使用无服务器框架实现了一个 AWS Lambda 函数。该 Lambda 函数正在使用 RDS 和 MongoDB。MongoDB 端点运行大约 500 毫秒,但 RDS 运行时间为 12 秒(冷启动)和约 3 秒(热启动)。
注意:我在此端点中使用 Sequelize。
如何加快我的 RDS Lambda 端点?
我已经使用无服务器框架实现了一个 AWS Lambda 函数。该 Lambda 函数正在使用 RDS 和 MongoDB。MongoDB 端点运行大约 500 毫秒,但 RDS 运行时间为 12 秒(冷启动)和约 3 秒(热启动)。
注意:我在此端点中使用 Sequelize。
如何加快我的 RDS Lambda 端点?
在函数模块定义后的第一行,添加以下行
context.callbackWaitsForEmptyEventLoop = false;
回调WaitsForEmptyEventLoop
您可以将此属性设置为 false 以请求 AWS Lambda 在调用回调后立即冻结进程,即使事件循环中有事件也是如此。AWS Lambda 将冻结进程、任何状态数据和 Node.js 事件循环中的事件(在接下来调用 Lambda 函数并且 AWS Lambda 选择使用冻结进程时处理的事件循环中的任何剩余事件)
更多细节阅读这篇文章
您可以使用旧context.done
函数立即返回,或者更具体地说context.succeed
/ context.fail
。此功能在节点 4 上仍然可用。
虽然它不会突然结束正在运行的 Lambda,但会向调用者(如 API 网关)做出响应,并在需要时继续在后台运行最多约 15 秒。
有趣的额外:如果您安排一个函数稍后运行,setTimeout
那么您有大约 15 秒的时间免费运行,因为 Lambda 只对显式异步函数调用负责。