多租户Django应用程序

17 django multi-tenant

是否有人们使用Django创建多租户应用程序的常见模式.内置的"站点"框架似乎是一种选择.人们有成功的其他方法吗?

Van*_*ale 9

假设您为每个站点实例提供一个唯一的表,使用站点框架可以为"租户"提供安全保障.

另一方面,如果您拥有少量租户并且浪费大量服务器资源将是一个很大的麻烦,因为即使他们不使用,您也需要每个客户至少一个服务器进程系统.如果您拥有大量租户,那将不会那么麻烦,因为无论您的方法如何,您都将被迫自动化解决方案.

在几乎所有模型中放置租户外键都可以正常工作,Django的ORM可以轻松(更简单?)使用自定义管理器强制执行安全性.如果您开始受到大量用户的打击,那么缺点就是性能,因为没有简单的扩展方法.

如果你确实需要扩展,我认为最好的解决方案可能是两种方法的结合.每个模型都有一个租户外键,因此可以共享数据库,但是您可以在比Django更高级别开发一些机制来将客户路由到站点实例.这使得您可以将真正大租户放在他们自己的数据库上,并为他们正确调整资源(例如,适当数量的mod_wsgi守护程序,数据库连接数,正确大小的memcache池等),并且较小的租户共享公共资源.


Cla*_*ash 7

看看https://github.com/bcarneiro/django-tenant-schemas 你只有一个项目实例,不需要在你的代码中做很多修改.

  • 只是想给这个答案+1,因为我最近为多租户架构应用分叉了这个项目,这很棒!写得好,易于扩展,一旦实施,几乎无忧无虑. (2认同)