使用 RDS 时性能不佳的 AWS Lambda

AWS Lamba with poor performance when using RDS

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

注意:我在此端点中使用 Sequelize。

如何加速我的 RDS Lambda 端点?

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

context.callbackWaitsForEmptyEventLoop = false;

callbackWaitsForEmptyEventLoop

  • 默认值为真
  • 仅对修改回调的默认行为有用。

您可以将此 属性 设置为 false 以请求 AWS Lambda 在调用回调后立即冻结进程,即使事件循环中有事件也是如此。 AWS Lambda 将冻结进程、任何状态数据和 Node.js 事件循环中的事件(在接下来调用 Lambda 函数时处理事件循环中的任何剩余事件,如果 AWS Lambda 选择使用冻结进程)

更多详细信息请阅读 this 文章

您可以使用旧的 context.done 函数立即 return 或更具体地说 context.succeed/context.fail。此功能在 Node 4 上仍然可用。

虽然它不会突然结束 运行ning Lambda,但会向调用者做出响应(如 API 网关)并在需要时在后台保持 运行ning , 最多 ~15 秒。

有趣的额外功能:如果您稍后使用 setTimeout 将函数安排到 运行,您可以免费获得 ~15 秒到 运行,因为 Lambda 只对显式异步函数调用。