AWS Lamba在使用RDS时性能较差

时间:2017-02-16 22:22:06

标签: node.js aws-lambda amazon-rds serverless-framework serverless-architecture

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

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

如何加速我的RDS Lambda端点?

2 个答案:

答案 0 :(得分:8)

在功能模块定义后的第一行,添加以下行

context.callbackWaitsForEmptyEventLoop = false;

<强> callbackWaitsForEmptyEventLoop

  • 默认值为true
  • 仅用于修改回调的默认行为。

您可以将此属性设置为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只对显式异步函数调用负责。