多租户系统的实现方式

article/2025/6/21 14:40:34

多租户系统的实现方式

一、多租户架构概述

多租户(Multi-Tenancy)是SaaS(软件即服务)模式的核心架构技术,允许多个租户(客户/组织)共享同一软件实例,同时保证数据隔离和安全。其核心价值在于:

  • 资源高效利用:共享硬件/软件资源,降低运营成本
  • 快速交付:新租户开通即用,无需重复部署
  • 统一运维:集中管理版本更新与系统维护
  • 按需扩展:根据租户规模动态调整资源

经典类比
传统软件如同每家独立安装煤气罐;多租户如同共享天然气管道,按使用量付费。


二、数据隔离实现方案

1. 共享表模式(字段隔离)

实现原理
  • 所有租户共享同一数据库实例和表结构
  • 通过tenant_id字段逻辑隔离数据
  • SQL自动追加租户过滤条件(如WHERE tenant_id = 'T001'
技术实现(MyBatis-Plus示例)
// 租户拦截器实现
public class TenantInterceptor implements TenantLineHandler {@Overridepublic String getTenantIdColumn() {return "tenant_id";  // 数据库租户字段}@Overridepublic Expression getTenantId() {// 从请求上下文获取租户IDreturn new StringValue(TenantContext.getCurrentTenant()); }
}// 请求过滤器
@WebFilter("/*")
public class TenantFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {// 从Header获取租户IDString tenantId = ((HttpServletRequest)request).getHeader("X-Tenant-ID");TenantContext.setCurrentTenant(tenantId);chain.doFilter(request, response);}
}

优缺点

优点缺点
成本最低,资源利用率高数据隔离性差(SQL注入风险)
跨租户统计便捷单表数据膨胀导致性能下降
新增租户无需重启难以支持个性化表结构

适用场景:To C应用(问卷系统)、初创SaaS产品

2. 独立Schema模式

实现原理
租户共享数据库实例,但拥有独立Schema(PostgreSQL)或Database(MySQL)
物理隔离数据,表结构相同
通过动态切换Schema实现隔离
技术实现

-- 为租户创建独立Schema
CREATE SCHEMA tenant_T001;
CREATE TABLE tenant_T001.users (...);
// Spring动态数据源路由
public class TenantDataSourceRouter extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return "tenant_" + TenantContext.getTenantId(); // 返回Schema名称}
}

优缺点:

优点缺点
数据物理隔离跨租户统计复杂
运维成本低于独立DB连接管理复杂
支持中等规模租户租户数量受实例性能限制
​适用场景​​:企业协作平台、中等规模ERP系统

3.独立数据库模式

实现原理

  • 每个租户独占数据库实例
  • 完全物理隔离,最高安全级别
  • 支持深度定制化需求

技术实现:

// 动态数据源配置
@Configuration
public class DataSourceConfig {@Bean@ConfigurationProperties(prefix="datasource.tenant1")public DataSource tenant1DataSource() {return DataSourceBuilder.create().build();}@Beanpublic DataSource routingDataSource() {Map<Object, Object> targetDataSources = new HashMap<>();targetDataSources.put("T001", tenant1DataSource());// 添加更多租户数据源...AbstractRoutingDataSource ds = new AbstractRoutingDataSource() {@Overrideprotected Object determineCurrentLookupKey() {return TenantContext.getTenantId();}};ds.setTargetDataSources(targetDataSources);return ds;}
}

优缺点:

优点缺点
最高级别数据安全硬件和运维成本高
故障影响范围小租户规模扩展困难
支持深度定制跨租户操作复杂
​适用场景​​:银行核心系统、医疗平台、政府政务云

4. 三种方案对比

维度共享表模式独立Schema模式独立数据库模式
隔离性低(逻辑隔离)中(Schema隔离)高(物理隔离)
成本
最大租户量高(数千+)中(数百)低(数十)
跨租户统计简单复杂极难
运维难度
定制能力

三、架构设计与扩展方案

1. 资源隔离模式

模式核心特点适用场景
共享模式所有租户共享计算/存储资源,需限流降级机制成本敏感型业务(中小客户)
竖井模式每个租户独占资源(独立容器/VM),完全隔离高安全需求场景(政府、金融)
分域模式混合架构:普通租户共享基础域,VIP租户使用专用域独立资源兼顾成本与隔离的混合业务

在这里插入图片描述

​技术栈​​
容器编排:Kubernetes + Docker
部署管理:Helm Charts
服务网格:Istio(流量管理)
​​核心能力​​:

租户自动开通/注销(API驱动)
资源弹性伸缩(HPA)
健康监控与自愈(Prometheus+Alertmanager)
多版本并行发布(蓝绿部署)

四、 前端租户识别方案

1. 静态打包方案

​​实现​​:
为每个租户构建独立前端包
定制LOGO、主题色、功能模块
​​优缺点​​:
优点

  • 高度品牌定制化
  • 完全隔离无冲突

缺点

  • 维护成本高(N个代码分支)
  • 更新需重新打包部署

​适用场景​​:大型企业客户、品牌独立性要求高的场景

2. 动态域名方案

实现:

// 根据域名识别租户
const tenantMap = {'clientA.com': 'T001','clientB.com': 'T002'
};const getTenantId = () => {const hostname = window.location.hostname;return tenantMap[hostname] || 'default';
};// 请求头自动注入租户ID
axios.interceptors.request.use(config => {config.headers['X-Tenant-ID'] = getTenantId();return config;
});// 动态加载租户配置
fetch(`/configs/${getTenantId()}.json`).then(res => res.json()).then(config => {document.documentElement.style.setProperty('--primary-color', config.themeColor);document.getElementById('logo').src = config.logoUrl;});

适用场景​​:标准化SaaS产品(如企业微信、钉钉)

五、选型关键因素

1.​​数据规模​​

海量小数据(<1GB/租户)→ 共享表模式
中大型数据集(1GB-1TB)→ 独立Schema
超大规模/敏感数据 → 独立数据库​

2​安全合规​​

GDPR/HIPAA等严格合规 → 独立数据库
ISO27001等商业认证 → 独立Schema
基础安全要求 → 共享表模式

3.​​成本预算​​

低成本优先(人均成本<¥100/月)→ 共享表模式
中等预算(¥100-500/月)→ 独立Schema
高预算(>¥500/月)→ 独立数据库

4.​​扩展需求​​

快速弹性扩展 → 容器化分域模式(K8s)
稳定优先 → 竖井模式
混合负载 → 分域模式

六、总结与建议

场景化推荐方案

演进趋势:

业务场景推荐方案典型案例成本系数
初创SaaS验证期共享表模式+动态域名轻量级CRM工具1x
中大型企业服务独立Schema+分域架构钉钉/企业微信2-3x
金融/医疗核心系统独立数据库+容器竖井银行信贷系统5-8x
混合型云平台分域模式(基础域+专用域)AWS Organizations3-5x
  • ​容器化普及​​
    Kubernetes大幅降低独立实例运维成本,租户隔离粒度从VM级细化到Pod级
  • 数据隔离增强​​
    数据库池化技术(如Vitess)提升Schema模式扩展性
    加密技术(TDE+列加密)弥补共享表模式安全短板
  • 智能调度​​
    服务网格(Service Mesh)实现租户级流量管理:
    按租户分配资源配额
    故障租户自动熔断
    SLA驱动的优先级调度
  • ​​混合架构兴起

核心原则​​:没有最优方案,只有最适方案——根据业务阶段动态演进架构。初期优先共享模式验证市场,成长期采用分域架构平衡成本与隔离,成熟期通过混合方案满足差异化需求。

核心原则​​:没有最优方案,只有最适方案——根据业务阶段动态演进架构。初期优先共享模式验证市场,成长期采用分域架构平衡成本与隔离,成熟期通过混合方案满足差异化需求。

参考文章:

参考文章1
参考文章2
参考文章3
参考文章4


http://www.hkcw.cn/article/TqktuwmCnq.shtml

相关文章

Sui 中文社区月度激励计划

为了进一步激发开发者的热情&#xff0c;推动Sui开源项目的进步&#xff0c;HOH 特别推出了 Sui开源激励计划&#xff0c;鼓励更多的开发者参与 &#x1fa75; &#x1f3af; 无论是刚刚起步的新手&#xff0c;还是经验丰富的资深开发者&#xff0c;都可以积极参与&#xff0c…

Java反射(黑马)

Java反射&#xff08;Reflection&#xff09;是Java语言的一个强大特性&#xff0c;它允许程序在运行时动态地检查和操作类、接口、字段和方法。通过反射&#xff0c;程序可以获取类的信息、创建对象、调用方法、访问字段等&#xff0c;而无需在编译时知道这些类的具体实现。这…

教育部开通2025高考举报电话 欢迎举报问题线索

近日,教育部公布了2025年高考举报电话,覆盖教育部及各省(区、市)。欢迎广大考生、家长和社会各界人士举报涉及2025年高考的问题线索。相关部门将根据举报线索迅速核查处理,坚决维护高考的公平公正。责任编辑:zhangxiaohua

揭秘绿发会与蒋雨融父亲关联 家庭背景引争议

近日,蒋雨融因在哈佛大学2025年毕业典礼上的发言和家庭背景引发争议。2022年3月,绿发会曾公开发布推文称,时任副理事长兼秘书长的周晋峰推荐了长期志愿者蒋雨融进入哈佛大学肯尼迪学院,蒋雨融的父亲蒋志明对此表示感谢。目前,在绿发会的公众号和微博账号搜索“蒋雨融”,均…

Alist Win 基本用法

1&#xff1a;Alist 简介 Alist 是一个支持多种存储的文件列表程序&#xff0c;具体使用方式可参考 https://alistgo.com/zh/。 使用指南&#xff1a;https://alistgo.com/zh/guide/ 配置指南&#xff1a;https://alistgo.com/zh/config/ 2&#xff1a;Alist 部署 2.1&…

YOLOv10改进|爆改模型|涨点|C2F引入空间和通道注意力模块暴力涨点(附代码+修改教程)

一、文本介绍 本文修改的模型是YOLOv10&#xff0c;YOLOv10无需非极大值抑制&#xff08;NMS&#xff09;进行后处理&#xff0c;其推理速度以及参数量上都优于现有的模型。C2f (Cross-Stage Partial-Connection with 2 convolutions) 模块是YOLOv6中引入的一种结构&#xff0…

38岁男子酒后拖拽6岁女童进巷被拘 警方迅速行动控制嫌疑人

警情通报2025年5月20日下午,嫌疑人刘某某(男,38岁)酒后行至娄底市娄星区涟滨中街附近,拖拽一名6岁女童进入居民区巷子,被居民及时制止并报警。接警后,民警迅速赶到现场将刘某某控制。经侦查,刘某某涉嫌寻衅滋事已被拘留,并将依法追究其刑事责任。公安机关坚决依法打击…

隔离防护产品防晒有效果吗 选购需谨慎

夏日来临,防晒化妆品迎来销售高峰。不少商家打出“防护+修复”的宣传口号,声称产品既能防晒,又能美白修复。然而,消费者购买使用后却发现,这些所谓“多效合一”的产品,其实很多都只是普通的化妆品。在北京多家日化用品销售店,防晒霜、防晒喷雾等产品被摆在最显眼的位置。…

俄将向乌移交6000具阵亡士兵遗体 谈判达成一致

俄罗斯与乌克兰两国代表团于6月2日在土耳其伊斯坦布尔进行了第二轮直接谈判。双方就交换阵亡士兵遗体及新一轮换俘达成一致。谈判持续了约1小时,俄罗斯总统助理、俄方谈判代表团团长梅金斯基表示,俄方将在下周单方面向乌方移交6000具阵亡士兵遗体。梅金斯基还提到,俄乌将成立…

计算机视觉---深度学习框架(Backbone、Neck、Head)

一、主干&#xff08;Backbone&#xff09;&#xff1a;视觉特征的“根基” 1. 核心定位与功能 定义&#xff1a; 作为网络的底层基础&#xff0c;主干负责从输入图像中提取多层次、多尺度的视觉特征&#xff0c;其输出的特征图&#xff08;Feature Map&#xff09;需兼顾空间…

使用Cursor自动创建Dify工作流

一、背景 AI时代&#xff0c;使用自然语言进行编程&#xff0c;让开发变成聊天一样容易。提升我们的效率&#xff0c;复杂的、重复性的工作交给AI 工具来做&#xff0c;本次尝试使用cursor自动创建dify工作流。 二、准备工作&#xff1a; 本地安装Cursor开发工具&#xff08…

泡泡玛特续创新高 市值突破3100亿港元

泡泡玛特(9992.HK)股价继续走强,盘中一度上涨2.43%,达到235.6港元,创下历史新高,市值突破3100亿港元。今年以来,该股累计涨幅超过160%。摩根大通发布报告表示,对中国IP产业的乐观前景更加有信心,将泡泡玛特列为首选之一,并给予“增持”评级。尽管大多数企业尚未见到显…

7人停车场殴打未成年 警方:全部抓获 因误会引发冲突

四川古蔺县警方通报了一起涉及未成年人的暴力事件。6月2日,两名未成年人骑车时发出笑声,被15岁的陈某甲误以为是在嘲笑自己。随后,陈某甲和其他六人在地下停车场对这两名未成年人进行了殴打。目前,七名涉事人员均已被警方抓获,其中两人已被刑事拘留。责任编辑:zhangxiaoh…

Python-matplotlib库画不规则图

matplotlib库之画不规则图 subplot2grid()实现灵活的网格布局GridSpec基本参数 简单的不规则 在 Matplotlib 中绘制不规则排列的图形&#xff08;如大小不同、跨行跨列的子图&#xff09; subplot2grid()实现灵活的网格布局 &#x1f3f5;️ 通过指定子图跨越的行数和列数实现…

abandon便签:一个免费好用审美在线的桌面便签应用

abandon便签&#xff1a;一个免费好用审美在线的桌面便签应用 项目gitee地址&#xff1a;abandon便签: 一个免费好用审美在线的桌面便签应用 下载链接&#xff1a;点我下载软件压缩包 注&#xff1a;下载压缩包后&#xff0c;解压即可。 项目初衷&#xff1a; 前段时间辞职&…

CppCon 2014 学习:(Costless)Software Abstractions for Parallel Architectures

硬件和科学计算的演变关系&#xff1a; 几十年来的硬件进步&#xff1a;计算机硬件不断快速发展&#xff0c;从提升单核速度&#xff0c;到多核并行。科学计算的驱动力&#xff1a;科学计算需求推动硬件创新&#xff0c;比如需要更多计算能力、更高性能。当前的解决方案是并行…

【MySQL】使用C语言连接数据库

目录 一、准备工作 二、数据表操作 &#xff08;一&#xff09;初始化数据库 &#xff08;二&#xff09;连接数据库 &#xff08;三&#xff09;设置字符集 &#xff08;四&#xff09;操作数据表 1、插入数据 2、删除数据 3、更新数据 4、查询数据 一、准备工作 在之…

高效会议记录工具使用指南

软件介绍 本文介绍一款名为"吗喽会议"的安卓平台会议记录软件&#xff0c;经过测试体验非常出色&#xff0c;特向大家推荐。 软件定位与核心功能 这是一款专为职场人士设计的会议记录应用程序&#xff0c;其核心优势在于强大的语音识别能力&#xff0c;能够实时将…

基于vue3-elemenyui的页面加载及新建浏览页案例

1.参考链接&#xff1a; 基于创建vue3链接&#xff1a;Vue3前端项目创建_vscode创建vue3项目-CSDN博客 基于创建elementui链接&#xff1a;Vue3引入ElementPlus_vue引入element-plus-CSDN博客 2.案例内容 该案例实现了基本的app.vue的路由跳转、新建浏览页参数传入以及浏览…

详解|证券、基金、期货:银证转账系统

Hi,围炉喝茶聊产品的新老朋友好!在话题未开始之前,先看组见证历史数据:2024年国庆节前,沪深两市成交额连续多日突破万亿。今日开盘后仅20分钟,沪深两市成交额突破1万亿元,刷新此前9月30日创下的历史最快万亿纪录。大量资金需要从银行存管账户转入证券存管账户。银行端和…