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工作人员一个.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...