多租户 Django 应用程序

17

在使用Django创建多租户应用程序时,人们是否有常见的模式?内置的“sites”框架似乎是一种选择。还有其他方法人们已经成功运用过吗?


1
可能是在Django上实现多租户应用的最佳架构的重复问题。 - akaihola
2个回答

10
使用站点框架可以很好地为“租户”提供安全保障,假设您给每个站点实例一个唯一的表。另一方面,如果您只有少量租户,则会很麻烦,并且会浪费大量服务器资源,因为即使他们不使用系统,您也需要至少一个服务器进程来服务每个客户。如果您有大量租户,则无论采用何种方法,都将被迫自动化解决方案,这样减轻了很多麻烦。在几乎所有模型中放置租户外键将运作良好,Django的ORM使用自定义管理器更容易强制执行安全性。缺点是,如果用户数量增加,性能会下降,因为没有简单的方法来扩展。
如果需要扩展,我认为最好的解决方案可能是两种方法的结合。每个模型都有一个租户外键,因此数据库可以共享,但是您需要在比Django更高级别的机制中开发一些机制来将客户路由到网站实例中。这样,您就可以将真正大的租户放在自己的数据库中,并为他们适当调整资源(例如,适当数量的mod_wsgi守护程序,数据库连接数,大小合适的memcache池等),而较小的租户共享公共资源。

7

如果您需要多个数据库,这是一个不错的方法 - 它允许您在单个数据库中使用多个模式,从而减少开销。需要使用PostgreSQL。Django simple-tenant-schemas也很有趣。 - RichVel
1
我是指“如果您想要使用模式来实现多个类似数据库的方法”,抱歉。 - RichVel
2
只是想点赞这个答案,因为最近我已经为一个多租户模式应用程序派生了这个项目,它非常棒!编写得很好,易于扩展,一旦实施就几乎没有问题。 - HurnsMobile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接