ruby-on-rails – 我对Unicorn,Sidekiq和DB Pool大小的理解是否正确?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 我对Unicorn,Sidekiq和DB Pool大小的理解是否正确?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有独角兽,Sidekiq和Postgres设置.

我正在尝试了解正确的配置,以便我不会达到最大数据库连接限制.在Opsworks中,m1.small Postgres RDS实例最多可以有121个连接.

我有一个db池大小为5.

考虑这个. Sidekiq和独角兽是自己的过程.因此,每个进程的db池大小为5.如果我在这里的理解是错误的,请更正.

如果我有5个独角兽进程,那意味着5 * 5 = 25的数据库连接

现在这是我稍微困惑的部分,因为Sidekiq是多线程的.如果Sidekiq的并发性为5.并且db池大小也设置为5.这是否意味着在给定时间的25个潜在db连接?

这意味着,对于一个实例,我可以有50个db连接?

解决方法

在Unicorn中,每个进程都建立了自己的连接池,所以如果你的数据库池设置是5,而你有5个独角兽工作,那么你最多可以有25个连接.但是,由于每个独角兽工作者一次只能处理一个连接,所以除非您的应用程序在内部使用线程,否则每个工作人员只会实际使用一个数据库连接.

在Sidekiq中,池中的连接在线程之间共享,因此您需要至少有一个连接可用于每个工作.如果你的并发性为5,那么你的池需要至少为5.

池大小大于1意味着每个Unicorn工作人员都可以访问不能使用的连接,但实际上并不会打开连接,所以这并不重要.

您的应用程序需要的实际连接总数,除非您在应用程序代码中使用线程(并且它们不共享数据库连接),是每个Sidekiq工作人员一个,每个Unicorn工作人员一个.

猜你在找的Ruby相关文章