Heroku Postgres 连接限制是什么?

9
我正在开发一个连接到Heroku PostgreSQL数据库的网站,使用免费的Hobby Dev计划。根据Heroku的说明,这意味着"最多20个连接"。这是否意味着最多只能有20个人使用该网站,并由后端数据库收集数据?如果连接数超过了该级别,会发生什么?付费的计划最多支持500个最大连接数,但即使在企业级别使用,这似乎也是低的。希望您能对此有所了解并给予更详细的解释。之前有类似问题,但答案对我来说不是很清楚。
谢谢!
参考:什么是数据库连接限制?
2个回答

2
PostgreSQL可以配置限制数据库的同时连接数。Heroku带有具有连接限制的计划。 "Hobby"计划带有20个连接,而标准计划从120个连接开始。当我们开始开发和测试时,特别是自动化测试时,业余计划会引发PG :: Error错误(致命:角色“xxxxxxx”的连接太多)。如果我们使用Heroku CLI检查连接,我们会得到: Heroku CLI 即时解决方案是使用命令杀死所有连接:
$ heroku pg:killall --app <app name>

这不是一个永久的解决方案。我们在这个网站上也遇到了同样的问题。我们尝试了互联网上提供的许多解决方案,特别是在Stack Overflow上。
知道如何计算所需连接数非常重要。Heroku文档中写道...
假设您没有在应用程序代码中手动创建线程,您可以使用Web服务器设置来指导所需的连接数。Unicorn Web服务器使用多个进程进行扩展,如果您没有在应用程序中打开任何新线程,则每个进程将占用1个连接。因此,在您的独角兽配置文件中,如果将worker_processes设置为3,就像这样:
worker_processes 3
那么您的应用程序将使用3个工作进程的连接。这意味着每个dyno都需要3个连接。如果您处于“Dev”计划中,您可以扩展到6个dynos,这将意味着18个活动数据库连接,最多可达20个。但是,连接可能会进入错误或未知状态。
解决方案-使用PgBouncer限制连接
最简单的解决方法是使用PG bouncer限制连接。对于许多框架,您必须禁用准备语句才能使用PgBouncer。然后向您的应用程序添加PgBouncer构建包。
$ heroku buildpacks:add https://github.com/heroku/heroku-buildpack-pgbouncer

输出将会是以下内容:

构建包已添加。下一个发布将使用:

  1. heroku/python
  2. https://github.com/heroku/heroku-buildpack-pgbouncer 运行 git push heroku master 以使用这些构建包创建新的发布版本。现在,您必须修改 Procfile 文件以启动 PgBouncer。在 Procfile 文件中,在 web 条目的开头添加命令 bin/start-pgbouncer-stunnel。如果您的 Procfile 文件如下所示:

web: gunicorn .wsgi:application --worker-class gevent 请将其更改为:

web: bin/start-pgbouncer-stunnel gunicorn .wsgi:application --worker-class gevent 将结果提交到 git,测试一个暂存应用程序,然后部署到生产环境。

在部署过程中,您将会看到:

OUTPUT


0

根据您使用的Web框架,这可能会有所不同,但是:

通常每个服务器进程最多只有一个数据库连接。这可能是每个正在运行的Web或工作Dyno一个连接。如果您的框架每个dyno运行多个线程/工作进程,则可以有更多连接(大多数都是如此)。

然后,仅在实际请求应用程序时才使用这些连接,而不是用户仅查看页面时。

当您运行异步框架(例如node.js或python中的greenlets)时,情况会变得更加复杂。

简单的方法:进行测试。您将在Heroku界面中看到当前连接计数。有一些框架和服务可以让您测试并发用户。

更容易的方法(因为它在业余计划上运行,似乎是业余应用程序):只需查看何时出现故障 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接