相关疑难解决方法(0)

Heroku上的Puma Cluster配置

我在RoR4 Heroku应用程序上配置Puma(多线程+多核服务器)需要一些帮助.Heroku上的文档并不是最新的.我遵循了这个:配置的并发和数据库连接,没有提到集群的配置,所以我不得不同时使用这两种类型(线程和多核).

我目前的配置:

./Procfile

web: bundle exec puma -p $PORT -C config/puma.rb
Run Code Online (Sandbox Code Playgroud)

./config/puma.rb

environment production
threads 0,16

workers 4
preload_app!

on_worker_boot do
  ActiveRecord::Base.connection_pool.disconnect!

  ActiveSupport.on_load(:active_record) do
    config = Rails.application.config.database_configuration[Rails.env]
    config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
    config['pool']              = ENV['DB_POOL'] || 5
    ActiveRecord::Base.establish_connection
  end
end
Run Code Online (Sandbox Code Playgroud)

问题:

a)我是否需要像Unicorn一样的before_fork/after_fork配置,因为群集工作者是分叉的?
b)如何根据我的应用程序调整我的线程数 - 将它放下的原因是什么?/在什么情况下它会有所作为?是不是已经优化了0:16?
c)Heroku数据库允许500个连接.根据线程,工作线程和动态计数,DB_POOL的值是多少? - 并行工作时,每个dyno的每个工作线程的每个线程是否都需要唯一的DB连接?

一般来说:我的配置应该如何看待并发性和性能?

postgresql ruby-on-rails heroku unicorn puma

18
推荐指数
1
解决办法
6483
查看次数

设置Sidekiq:Heroku上的并发

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

这是设置 -

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谢谢您的帮助!

concurrency multithreading ruby-on-rails heroku sidekiq

4
推荐指数
1
解决办法
3385
查看次数