13

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

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

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

我的问题是,站点框架是否是解决此类问题的正确方法,并且与运行单独的应用程序相比,它是否具有真正的好处。起初我认为是,但我不这么认为。我听说过以下内容:

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

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

系统的替代想法:

我不知道该采取什么路线。

4

2 回答 2

3

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

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

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

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

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

于 2013-09-18T05:16:01.097 回答
2

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

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

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

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

于 2015-04-07T20:40:13.293 回答