django+mariadb 多租户架构方案讨论

332 天前
 leven87

公司搭建云平台需要实现多租户。搜索互联网,主要两个方案。

  1. 租户 id 区分,所有租户共用一个数据库;
  2. 按租户分库,每个租户一个数据库。

方案一最简单直接,缺点就是数据隔离性和安全性差一些,但中小应用还好。 方案二架构就会比较复杂,但是数据隔离性和安全性好。

现在的问题是考虑方案二的话,如何将各租户的数据聚合,因为租户数据都是存在不同的库里面。管理员应该能看到并管理所有租户数据,如果实时从每个库查询效率太低,应该也不是通用做法吧(这方面经验少)。想到的一个架构是,采用阿里开源的实时同步工具 canal, 将每个租户的数据同步到一个全量数据库。管理员在全量数据库去查询数据。

请教 V 友,多租户分库方案,数据如何聚合进行查询的问题,谢谢大家。

2063 次点击
所在节点    数据库
27 条回复
fengpan567
332 天前
选方案 2
leven87
332 天前
@0703wzq 谢谢。 还有个问题,如果租户多了,数据库太多,会不会给服务器很大的压力。
0703wzq
332 天前
@leven87 #22 如果到那个程度的用户量,把数据库分开实例就可以了,如 A 、B 租户在数据库实例 1 ,C 、D 租户在 数据库实例 2 。 分库的方案在后期扩容上还是很灵活的。
37Y37
331 天前
我们自动化系统,也是 python 写的,Django 基础框架,公司内部用,不同项目/部门实现多租户,用了方案一,封装了个框架做租户层的隔离,无论是插入还是读取,遵循框架就好,目前用起来还挺好的,同样同意楼上老哥的观点:
互联网模式选 1
2b 模式且对应甲方比较少选 2
mightybruce
331 天前
之前没看到是 mariadb, 那么就是分库的方案了,schema 拆分, 现在谈论任何优化都是过早的事情, 在你的用户量确定和增长量确定,然后服务器监控指标再说这些。
另外数据库分库分表也是根据实际情况来的,也是多种方案,你现在想这个实在是太早, 分库分表带来的一堆问题你自己都不好解决的。
架构演进可以如下
scheme 分拆 到 分区表 主从优化 最后才是分库分表或分布式数据库。
danhahaha
331 天前
2 吧,等客户多了之后,保不准有的客户需要定制或搬迁,1 搞起来太麻烦了,2 随时可以分开
leven87
331 天前
@mightybruce 好的,我的想法也是先方案一,可以先做些准备,等有些规模后再迁移。领导需要一个评估。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1004004

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX