我正在利用 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 并没有太大的影响。
如何在不关闭连接的情况下减少建立的连接数。任何建议表示赞赏。提前致谢。