我在OSE上运行了一个Rails应用程序,5个pod,每个pod有1个容器。 Rails应用程序使用Puma Web服务器和默认线程设置(min:0,max:16)。在我的database.yml中,我定义了一个10的连接pool:
。
我想知道我的最大PG连接占用量是多少?
我目前的理论是:
5 pods
x 1 container
x 16 threads
x 10 connection pool
= 800 possible PostgreSQL connections
。
但是,我在质疑16个Puma线程中的每一个是否都来自同一个PG连接池?在这种情况下,公式将是:
5 pods
x 1 container
x 10 connection pool
= 50 possible PostgreSQL connections
。
(当然,如果这个数学是正确的,那么使用Puma 16线程将是一个问题,因为我的应用可能请求比可提供的更多连接,每个线程1个,比池提供的多6个。)
有人能指出我关于这个问题的最终文件吗?谢谢!
答案 0 :(得分:1)
如果连接池在进程内并跨线程发送数据库连接,如果所有数据库连接都忙,则线程在等待,那么第二个是正确的。如果没有,第一个。无论哪种方式,它实际上可能会更糟。如果您正在使用滚动部署,则在重新启动时可能会有一个其他pod处于活动状态。
看一下在PostgreSQL数据库实例前面使用pgbouncer(https://pgbouncer.github.io/)。我的理解是,它提供了额外的灵活性,能够管理数据库连接池而无需在您的应用程序中执行任何操作,而是在pgbouncer中处理。