HikariCP/Apache DBCP2 和 PgBouncer

Rad*_*anu 4 apache-commons-dbcp pgbouncer hikaricp

在使用 HikariCP(或 Apache DBCP2)的 Spring 应用程序中切换到 PgBouncer 后,是否需要为 HikriCP(或 Apache DBCP2)端进行额外配置?

Bas*_*usa 6

如果您使用的是 PgBouncer,那么您绝对不需要 HikariCP。

道理很简单,数据库连接池的发明是为了保护数据库免受建立数据库连接并将其拆除到服务器的巨大内存和性能成本(数据库连接不是TCP连接,它远不止于此)。数据库连接池通过重用已经建立的后端连接来实现这一点。这已经通过 PgBouncer 实现了。

HikariCP和PgBouncer之间的空间不再是一个Database连接世界,而是一个TCP连接,在同一个数据中心内专门构建起来便宜很多,而且不需要额外的内存和CPU来构建。

事实上,在 PgBouncer 前使用 HikariCP 就像使用 HTTP 连接池在 NGINX Web 服务器前重用 HTTP 连接。我认为没有人会觉得有用。

此外,为应用程序设置 Hikari 连接池将限制它在负载较重时可以使用的最大连接数。因此,假设您有微服务 A、微服务 B 和微服务 C。假设微服务 A 需要数据库的高吞吐量,而 B 和 C 是轻负载吞吐量。在每个微服务上使用池大小为 10 的 HikariCP 只会完全为微服务 A 制造瓶颈,并且需要您进行一些性能优化练习以时不时地调整池大小,这是完全没有必要的。

免责声明:我很好奇任何反对我刚才提到的内容的反驳论点。

  • 这是个好的观点; 基本上你在这里写的是真的,但是 Spring 中的 DataSource 实现似乎没有其他选择,每次与 PgBouncer 通信时实际上不会创建新的数据库连接,这导致与 Hikari + PgBouncer 相比性能极度下降。您对如何解决这个问题有什么建议吗? (2认同)