【问题标题】:HikariCP/Apache DBCP2 and PgBouncerHikariCP/Apache DBCP2 和 PgBouncer
【发布时间】:2019-10-28 02:41:16
【问题描述】:

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

【问题讨论】:

标签: hikaricp apache-commons-dbcp pgbouncer


【解决方案1】:

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

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

HikariCP 和 PgBouncer 之间的空间不再是数据库连接世界,而是 TCP 连接,在同一个数据中心专门构建成本要低得多,并且不需要额外的内存和 CPU 来构建。

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

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

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

【讨论】:

  • 我应该在 bean 声明中使用什么样的数据源类?例如` ...`
  • 这是一个好点;基本上你在这里写的都是真的,但是 Spring 中的 DataSource 实现似乎没有其他选择,它实际上不会在每次与 PgBouncer 通信时创建新的 DB 连接,与 Hikari + PgBouncer 相比,这会导致性能极度下降。您对如何解决这个问题有什么建议吗?
猜你喜欢
  • 2023-02-22
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2019-07-06
  • 2018-12-17
  • 1970-01-01
相关资源
最近更新 更多