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