使用 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 只对显式异步函数调用。
我已经使用无服务器框架实现了 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 只对显式异步函数调用。