【问题标题】:Advantage of PgBouncer with WildFly/Application Server connection pool?PgBouncer 与 WildFly/Application Server 连接池的优势?
【发布时间】:2017-05-10 22:08:24
【问题描述】:

许多应用程序服务器都集成了连接池,甚至可以将独立应用程序配置为使用 HikariCP、Apache DBCP 等。

那么当应用程序已经有连接池时,使用 PgBouncer 有什么好处呢?

我找到的最接近的答案是What are advantages of using transaction pooling with pgbouncer?,它没有提到使用另一个连接池,并提到优点是空闲会话的使用。

我主要使用配置了最小池大小、最大池大小、空闲超时的 WildFly...所以它基本上会在空闲连接不使用时删除它们(如果这是主要优势的话)。

这让我觉得 PgBouncer 不适合这种情况,我应该只继续使用我的应用程序服务器连接池。

顺便说一句,在事务池模式下,PgBouncer 不能使用命名的预处理语句,这看起来不像是一个性能明智的选择。

如果有优势的话,和wildfly连接池玩得好吗?

【问题讨论】:

  • pgBouncer 通常在您还想在主服务器和从服务器之间进行负载平衡时使用。如果你只连接到单个 Postgres 服务器,那么你在 app-server 中的一个连接池就足够了

标签: java postgresql jdbc wildfly pgbouncer


【解决方案1】:

如果你的应用服务器自带连接池,并且只有一个应用服务器连接数据库,最好使用集成连接池。

在这种情况下,pgBouncer 只是一个额外的组件,使架构更加复杂,并且您将承担应用服务器和 pgBouncer 之间所有连接的额外开销。

如果有多个应用服务器连接到同一个数据库,问题就不再那么简单了。如果只有两个或三个应用程序服务器,那么没有 pgBouncer 也可以过得很好。

连接到数据库服务器的应用程序服务器越多,您将拥有的数据库连接越多,这会使数据库处于危险之中:如果这些连接中有太多同时变得繁忙,您的数据库性能和响应时间将会下降,因为数据库已超载。 在这种情况下,pgBouncer 将通过限制与数据库的活动连接数来提供帮助。

【讨论】:

  • 是的,但这不能回答我的问题,假设我有 2 或 3 个应用程序服务器连接到数据库(与 db 相比,集群应用程序更容易),我仍然没有看到使用 PgBouncer 的优势,正如您所说,它只是一个使架构更加复杂的额外组件。
  • 你没有说你有多个应用服务器。我将编辑答案以对此发表评论。
  • 感谢 Laurenz 的编辑,但它仍然没有完全发挥优势,我可以限制应用服务器连接池中的最大连接数,所以我不明白这是怎么回事数据库处于危险之中,也许如果我根据负载动态启动应用程序服务器?再说一次,最好的特性是“事务池”,应该仔细测试它,因为它会破坏许多与会话相关的东西,并且会丢失命名的准备好的语句。
  • 看这里,如果你有 20 台应用服务器,每台都有一个 50 个连接的连接池,都指向同一个数据库,你最终可能会在数据库上有 1000 个连接,所有这些都可以决定同时运行语句。这将关闭数据库服务器。使用 pgBouncer,您可以减少与数据库的连接数,数据库将保持正常运行,并且某些应用程序线程将不得不等待连接可用。这种“节流”提高了系统的吞吐量和可用性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2015-01-06
  • 2012-09-16
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多