设置 Sidekiq:Heroku 上的并发
Setting Sidekiq :concurrency on Heroku
我无法弄清楚并发在 Heroku 上的工作原理,以及如何为 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 worker 允许默认的 5 个 ActiveRecord DB 连接(这很好地对应每个有 5 个线程)。由于每个 Web Dyno 有 2 个这样的 Puma worker,每个 Web Dyno 最多消耗 10 个连接。在所有 8 个网络测功机中,它们占用 80 个连接
剩下 120 - 80 = 40 个连接将被 运行 Sidekiq 的 2 个测功机使用。假设每个 dyno 上有一个 Sidekiq 进程 运行ning(这是真的吗?),每个 Sidekiq 进程最多可以免费使用 20 个连接(即设置 :concurrency 20
)
这个逻辑正确吗,还是我误解了这些过程 运行 在 dynos 上的处理方式?
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),但对于默认并发数 25,20 个连接应该可以正常工作。
我无法弄清楚并发在 Heroku 上的工作原理,以及如何为 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 worker 允许默认的 5 个 ActiveRecord DB 连接(这很好地对应每个有 5 个线程)。由于每个 Web Dyno 有 2 个这样的 Puma worker,每个 Web Dyno 最多消耗 10 个连接。在所有 8 个网络测功机中,它们占用 80 个连接
剩下 120 - 80 = 40 个连接将被 运行 Sidekiq 的 2 个测功机使用。假设每个 dyno 上有一个 Sidekiq 进程 运行ning(这是真的吗?),每个 Sidekiq 进程最多可以免费使用 20 个连接(即设置 :concurrency 20
)
这个逻辑正确吗,还是我误解了这些过程 运行 在 dynos 上的处理方式?
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),但对于默认并发数 25,20 个连接应该可以正常工作。