Configuración de Puma Cluster en Heroku
Necesito ayuda con mi configuración de Puma (Multi-Thread + Multi-Core Server) en mi aplicación RoR4 Heroku. Los documentos de Heroku que no están del todo actualizados. Seguí este:Concurrencia y conexiones de base de datos para la configuración, que no menciona la configuración de un Cluster, por lo que tuve que usar los dos tipos juntos (con hilos y multinúcleo).
Mi configuración actual:
./Procfile
web: bundle exec puma -p $PORT -C config/puma.rb
./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
Preguntas:
a) ¿Necesito la configuración before_fork / after_fork como en Unicorn, ya que los trabajadores del Cluster están bifurcados?
b) ¿Cómo afino el número de hilos según mi aplicación? ¿Cuál sería la razón para dejarlo caer? / ¿En qué casos haría una diferencia? ¿No está optimizado 0:16?
c) La base de datos Heroku permite 500 conexiones. ¿Cuál sería un buen valor para DB_POOL en función del subproceso, el trabajador y el conteo de dinamómetro? - ¿Cada subproceso por trabajador por dinamo requiere una única conexión de base de datos cuando se trabaja en paralelo?
En general: ¿Cómo debería ser mi configuración para la concurrencia y el rendimiento?