Pgbouncer 在具有多个 DB 的多租户应用程序中的使用场景

问题描述 投票:0回答:1

到目前为止,根据我的经验,我已经看到 pgbouncer 用于多客户端、单个 DBMS、单个数据库场景:即许多主机运行相同的应用程序,连接到单个 DBMS 主机上的相同数据库,并且 pgbouncer 有助于减少 DBMS 上打开的连接数量;如果没有 pgbouncer,我们将拥有 P x 无客户端主机连接(其中 P 是通用客户端主机上单个应用程序打开的连接数)。

现在我面临着一个不同的场景,我想知道,在深入了解文档之前,pgbouncer 是否也可以在这里帮助我。

我有一个主机 A,其中正在运行“多租户”应用程序。该应用程序连接到单个 DBMS 主机(可以是同一主机 A 或不同的主机,我认为这不是重点)。 每个租户都通过连接池(比方说 P)连接到同一 DBMS 中自己的数据库(使用 pgsql uri 配置的应用程序端)。

所以这里我有一个客户端、多个租户、单个 DBMS、多个数据库场景。

由于租户数量可能达到数百个,即使 P 为 5 个连接,DBMS 的总连接数也很容易达到数千个。

请注意,查询吞吐量很小。

可以配置 pgbouncer 以最小化 DBMS 上的打开连接吗?

我试图找出一个配置,但是,可能我错了,dbms 上的每个数据库都需要在 pgbouncer.ini 中“声明”...这不允许我在没有 pgbouncer 重新配置的情况下动态添加租户。 我说得对吗?

database postgresql multi-tenant pgbouncer
1个回答
0
投票

如果这数百个数据库都在同一个集群中,那就是一个错误的设计。每个数据库都需要一个连接池,因此即使该池很小,您最终也会有数百或数千个连接,这对性能不利。

这不是 pgBouncer 的限制,而是 PostgreSQL 的本质:数据库连接与某个数据库绑定在一起。

您应该重新设计应用程序。也许多个租户可以共享一个数据库。

© www.soinside.com 2019 - 2024. All rights reserved.