
公司搭建云平台需要实现多租户。搜索互联网,主要两个方案。
方案一最简单直接,缺点就是数据隔离性和安全性差一些,但中小应用还好。 方案二架构就会比较复杂,但是数据隔离性和安全性好。
现在的问题是考虑方案二的话,何将各租户的数据聚合,因为租户数据都是存在不同的库里面。管理员应该能看到并管理所有租户数据,如果实时从每个库查询效率太低,应该也不是通用做法吧(这方面经验少)。想到的一个架构是,采用阿里开源的实时同步工具 canal, 将每个租户的数据同步到一个全量数据库。管理员在全量数据库去查询数据。
请教 V 友,多租户分库方案,数据如何聚合进行查询的问题,谢谢大家。
1 roundgis 2023-12-28 09:55:42 +08:00 via Android 方案二定做就行了 |
2 Masoud2023 2023-12-28 10:01:39 +08:00 能不能把需求讲明白点,做什么业务的云平台实现什么功能实现多租户? |
3 mightybruce 2023-12-28 10:07:06 +08:00 你的问题其实 HTAP 类型的数据库就能满足, 不过你可能是用 mysql 吧, 你可以通过 mysql CDC 工具同步到 ES 来做分析或建立一些数仓来做分析。 |
4 kuituosi 2023-12-28 10:12:34 +08:00 互联网模式选 1 2b 模式且对应甲方比较少选 2 |
5 libraaaa 2023-12-28 10:46:09 +08:00 客户已经有了吗?如果是研发新产品方案 2 太宏大了,可以折中一点,根据租户 id 分库分表,分几个库百来张表。用 es 做数据汇总查询处理,具体的操作直接操作数据库 |
6 simple2025 2023-12-28 11:25:29 +08:00 都用 django 了,确定是大项目吗? |
7 flmn 2023-12-28 11:29:08 +08:00 |
8 devliu1 2023-12-28 11:30:24 +08:00 2 一点都不复杂,1 才复杂,业务层需要的改动太多。 多租户你应该只要部分统计数据,离线计算就可以 |
9 yy77 2023-12-28 11:45:25 +08:00 还是 2 比较好,1 的话一个 bug 或者运维失误那就很难搞定了。 |
10 shyangs 2023-12-28 11:50:37 +08:00 方案一,增加了搞出 P0 事故的可能. 一失影所有租. |
11 slowgen 2023-12-28 12:23:50 +08:00 方案一很勇哦,先想一想灰度方案怎么做,怎么样更新不会影响全租户,租户有没有数据库私有化的需求,有没有"坏租户"数据量过大拖垮整个数据库性能的风险 |
12 DeWjjj PRO 这不是应该启动一个服务,定期把客户的分表全部映射到一个总表上给后台看么? |
18 sivacohan PRO 方案二,每个用户一个 schema 。 管理员具备查看多个 schema 的权限。 主键 ID 不要用自增 ID ,可以用 snowflake 之类的分布式 ID 。这样多个 schema 相同表 union 的时候,不会出现主键冲突,排序和分页都冗余很多。 并且,如果是 ToB 业务,不同租户之间可能表结构、逻辑结构都有所区别。遇到租户级的定制需求,方案一满足起来非常困难,做到最后会发现数据库已经弱化成了存储,“实时上”自己手动实现了一个数据库。 |
20 0703wzq 2023-12-28 14:26:24 +08:00 我这边也是做 saas ,采用的方案二,方案二的优点很明显,业务侧不需要管租户的问题,只需要实现它的业务,数据库的切换由底层去实现。在独立部署的时候也不会遇到什么问题只开通一个租户即可。如果使用方案一,后期租户数量多将会是个灾难,对于业务侧来说,每个数据考虑租户的问题有时候也是个头疼的事情。至于汇总数据的问题无非是多做一个定期同步到上一级汇总表。 |
21 fengpan567 2023-12-28 14:53:44 +08:00 选方案 2 |
23 0703wzq 2023-12-28 15:54:12 +08:00 @leven87 #22 如果到那个程度的用户量,把数据库分开实例就可以了,如 A 、B 租户在数据库实例 1 ,C 、D 租户在 数据库实例 2 。 分库的方案在后期扩容上还是很灵活的。 |
24 37Y37 2023-12-28 16:20:06 +08:00 我们自动化系统,也是 python 写的,Django 基础框架,公司内部用,不同项目/部门实现多租户,用了方案一,封装了个框架做租户层的隔离,无论是插入还是读取,遵循框架就好,目前用起来还挺好的,同样同意楼上老哥的观点: 互联网模式选 1 2b 模式且对应甲方比较少选 2 |
25 mightybruce 2023-12-28 16:25:32 +08:00 之前没看到是 mariadb, 那么就是分库的方案了,schema 拆分, 现在谈论任何优化都是过早的事情, 在你的用户量确定和增长量确定,然后服务器监控指标再说这些。 另外数据库分库分表也是根据实际情况来的,也是多种方案,你现在想这个实在是太早, 分库分表带来的一堆问题你自己都不好解决的。 架构演进可以如下 scheme 分拆 到 分区表 主从优化 最后才是分库分表或分布式数据库。 |
26 danhahaha 2023-12-28 20:49:57 +08:00 2 吧,等客户多了之后,保不准有的客户需要定制或搬迁,1 搞起来太麻烦了,2 随时可以分开 |
27 leven87 OP @mightybruce 好的,我的想法也是先方案一,可以先做些准备,等有些规模后再迁移。领导需要一个评估。 |