【问题标题】:AWS Lambda unable to connect (intermittently) to MongoDB inside an AWS VPCAWS Lambda 无法(间歇性地)连接到 AWS VPC 内的 MongoDB
【发布时间】:2019-11-02 07:22:27
【问题描述】:

我正在使用一些在 VPC 中运行的 AWS Lambda 函数,这些函数需要连接到后端 Mongo Atlas 数据库以进行数据存储/检索。

我是用Javascript编码的,所以我很自然地使用了官方的MongoDB Node JS客户端来建立连接。我面临的问题是,每当我进行一些并发的 lambda 调用时,其中一些都无法成功建立连接,并且基本上挂起,直到 Lambda 超时。例如,如果要调用 5 个不同的函数,则 2 个可能会在连接尝试时挂起,直到 lamdba 超时。连接保存在处理函数之外,以便在后续函数调用中重用,代码基于此处指定的最佳实践:https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/

我已经阅读了所有可用的在线资源和 mongo 文档,但我找不到任何解决方案。有没有人在 VPC 与 Mongo 的连接中遇到过 Lambda 的此类问题并超时?你是怎么解决的?谢谢。

【问题讨论】:

  • 您是否考虑过在您的 connect() 调用中设置 poolSize,取决于您的典型 Lambda 并发?
  • 我还没有尝试过,但是该参数将如何影响这个问题?
  • 您可以阅读网络上的连接池,但它是一种标准技术,可让多个并发客户端访问数据库。

标签: node.js amazon-web-services aws-lambda mongodb-atlas


【解决方案1】:

我遇到了完全相同的问题。

通过明确不遵循最佳实践,而是为每个需要一个 lambda 请求打开(和关闭)一个新连接来解决它。

在我的设置中,connect() 方法需要 20 到 70 毫秒才能完成,我想我会比间歇性和不可重现的挂起连接更痛苦。

为了更好地衡量,我将 { poolSize: 1 } 添加到 MongoClient 连接选项中。

【讨论】:

  • mongodb node.js 客户端也是部分罪魁祸首,因为即使在客户端显式调用了close(),它有时也会打开连接。从 3.3.2 升级到 3.3.5 为我们解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 2020-03-02
  • 1970-01-01
  • 2017-10-12
  • 2021-10-06
  • 2019-03-14
  • 2014-12-20
相关资源
最近更新 更多