Мне нужна помощь в моей конфигурации Puma (Multi-Thread + Multi-Core Server) в моем приложении RoR4 Heroku. Документы Heroku об этом не совсем актуальны. Я последовал за этим: Concurrency и подключения к базе данных для конфигурации, в которой не упоминается конфигурация кластера, поэтому мне пришлось использовать оба типа вместе (потоковые и многоядерный).
Моя текущая конфигурация:
./PROCFILE
web: bundle exec puma -p $PORT -C config/puma.rb
./конфигурации/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
Вопросы:
a) Нужна ли мне конфигурация before_fork/after_fork, как в Unicorn, так как рабочие кластера раздвоены?.
б) Как настроить количество потоков в зависимости от моего приложения - в чем причина его отказа?/В каких случаях это может иметь значение? Не оптимизировано ли 0:16?
c) База данных Heroku позволяет 500 подключений. Что было бы хорошим значением для DB_POOL в зависимости от потока, рабочего и динамического счета? - При каждом параллельном работе каждый поток на одного рабочего на динамод требует единственного соединения с БД?
В целом: как должна выглядеть моя конфигурация для concurrency и производительности?