Nie*_*ian 6 postgresql connection-pooling pgbouncer sidekiq apartment-gem
问题我有一个运行几百个sidekiq后台进程的rails应用程序.它们都连接到一个PostgreSQL数据库,它对提供250个连接并不十分满意 - 它可以,但如果所有sidekiq进程意外地向db发送查询,它就会崩溃.
选项1我一直在考虑在数据库前添加pgBouncer,但我目前无法使用它的事务模式,因为我高度依赖于search_path在每个作业处理的开头设置以确定哪个"国家"(PostgreSQL模式)工作(公寓宝石).在这种情况下,我将不得不使用基于会话的连接池模式.然而,据我所知,这会要求我在每次作业处理后断开连接,将连接释放回池中,这样做性能真的很高,不是吗?我错过了什么吗?
选项2使用基于应用程序层的连接池也是一个选项,但是我不确定我如何能够使用sidekiq为PostgreSQL做到这一点?
选项3我没有想到的东西?
选项 1:你是对的,会话需要你断开并重新连接,这会增加开销。成本有多高取决于访问模式,即连接/TCP 握手等占完成的总工作的比例以及您需要的延迟类型。绝对值得进行基准测试,但如果连接寿命很短,那么开销将非常明显。
选项 2/3:您可以限制或限制 sidekiq 作业的速率。这里有一些项目可以解决这个问题......
我从这里得到了以上内容
https://github.com/mperham/sidekiq/wiki/Related-Projects
如果您的应用程序每个进程必须有一个连接,并且您无法在更多线程可以使用连接的情况下分解它,那么它是 pgBouncer 或基于应用程序的连接池。连接池实际上会以某种方式限制或限制您的应用程序,以节省数据库。
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |