1. 多租户基础概念

1.1 什么是多租户

多租户(Multi-Tenancy)是一种软件架构模式,指单个软件实例能够同时为多个独立的租户提供服务,且每个租户在逻辑上彼此隔离。租户之间共享底层基础设施(计算、存储、网络),但各自的数据、配置、用户身份和访问权限相互不可见。

核心特征:共享实例 + 逻辑隔离。多租户不是简单的“多用户”,而是面向组织级或业务域级的资源划分与安全边界。

多租户架构与单租户架构的关键区别如下:

对比维度 单租户架构 多租户架构
实例数量 每个客户独立部署一套实例 所有客户共享一套实例
资源利用率 低,存在大量空闲资源 高,通过复用降低单位成本
运维复杂度 高,需管理 N 套环境 低,集中运维一套环境
隔离粒度 物理/虚拟机级强隔离 逻辑级隔离(数据库/表/行)
升级成本 需逐个客户升级 一次升级,所有租户受益
适用场景 高安全合规、定制化需求 SaaS、云平台、标准化服务

1.2 租户与用户的区别

在多租户体系中,租户(Tenant)和用户(User)是两个不同层次的概念,不能混用。

  • 租户:代表一个独立的组织、企业、项目或业务域。租户拥有自己的资源池、配置空间、数据隔离边界和权限体系。例如:一家使用 SaaS CRM 的公司 A 是一个租户,公司 B 是另一个租户。
  • 用户:隶属于某个租户,是具体操作系统的自然人。一个租户下可以包含多个用户,每个用户拥有该租户范围内的角色和权限。例如:公司 A 租户下的销售员张三、管理员李四。
记忆口诀:租户是“房子”,用户是“房子里的人”。不同房子之间的人不能互相串门(数据隔离),同一房子内的人可以按角色分工(权限控制)。

租户与用户的层次关系如下表:

维度 租户(Tenant) 用户(User)
定义 独立的组织/业务单元 自然人操作账号
标识 租户 ID(TenantID) 用户 ID(UserID)
归属关系 顶级隔离单元 隶属于某个租户
数据范围 整个租户的数据集 用户自身的数据及授权数据
权限粒度 租户级功能/资源开关 用户级角色/操作权限
生命周期 创建/冻结/销毁 创建/禁用/删除

1.3 多租户架构的典型应用场景

多租户架构广泛应用于以下场景:

  1. SaaS 应用(软件即服务): 如 Salesforce、Slack、钉钉、飞书。一套代码服务成千上万家企业,每家企业是一个租户,数据完全隔离。
  2. 云原生 PaaS 平台: 如 Kubernetes 多租户集群、云数据库实例。不同团队或项目共享集群资源,通过 Namespace、RBAC、NetworkPolicy 实现隔离。
  3. API 网关与开放平台: 如阿里云 API 网关、AWS API Gateway。每个接入方(App/合作伙伴)是一个租户,拥有独立的调用配额、签名密钥和访问控制策略。
  4. DevOps / CI/CD 平台: 如 Jenkins 多分支、GitLab Group。每个项目组是一个租户,拥有独立的流水线、制品库和环境变量。
  5. 物联网(IoT)平台: 每个设备厂商或项目是一个租户,管理自己的设备注册、数据上报和规则引擎。
注意:在多租户控制面架构中,接口调用权限隔离是核心挑战。如果租户 A 的用户通过 API 越权访问了租户 B 的数据,将导致严重的安全事故。因此,控制面必须对每一次接口调用进行租户身份校验和权限判定。
多租户概念关系图 共享软件实例(Single Instance) 租户 A TenantID: t-001 租户 B TenantID: t-002 租户 C TenantID: t-003 用户 A1 角色: 管理员 用户 A2 角色: 操作员 用户 B1 角色: 审计员 用户 C1 角色: 开发者 用户 C2 角色: 只读 逻辑隔离边界 租户之间数据不可见、配置不可见、用户不可见 同一租户内用户共享资源,但受角色权限控制

1.4 多租户隔离模型

根据隔离的深度和实现成本,多租户架构通常分为三种隔离模型:

隔离模型 实现方式 隔离强度 资源成本 典型场景
数据库级隔离 每个租户独立数据库 高 高 金融、医疗等强合规场景
Schema 级隔离 共享数据库,独立 Schema 中 中 中型 SaaS 平台
行级隔离 共享数据库和表,通过 TenantID 列区分 低 低 轻量级 SaaS、内部工具
架构选择建议:在控制面接口调用权限隔离场景中,通常采用行级隔离 + 租户上下文传递的方式。控制面通过解析请求中的 TenantID,动态拼接 SQL 过滤条件或路由到对应的数据源,实现轻量且高效的隔离。