AWS Lamba在使用RDS时性能较差

我已经使用无服务器框架实现了AWS Lambda函数。 该Lambda函数正在使用RDS和MongoDB。 MongoDB端点运行大约500ms,但RDS在12秒(冷启动)和〜3秒(热启动)运行。

注意:我在这个端点使用了Sequelize。

如何加速我的RDS Lambda端点?

在函数模块定义之后的第一行中,添加以下行

context.callbackWaitsForEmptyEventLoop = false; 

callbackWaitsForEmptyEventLoop

  • 默认值是true
  • 仅用于修改callback的默认行为。

您可以将此属性设置为false以请求AWS Lambda在调用callback后立即冻结该进程,即使事件循环中有事件。 AWS Lambda将冻结进程,Node.js事件循环中的任何状态数据和事件(下一次调用Lambda函数时处理事件循环中的所有剩余事件,以及AWS Lambdaselect使用冻结进程)

更多的细节阅读这篇文章

您可以使用旧的context.done函数立即返回或更具体地返回context.succeed / context.fail 。 该function在节点4上仍然可用。

虽然它不会突然结束正在运行的Lambda,但会响应调用者(如API网关)并在后台运行(如果需要),最多只需15秒。

有趣的额外:如果你使用setTimeout安排一个稍后运行的函数,那么你可以免费运行setTimeout秒,因为Lambda只支持明确的asynchronous函数调用。