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

316 天前
 leven87

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

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

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

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

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

2047 次点击
所在节点    数据库
27 条回复
roundgis
316 天前
方案二定時做匯總就行了
Masoud2023
316 天前
能不能把需求讲明白点,做什么业务的云平台实现什么功能实现多租户?
mightybruce
316 天前
你的问题其实 HTAP 类型的数据库就能满足, 不过你可能是用 mysql 吧, 你可以通过 mysql CDC 工具同步到 ES 来做分析或建立一些数仓来做分析。
kuituosi
316 天前
互联网模式选 1
2b 模式且对应甲方比较少选 2
812603834
316 天前
客户已经有了吗?如果是研发新产品方案 2 太宏大了,可以折中一点,根据租户 id 分库分表,分几个库百来张表。用 es 做数据汇总查询处理,具体的操作直接操作数据库
chenqh
316 天前
都用 django 了,确定是大项目吗?
flmn
316 天前
devliu1
316 天前
2 一点都不复杂,1 才复杂,业务层需要的改动太多。

多租户你应该只要部分统计数据,离线计算就可以
yy77
316 天前
还是 2 比较好,1 的话一个 bug 或者运维失误那就很难搞定了。
shyangs
316 天前
方案一,增加了維運搞出 P0 級事故的可能. 一個失誤影響所有租戶.
shuimugan
316 天前
方案一很勇哦,先想一想灰度方案怎么做,怎么样更新不会影响全租户,租户有没有数据库私有化的需求,有没有"坏租户"数据量过大拖垮整个数据库性能的风险
DeWjjj
316 天前
这不是应该启动一个服务,定期把客户的分表全部映射到一个总表上给后台看么?
leven87
316 天前
@roundgis @DeWjjj 还是希望实时,管理员在租户数据库的写操作,希望能实时同步到全量数据库。
leven87
316 天前
@kuituosi 谢谢
leven87
316 天前
@812603834 老板就随口一说,数据库要不要分库。我们以前是做私有化部署,现在要弄到公网上,所以要做多租户。
leven87
316 天前
@chenqh 哈哈,技术栈就是 python.
leven87
316 天前
@shyangs
@shuimugan
暂时是小系统,没到那么复杂的架构。只是老板考虑以后升级成本
sivacohan
316 天前
方案二,每个用户一个 schema 。
管理员具备查看多个 schema 的权限。

主键 ID 不要用自增 ID ,可以用 snowflake 之类的分布式 ID 。这样多个 schema 相同表 union 的时候,不会出现主键冲突,排序和分页都冗余很多。

并且,如果是 ToB 业务,不同租户之间可能表结构、逻辑结构都有所区别。遇到租户级的定制需求,方案一满足起来非常困难,做到最后会发现数据库已经弱化成了存储,“实时上”自己手动实现了一个数据库。
roundgis
316 天前
@DeWjjj 量不大可以考慮用 signal 有寫入行為時觸發同步

如果量很大就要考慮用 mq 了
0703wzq
316 天前
我这边也是做 saas ,采用的方案二,方案二的优点很明显,业务侧不需要管租户的问题,只需要实现它的业务,数据库的切换由底层去实现。在独立部署的时候也不会遇到什么问题只开通一个租户即可。如果使用方案一,后期租户数量多将会是个灾难,对于业务侧来说,每个数据考虑租户的问题有时候也是个头疼的事情。至于汇总数据的问题无非是多做一个定期同步到上一级汇总表。

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

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

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

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

© 2021 V2EX