Django上的多个站点

时间:2013-09-17 09:18:39

标签: python django memory architecture

我正在尝试运行大量共享约90%代码的网站。它们只是用于查询API并返回结果。它们将具有一个共同的用户库/数据库,但配置略有不同,并且将具有不同的CSS(可能甚至是不同的模板)。

我的初衷是将它们作为具有公共库的单独应用程序运行,但我已经阅读了有关它们可以从单个django实例运行的站点框架,这可能有助于减少内存使用。

https://docs.djangoproject.com/en/dev/ref/contrib/sites/

我的问题是,网站框架是否是解决此类问题的正确方法,并且它在运行单独的应用程序方面具有真正的好处。最初我以为是,但不是我想的。我听说过以下内容:

  

您的SITE_ID在settings.py中设置,因此要有多个   站点,你需要多个settings.py配置,这意味着   多个不同的进程/实例。你当然可以分享   它们之间的代码库,但每个站点都需要一个专门的工作者/   WSGIDaemon为网站服务。

如果每个站点都需要运行UWSGI实例,这有效地消除了在一个引擎盖下运行多个站点的任何好处。

系统的其他想法:

我不知道采取什么方式。

2 个答案:

答案 0 :(得分:2)

恕我直言,归结为可能出现的变化程度,影响是什么,以及发生的可能性。例如:

  

他们将拥有一个共同的用户群/数据库

您是说同一个人使用所有网站?如果是这样,那么风险概况将不如不同的人(比如说不同的组织)那么严重。基本上(通过良好的适当架构)你想要解耦事物,这样当一件事发生变化时,它不会对其他一切产生巨大的影响。

如果您运行相同的实例,那么一次更新每个站点很容易(比如你需要在基本系统上执行维护补丁),但另一方面可能会咬你(一组)用户很高兴能够进行更改,但其他人不会 - 因为功能更改或应用修补程序所需的停机时间(例如)。

在不同的实例中运行相同的代码库是一个更大的维护开销,但消除了与管理更改相关的大量风险;然后谈话成为如何最有效地维护同一事物的许多实例之一,而不是映射每次进行更改时相关的风险。

答案 1 :(得分:2)

实际上,您可以在同一个WSGI实例下运行这两个(或更多)站点。 根据你的Django版本和你需要的功能,有一些缺点(比如使用threadlocals),但所有这2个解决方案都能很好地工作。

Django 1.8+:https://bitbucket.org/levit_scs/airavata

Django<:1.7:https://bitbucket.org/uysrc/django-dynamicsites/overview(但根据您的Django版本,它可能需要一些摆弄)

与Django站点框架相比,这两个应用程序添加的内容是能够根据域名轻松地在同一实例上提供站点。