【问题标题】:Python web app deployment of multiple app instances多个应用实例的 Python Web 应用部署
【发布时间】:2013-04-25 10:27:06
【问题描述】:

我有使用 uwsgi 和 nginx 部署的 python web 应用程序 (WSGi)。我将把这个应用程序提供给许多用户(客户)——每个用户都有自己的设置、数据库、模板、数据文件夹等。应用程序的代码可以共享。

我最初的想法是每个客户都有一个 uwsgi 进程。但这是一种相当浪费的方法,因为目前该应用程序有大约 100MB 的内存占用。我预计这些实例中的大多数大部分时间都处于休眠状态(每天最多 500 个请求)。

我想出了这个解决方案:

应用程序将被修改为一个实例可以为更多客户服务。根据请求的域,它将为该客户准备(加载)正确的设置、数据库连接等。

这是个好主意吗?还是我应该专注于降低内存占用?

感谢您的回答!

【问题讨论】:

  • 如果多个用户请求同一个域怎么办?
  • 我希望我没有过多地简化问题......但当然,该应用程序是(并且将会)运行多次(多进程)并且是线程化的。

标签: python web-applications deployment web-deployment


【解决方案1】:

应用程序将以这种方式进行修改,一个实例可以用于 更多的客户。根据请求的域,它将准备(加载) 该客户的正确设置、数据库连接等。

这是个好主意吗?

嗯,我在生产中使用了一个类似的系统,其中有应用程序的 n 实例,但每个实例都可以基于 HTTP Host 标头为任何客户服务,并且运行良好。

鉴于客户数量足够多,每个客户拥有一个实例可能不划算,甚至不实用。

【讨论】:

  • 非常感谢您的回复。您是否遇到过此系统的任何意外问题?乍一看,这对我来说似乎很容易实现。
  • @JoshuaBoshi 并非如此,尽管系统从一开始就设计为以这种方式工作,而不是稍后进行修改。这主要是为了让以后添加新客户变得微不足道,也让处理域重定向变得更容易。如果没有从您的实现中看到一些示例代码,我真的不能更具体。例如,如果上下文切换很昂贵,例如加载设置并建立您提到的数据库连接,那么您可能会遇到问题。我所能建议的就是尝试一下,看看效果如何。
  • 对,我应该早点问这个问题的 :) 但我认为,这不会是一个问题。我将使用 sqlalchemy 的连接池并将其他东西(如设置)保存在内存中(对于每个客户),因此上下文切换成本应该是最小的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2014-05-26
  • 2012-05-06
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2012-02-29
相关资源
最近更新 更多