1. 多租户基础概念
1.1 什么是多租户
多租户(Multi-Tenancy)是一种软件架构模式,指单个软件实例能够同时为多个独立的租户提供服务,且每个租户在逻辑上彼此隔离。租户之间共享底层基础设施(计算、存储、网络),但各自的数据、配置、用户身份和访问权限相互不可见。
核心特征:共享实例 + 逻辑隔离。多租户不是简单的“多用户”,而是面向组织级或业务域级的资源划分与安全边界。
多租户架构与单租户架构的关键区别如下:
| 对比维度 | 单租户架构 | 多租户架构 |
|---|---|---|
| 实例数量 | 每个客户独立部署一套实例 | 所有客户共享一套实例 |
| 资源利用率 | 低,存在大量空闲资源 | 高,通过复用降低单位成本 |
| 运维复杂度 | 高,需管理 N 套环境 | 低,集中运维一套环境 |
| 隔离粒度 | 物理/虚拟机级强隔离 | 逻辑级隔离(数据库/表/行) |
| 升级成本 | 需逐个客户升级 | 一次升级,所有租户受益 |
| 适用场景 | 高安全合规、定制化需求 | SaaS、云平台、标准化服务 |
1.2 租户与用户的区别
在多租户体系中,租户(Tenant)和用户(User)是两个不同层次的概念,不能混用。
- 租户:代表一个独立的组织、企业、项目或业务域。租户拥有自己的资源池、配置空间、数据隔离边界和权限体系。例如:一家使用 SaaS CRM 的公司 A 是一个租户,公司 B 是另一个租户。
- 用户:隶属于某个租户,是具体操作系统的自然人。一个租户下可以包含多个用户,每个用户拥有该租户范围内的角色和权限。例如:公司 A 租户下的销售员张三、管理员李四。
记忆口诀:租户是“房子”,用户是“房子里的人”。不同房子之间的人不能互相串门(数据隔离),同一房子内的人可以按角色分工(权限控制)。
租户与用户的层次关系如下表:
| 维度 | 租户(Tenant) | 用户(User) |
|---|---|---|
| 定义 | 独立的组织/业务单元 | 自然人操作账号 |
| 标识 | 租户 ID(TenantID) | 用户 ID(UserID) |
| 归属关系 | 顶级隔离单元 | 隶属于某个租户 |
| 数据范围 | 整个租户的数据集 | 用户自身的数据及授权数据 |
| 权限粒度 | 租户级功能/资源开关 | 用户级角色/操作权限 |
| 生命周期 | 创建/冻结/销毁 | 创建/禁用/删除 |
1.3 多租户架构的典型应用场景
多租户架构广泛应用于以下场景:
- SaaS 应用(软件即服务): 如 Salesforce、Slack、钉钉、飞书。一套代码服务成千上万家企业,每家企业是一个租户,数据完全隔离。
- 云原生 PaaS 平台: 如 Kubernetes 多租户集群、云数据库实例。不同团队或项目共享集群资源,通过 Namespace、RBAC、NetworkPolicy 实现隔离。
- API 网关与开放平台: 如阿里云 API 网关、AWS API Gateway。每个接入方(App/合作伙伴)是一个租户,拥有独立的调用配额、签名密钥和访问控制策略。
- DevOps / CI/CD 平台: 如 Jenkins 多分支、GitLab Group。每个项目组是一个租户,拥有独立的流水线、制品库和环境变量。
- 物联网(IoT)平台: 每个设备厂商或项目是一个租户,管理自己的设备注册、数据上报和规则引擎。
注意:在多租户控制面架构中,接口调用权限隔离是核心挑战。如果租户 A 的用户通过 API 越权访问了租户 B 的数据,将导致严重的安全事故。因此,控制面必须对每一次接口调用进行租户身份校验和权限判定。
1.4 多租户隔离模型
根据隔离的深度和实现成本,多租户架构通常分为三种隔离模型:
| 隔离模型 | 实现方式 | 隔离强度 | 资源成本 | 典型场景 |
|---|---|---|---|---|
| 数据库级隔离 | 每个租户独立数据库 | 高 | 高 | 金融、医疗等强合规场景 |
| Schema 级隔离 | 共享数据库,独立 Schema | 中 | 中 | 中型 SaaS 平台 |
| 行级隔离 | 共享数据库和表,通过 TenantID 列区分 | 低 | 低 | 轻量级 SaaS、内部工具 |
架构选择建议:在控制面接口调用权限隔离场景中,通常采用行级隔离 + 租户上下文传递的方式。控制面通过解析请求中的 TenantID,动态拼接 SQL 过滤条件或路由到对应的数据源,实现轻量且高效的隔离。