微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – AWS Lambda不会独立运行

我使用nodejs来使用AWS Lambda.

据我所知,lambda的每个函数都是在独立和并行的过程中处理的.

但是,以下示例显示的结果与我预期的不同.

// test.js
const Now = new Date();

module.exports = () => {
    console.log(Now);
};

// handler.js
const test = require('./test');

module.exports.hello = async (event,context) => {
    test();
    return {
        statusCode: 200,body: null
    };
};

结果:
hello handler log

按照我的意图,每个函数都是独立执行的,所以console.log(Now)的值应该始终是它执行的点.

但是,在实际日志中,Now的值会在第一次执行时连续记录 – 而不是每个函数的执行.

5分钟后的日志值是相同的.
但是,该值在12小时后发生了变化,但在此之后,它显示了同样的问题.

这个结果让我们认真考虑如何管理数据库连接.

每个lambda回收案例都有两个假设

如果lambda像test.js一样回收,

>更好地使用连接池
>还建议使用需要初始化的sequelize等orm

如果不,

>更好地使用简单连接和常规查询快速使用连接

我们怎样才能在最大性能范围内使用lambda?

我们如何解释上面的测试结果?

解决方法

AWS Lambda创建并重用容器,因此您需要了解此实践对编程模型的影响.

函数第一次执行时,将创建一个新容器来执行它.

假设您的函数完成,并且有一段时间过去了,那么您再次调用它. Lambda可能会重新创建一个新容器.但是,如果您没有更改Lambda函数代码并且没有太多时间过去,Lambda可能会重用以前的容器.这提供了性能优势:Lambda可以跳过nodejs语言初始化,并且可以跳过代码中的初始化(例如,您可以重用数据库连接);如果容器被重用,你上次写入/ tmp的文件仍然存在;您在Lambda函数处理程序之外全局初始化的任何内容都会持续存在.

欲了解更多,请参阅Understanding Container Reuse in AWS Lambda.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐