blo*_*seo 3 amazon-web-services 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
};
};
Run Code Online (Sandbox Code Playgroud)
结果: 你好处理程序日志
按照我的意图,每个函数都是独立执行的,因此值console.log(now)应该始终是执行它的点.
但是,在实际日志中,值now是在第一次执行时连续记录的 - 而不是每个函数的执行.
5分钟后的日志值是相同的.但是,该值在12小时后发生了变化,但在此之后,它显示了同样的问题.
这个结果让我们认真考虑如何管理数据库连接.
每个lambda回收案例都有两个假设
如果lambda像test.js一样回收,
如果不,
我们怎样才能在最大性能范围内使用lambda?
我们如何解释上面的测试结果?
AWS Lambda创建并重用容器,因此您需要了解此实践对编程模型的影响.
函数第一次执行时,将创建一个新容器来执行它.
假设您的函数完成,并且有一段时间过去了,那么您再次调用它.Lambda可能会重新创建一个新容器.但是,如果您没有更改Lambda函数代码并且没有太多时间过去,Lambda可能会重用以前的容器.这提供了性能优势:Lambda可以跳过nodejs语言初始化,并且可以跳过代码中的初始化(例如,您可以重用数据库连接); 如果容器被重用,你上次写入/ tmp的文件仍然存在; 您在Lambda函数处理程序之外全局初始化的任何内容都会持续存在.
有关更多信息,请参阅了解AWS Lambda中的容器重用.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |