2013-05-01 236 views
0

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

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

我想出了这个解决方案:

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

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

谢谢你的回答!

+0

如果多个用户请求相同的域名会怎么样? – 2013-05-01 12:16:10

+0

我希望我没有太多简化这个问题......但是当然,这个应用程序是(并且将会)运行多次(多进程)并且是线程化的。 – JoshuaBoshi 2013-05-01 12:20:28

回答

1

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

这是个好主意吗?

嗯,我已经使用在生产类似的系统,其中有应用的n实例,但每个实例都可以服务于任何客户,基于HTTP Host头,而且它工作得很好。

由于客户数量足够多,每个客户只需要一个实例可能不具有成本效益,甚至不实用。

+0

非常感谢你的回复。你有没有遇到过这个系统的意外问题?乍一看,对我来说似乎很简单。 – JoshuaBoshi 2013-05-01 12:43:44

+0

@JoshuaBoshi虽然这个系统的设计目的是从头开始工作,而不是稍后修改,但并不是真的。这主要是为了让稍后添加新客户变得微不足道,并且还可以更轻松地处理域重定向。如果没有看到来自您的实施的一些示例代码,我不能更具体。例如,如果上下文切换是昂贵的,例如加载设置以及建立数据库连接,那么您可能会遇到问题。我所能建议的就是尝试一下,看看它的工作效果如何。 – Aya 2013-05-01 12:49:30

+0

对,我应该早点问这个问题:)但我想,这不会是这样的问题。我将使用sqlalchemy的连接池并将其他内容(如设置)保存在内存中(对于每个客户),因此上下文切换成本应该最小。非常感谢你! – JoshuaBoshi 2013-05-01 13:14:19