繁体   English   中英

并发数据库连接Heroku Unicorn rails app

[英]Concurrency database connections Heroku Unicorn rails app

我在Heroku上运行一个rails应用程序。

我有一个dyno。 我正在使用Hobby Basic数据库,每月9美元,连接限制为20。

我的应用程序在Unicorn上运行。 但是,当进行多个数据库调用时,它仍然非常慢。

这是我在unicorn.rb文件中的内容:

# config/unicorn.rb
worker_processes 3
timeout 30
preload_app true

before_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

本文讨论管理并发连接: https//devcenter.heroku.com/articles/concurrency-and-database-connections

但是,我仍然感到困惑。 使用我当前的设置,如何同时允许多个数据库连接? 在我的数据库允许的最大连接数(20)? 如果有人在Heroku上处理扩展rails应用程序的某些人可能会指出我正确的方向,我将非常感激。

当您使用有限的业余爱好计划时,假设数据库可能成为瓶颈是公平的。 您可以采取一些优化措施来帮助改善连接池(如下面的代码所示)。 然而,当这确实是瓶颈时,你会发现经常发现超时,而不仅仅是缓慢。 为了更好地了解问题所在,我建议您接下来添加NewRelic插件。

NewRelic Stark计划(推荐) - 或者Wayne计划(在我看来有点太有限)是免费的,可以帮助您查看应用程序性能和跟踪错误。 您可能会发现dyno排队时间和内存消耗导致您获得的速度变慢,并且有一些方法可以在不弄乱数据库连接的情况下提高。 改善代码响应时间并限制数据库命中(通过缓存)是需要研究的好方法。

话虽如此,我建议您将以下代码添加到您的unicorn文件中,如您提到的文章中所述。

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
  end

  # other settings
  if defined?(ActiveRecord::Base)
    config = ActiveRecord::Base.configurations[Rails.env] ||
            Rails.application.config.database_configuration[Rails.env]
    config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
    config['pool']            =   ENV['DB_POOL'] || 2
    ActiveRecord::Base.establish_connection(config)
  end
end

Heroku提供托管的Postgres数据库。 不同的分层数据库具有不同的连接限制。 Starter Tier“Dev”和“Basic”数据库限制为20个连接。

和一个工人所需的连接。 如果你有超过20的工人,你可以像pgbouncer一样使用连接池处理问题。 如果您使用pgbouncer,则在您的环境中使用事务池模式,以便服务器可以在工作程序之间重用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM