Mongodb 由于数据库连接,Lamda上的初始请求速度较慢

Mongodb 由于数据库连接,Lamda上的初始请求速度较慢,mongodb,aws-lambda,amazon-dynamodb,aws-documentdb,Mongodb,Aws Lambda,Amazon Dynamodb,Aws Documentdb,当我的lambda函数被激活时,它将连接到我的MongoDB Atlas实例,从而显著降低响应速度1000-2000ms 我可以缓存DB连接,但只有在最后一次请求之后很快发出请求时,缓存才会持续,并且不会持续一小时后发出的请求 是否有任何本机AWS DB可以避免此问题,并且每次都允许即时连接?(documentDB、DynamoDB等) 代码 mysql连接也存在同样的问题,当lambda函数冷启动时,缓存的变量就会消失。 我唯一的解决方案是通过函数预热保持缓存的活动状态。 只需设置一个周期性c

当我的lambda函数被激活时,它将连接到我的MongoDB Atlas实例,从而显著降低响应速度1000-2000ms

我可以缓存DB连接,但只有在最后一次请求之后很快发出请求时,缓存才会持续,并且不会持续一小时后发出的请求

是否有任何本机AWS DB可以避免此问题,并且每次都允许即时连接?(documentDB、DynamoDB等)

代码


mysql连接也存在同样的问题,当lambda函数冷启动时,缓存的变量就会消失。 我唯一的解决方案是通过函数预热保持缓存的活动状态。 只需设置一个周期性cron作业,每5-15分钟触发一次函数,请放心,它将始终处于空闲状态。
您也可以检查此项:

您正面临冷启动。这与数据库连接无关

为了使lambda功能保持温暖,您可以设置CloudWatch事件,定期触发lambda(通常每5分钟一次就足够了)

另外,如果您使用的是
DocumentDB
,则必须将
Lambda
放入
VPC
。它需要设置
ENI
(弹性网络接口),因此增加了启动时间。例如,如果您可以避免使用VPC,那么它可以为您带来一些性能优势

更多信息:


你能发布你的代码吗?@danimal添加了JS/TS code平均空闲时间是多少,之后连接再次花费太长的时间?大约1500毫秒,这让应用程序感觉很慢。我目前没有太多的请求,因此我使用lambda。问题是大多数请求可能是冷启动,并且不使用缓存。请求之间的1500毫秒(1.5秒)不足以实现冷启动。通常情况下,它会在5分钟后发生。啊,真遗憾,我希望通过切换到DynamoDB它会修复它
let response
import { MongoClient } from 'mongodb'
let cachedDb = null
const uri =
    'mongodb+srv://XXXX'

function connectToDatabase(uri) {
    if (cachedDb && cachedDb.serverConfig.isConnected()) {
        console.log('=> using cached database instance')
        return Promise.resolve(cachedDb)
    }
    const dbName = 'test'
    return MongoClient.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true }).then(
        client => {
            cachedDb = client.db(dbName)
            return cachedDb
        }
    )
}

export async function lambdaHandler() {
    try {
        const client = await connectToDatabase(uri)
        const collection = client.collection('users')

        const profile = await collection.findOne({ user: 'myuser' })

      response = profile
    }

    } catch (err) {
        console.log(err)
        return err
    }
    return response
}