0

我正在利用 AWS 服务实现一项功能

摘要:我有一个 lambda 可以访问 RDS 中的 Postgres 数据库。不是直接连接到数据库,而是按照架构上的建议访问代理端点。我生成 IAM 令牌没有问题,它在创建 Sequelize 连接时用作密码。

问题:最初我没有使用 rds-proxy。在这种情况下,我利用 lambda 的执行上下文来重用连接。在这里,我没有关闭 lambda 中的连接(它工作正常 - 在这里直接连接到数据库)。但是在代理实现中,在不关闭连接的情况下,代理对数据库的连接会出现很大的峰值,并且正在测试负载限制。以 10req/sec 我看到 90 个连接

关闭 lambda 中的连接后,连接将大大减少到 <20。

但是我在单个 lambda 执行期间嵌套了数据库查询,并且很难重写这些功能。

下面是为创建连接而编写的 Sequelize 连接对象

const { Sequelize } = require('sequelize');
let proxyToken = '***latest iam token with 15min validity***';
let additionalConnectionDetails = {
host: process.env.PROXY_ENDPOINT,
schema: 'schemaname',
searchPath: 'searchpath',
dialect: 'postgres',
dialectOptions: {
    prependSearchPath: true,
    ssl: {
    require: true,
    rejectUnauthorized: false 
    }
},
// pool: {
//     max: 2,
//     min: 1,
//     acquire: 3000,
//     idle: 0,
//     evict: 120000
// },
// // maxConcurrentQueries: 100
}

sequelize_connection = new Sequelize(dbCreds.app, dbCreds.userName, proxyToken, additionalConnectionDetails);
console.log('sequelize', sequelize_connection)
return sequelize_connection

我尝试使用连接池,但它对 lambda 并没有太大的影响。

如何在不关闭连接的情况下减少建立的连接数。任何建议表示赞赏。提前致谢。

4

0 回答 0