到目前为止,根据我的经验,我已经看到pgbouncer在多客户端,单DBMS,单DB场景中使用:例如,许多运行相同应用程序的主机连接到单个DBMS主机上的相同数据库,pgbouncer有助于减少DBMS上打开的连接数量;如果没有pgbouncer,我们将有P x no-of-client-hosts连接(其中P是通用客户端主机上单个应用程序打开的连接数)。
现在我面临着一个不同的场景,我想知道,在深入文档之前,如果pgbouncer也可以在这里帮助我。
我有一个主机A,其中运行着一个“多租户”应用程序。这个应用程序连接到一个DBMS主机(可以是同一个主机A,也可以是不同的主机,我认为这不是重点)。每个租户都通过连接池**(假设为P)连接到同一DBMS中自己的数据库**(使用pgsql uri配置的应用程序端)。
所以这里我有一个单一的客户端,多租户,单一的DBMS,多DB场景。
由于租户的数量可能有数百个,即使P为5个连接,到DBMS的连接总数也可能很容易达到数千个。
请注意,查询吞吐量是最小的。
可以将pgbouncer配置为最小化DBMS上的打开连接吗?
我试图弄清楚一个配置,但是,可能我错了,dbms上的每个数据库都需要在pgbouncer.ini中“声明”。这将不允许我在没有pgbouncer重新配置情况下动态添加租户。我说的对吗
2条答案
按热度按时间4xrmg8kj1#
如果这数百个数据库都在同一个集群中,那就是一个失败的设计。每个数据库需要一个连接池,所以即使连接池很小,最终也会有数百或数千个连接,这对性能不利。
这不是pgBouncer的限制,而是PostgreSQL的本质:数据库连接被绑定到某个数据库。
你应该重新设计应用程序。也许几个租户可以共享一个数据库。
mbjcgjjk2#
请注意,查询吞吐量是最小的。
你需要游泳池吗?只要关闭每一个连接,当你完成它。如果你一秒钟要建立数百次连接,那么建立连接的代价是昂贵的,但如果你只做最少的几次,代价就不会很高。
我试图弄清楚一个配置,但是,可能我错了,dbms上的每个数据库都需要在pgbouncer.ini中“声明”。这将不允许我在没有pgbouncer重新配置情况下动态添加租户。我说的对吗
你好像不对。参见
* = host=foo
线附近的the docs。(这仍然不是一个好主意)