【问题标题】:postgresql and node with redis still making connection to db pool?带有redis的postgresql和节点仍然连接到数据库池?
【发布时间】:2021-11-27 01:03:29
【问题描述】:

我有点卡在这里,希望能得到一些帮助。

我的节点应用程序有一个单独的模块,我在其中连接到 postgres 并按原样导出池

const {Pool,Client} = require('pg');

const pool = new Pool({
    user: process.env.POSTGRES_USER,
    host: process.env.POSTGRES_URL,
    database: process.env.POSTGRES_DATABASE,
    password: process.env.POSTGRES_PASSWORD,
    port:  process.env.POSTGRES_PORT,
    keepAlive: 0,
    ssl:{ rejectUnauthorized: false,
        sslmode:require},
    connectionTimeoutMillis: 10000, // 10 seconds
    allowExitOnIdle:true,
    max: 10
});
pool.connect()
    .then(() => console.log('postgress connected'))
    .catch(err => console.error(err))

module.exports  =  pool

在我的路由上,我有 redis 缓存作为中间件,这可以按预期工作并且可以确认它正在由 redis 提供服务,当请求被缓存时路由中的逻辑不会运行,但是我正在做一些负载测试看看一切如何处理尖峰,并注意到我开始从 postgres 收到错误

Error: timeout exceeded when trying to connect

我在谈论最大连接数等时也遇到了错误。

我尝试增加最大池连接,但在运行一些较大的负载测试时似乎仍然出现此错误。

我的问题是,如果应该共享连接,为什么 PG 会尝试连接?另外,如果请求被缓存,为什么还要尝试连接?

任何帮助将不胜感激!

【问题讨论】:

    标签: node.js postgresql


    【解决方案1】:

    显然,您的一些压力测试用例缺少 redis 缓存。您还没有显示任何与此相关的代码,所以还能说什么?

    您显示的错误不是由 PostgreSQL 生成的,它是由节点的 'pg' 模块生成的。您将其配置为仅允许 10 个同时连接。如果要求更多,他们必须排队等待。而且您还将其配置为仅等待 10 秒,然后再出现错误,这正是您所看到的。

    您含糊地提到了其他错误,但如果您需要帮助,则必须与我们分享实际的错误消息。

    系统似乎按设计运行。您进行了压力测试以了解会发生什么,并且您已经看到会发生什么。

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多