node.js - 连接池和 lambda 终止

标签 node.js connection-pooling serverless-framework serverless

我一直在研究无服务器和 postgresql。看起来连接池是可能的,但是当我在外部声明到我的 postgresql 实例的连接池时:

var pool = new pg.Pool(config);

在请求处理程序末尾不调用 pool.end() 似乎会导致 lambda-local 在调用它时不会终止。

如果我调用 pool.end() lambda-local 确实会终止,但我想知道这是否意味着该函数将停止工作?

如果我不调用 pool.end(),该函数是否会在 AWS 上永远运行,从而花费我很多钱?

最佳答案

这是因为默认情况下,lambda 回调在“卡住进程”之前等待空事件循环 doc

您可以通过将 context.callbackWaitsForEmptyEventLoop 设置为 false 来更改此行为。在后续调用中,如果发生“热启动”,您的 lambda 应该能够重用该池。

您可以使用middy middlewareserverless plugin预热您的 lambda 并防止冷启动。

而且 lambda 永远不会永远运行,每个请求的最大执行持续时间为 300 秒 doc当然,您可以设置自己的(较低的)超时。

话虽如此,这是一条危险的道路,应谨慎使用。

关于node.js - 连接池和 lambda 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48418581/

相关文章:

node.js - 如何在无服务器(AWS Lambda)应用程序中缓存或重用 MongoDB 数据库连接

node.js - 使用 Redis 存储来自 neo4j 的查询结果

tomcat - tomcat 线程 "PoolCleaner[{a number}]"异常

aws-api-gateway - 无服务器 : create api key from SecretsManager value

java - tomcat 池未重置池。连接错误太多

Java 连接池 - 垃圾收集或调用 close()?

amazon-web-services - 如何保护无服务器框架端点免受滥用/DoS 攻击?

mysql - 如何在查询语句之外从mysql查询中获取值?

node.js - Kurento 在 node.js 中记录调用者和被调用者流

windows - 使用 node-webkit 应用程序设计系统托盘