8

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

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

如何加快我的 RDS Lambda 端点?

4

2 回答 2

11

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

context.callbackWaitsForEmptyEventLoop = false;

回调WaitsForEmptyEventLoop

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

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

更多细节阅读这篇文章

于 2017-02-16T22:28:05.383 回答
0

您可以使用旧context.done函数立即返回,或者更具体地说context.succeed/ context.fail。此功能在节点 4 上仍然可用。

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

有趣的额外:如果您安排一个函数稍后运行,setTimeout那么您有大约 15 秒的时间免费运行,因为 Lambda 只对显式异步函数调用负责。

于 2017-02-17T13:04:25.353 回答