设置Sidekiq:Heroku上的并发

我无法弄清楚Heroku上的并发是如何工作的,以及如何设置最佳:concurrency Sidekiq的:concurrency

这是设置 –

 Puma Web Server 2 workers 5 threads Heroku Dynos 8 web dynos 2 "worker" dynos (These will run Sidekiq, not to be confused with Puma Workers) DB Connections 120 Max Connections Allowed by Postgres 5 Active Record Pool Size (default) ?? Sidekiq :concurrency value 

每个Puma工作者都可以使用默认的5个ActiveRecord DB连接(这对于每个有5个线程的连接很好)。 由于每个Web Dyno中有2个这样的Puma工作者,因此每个Web Dyno最多可以使用10个连接。 在所有8个Web dynos中,它们占用了80个连接

这将使得运行Sidekiq的2个dynos使用120-80 = 40个连接。 假设每个dyno上都运行一个Sidekiq进程(这是真的吗?),每个Sidekiq进程最多可以使用20个连接 (即set :concurrency 20

  1. 那个逻辑是正确的,还是我误解了这些过程如何在动态游戏上运行?

  2. Sidekiq进程是否受到ActiveRecord连接池限制为5的任何限制? 如果是,听起来像设置为20是没用的,因为它一次最多只能使用5个连接。

谢谢您的帮助!

你的逻辑听起来不错,但有几个笔记。

Puma不会在所有5个线程上不断推送到Sidekiq,所以你可以使用较低的值,例如5个线程共享2个连接:

 Sidekiq.configure_client do |config| config.redis = { size: 2 } end 

Sidekiq并发是工作线程的数量,而不是连接。 您希望显式限制连接池大小:

 Sidekiq.configure_server do |config| config.redis = { size: 20 } end 

默认情况下,Sidekiq的连接池大小为(并发+ 2),但20个连接应该可以正常使用25的默认并发。