PostgreSQL 的客户端连接池与外部连接池有何优缺点?

Joh*_*ter 4 postgresql database-connection connection-pooling load-balancing

给定一个针对其预期负载进行合理配置的PostgreSQL 数据库,哪些因素将有助于选择外部/中间件连接池(即 pgBouncer、pgPool)与客户端连接池(HikariCP、c3p0)。最后,在什么情况下您希望同时应用客户端和外部连接池?

根据我的经验和理解,外部池的缺点是:

  • 额外的故障点(包括从安全角度来看)
  • 额外的延迟
  • 部署的额外复杂性
  • 用户凭证的安全复杂性

在研究这个问题时,我遇到过同时使用客户端和外部池的情况。这样部署的动机是什么?在我看来,这是为了获得我似乎错过的收益而加剧了大多数缺点。

Lau*_*lbe 5

通常,由于您详细说明的原因,应用程序端的连接池是一件好事。外部连接池仅在以下情况下才有意义

  • 您的应用程序服务器没有连接池

  • 您有多个(许多)应用程序服务器实例,因此无法有效限制应用程序服务器中连接池的数据库连接数