小编V.D*_*zel的帖子

MongoDB Atlas 和 AWS Lambda 之间的间歇性超时问题

我对这个问题有点绝望:我们正在为我们的 API 运行 AWS Lambda,该 API 与 MongoDB Atlas (M20) 上的 MongoDB 集群通信。为了防止在每次 Lambda 调用时创建新连接,我们遵循以下模式:https : //docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/在 Lambda 的生命周期内缓存连接容器。我们对它略有不同:

async function getProdDB() {
  const url = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASSWORD}@xxxxx-yyyy.zzzzz.net?retryWrites=true`

  if (!cachedDb || !cachedDb.serverConfig.isConnected()) {
    cachedClient = await MongoClient.connect(
      url,
      { useNewUrlParser: true, useUnifiedTopology: true }
    )
    cachedDb = cachedClient.db(process.env.DB_NAME)
  }

  return cachedDb
}
Run Code Online (Sandbox Code Playgroud)

这也检查我们是否已连接。现在这在 98% 的情况下都有效,但我们的 Lambda 调用时不时会超时。我们试图诊断一下:

  1. 我们将 Lambda 的超时限制从 6 秒更改为 30 秒/60 秒,并且 Lambda 函数仍然会时不时地超时。Mongo 从不抛出错误,由于 TimeoutError 总是由 Lambda 完成调用
  2. 在成功和不成功调用的情况下,cachedDB.serverConfig.isConnected()返回 rue`
  3. 导致超时的业务逻辑部分是对 MongoDB 本身的查询,常见的 …

mongodb amazon-web-services node.js aws-lambda

6
推荐指数
1
解决办法
604
查看次数