1. 多租户SaaS架构概述

1.1 什么是多租户

多租户(Multi-Tenancy)是一种软件架构模式,允许单个应用实例同时服务多个租户,同时确保每个租户的数据与配置相互隔离。租户可以是企业、组织或用户组,每个租户拥有独立的业务视图与权限边界。

核心特征:共享资源 + 逻辑隔离 + 按需定制。多租户不是简单的“多用户”,而是面向多组织、多客户、多业务线的隔离与共享平衡。
多租户核心概念:单实例 vs 多租户 传统单租户模式 应用实例 数据库 仅服务 1 个客户/组织 资源利用率低,维护成本高 多租户模式 共享应用实例 隔离数据层 同时服务 3+ 租户 逻辑隔离,互不干扰 高资源利用率,统一运维

1.2 租户隔离模型

租户隔离是多租户架构的基石。根据数据隔离的粒度与共享程度,主流有三种隔离模型:

隔离模型 数据隔离级别 共享资源 典型场景 安全强度
数据库隔离 最高 仅应用实例 金融、医疗、高合规行业 ★★★★★
Schema隔离 中高 数据库实例 中型企业、SaaS平台 ★★★★☆
共享表隔离 最低 数据库 + 表结构 低成本SaaS、个人用户 ★★★☆☆

1.2.1 数据库隔离(Database per Tenant)

每个租户拥有独立的数据库实例。应用层通过数据源路由,将请求分发到对应租户的数据库。

  • 优点:数据隔离最彻底,备份恢复独立,故障域最小。
  • 缺点:资源开销大,连接数多,运维复杂。
  • 适用:对数据安全要求极高的场景,如银行、保险、政务。

1.2.2 Schema隔离(Schema per Tenant)

所有租户共享同一个数据库实例,但每个租户拥有独立的Schema(命名空间)。表结构相同,数据物理隔离。

  • 优点:资源利用率高于数据库隔离,隔离性较好。
  • 缺点:数据库实例故障影响所有租户;跨租户查询困难。
  • 适用:中型SaaS平台,租户数量可控。

1.2.3 共享表隔离(Shared Table)

所有租户共用同一套表结构,通过租户ID字段(tenant_id)区分数据行。这是成本最低的隔离方式。

  • 优点:资源利用率最高,扩展简单,维护成本低。
  • 缺点:隔离性最弱,需在应用层严格过滤 tenant_id,否则易发生数据泄露。
  • 适用:低成本SaaS、个人/小团队场景。
⚠️ 安全警示:共享表隔离模式下,任何一次SQL查询遗漏 tenant_id 过滤,都可能导致跨租户数据泄露。这是多租户鉴权拦截链路必须重点防护的环节。
三种租户隔离模型对比 数据库隔离 应用实例 租户A 数据库 租户B 数据库 租户C 数据库 隔离最强 · 资源开销最大 Schema隔离 应用实例 共享数据库实例 Schema_A Schema_B · Schema_C 隔离中等 · 资源适中 共享表隔离 应用实例 共享数据库 orders 表 tenant_id | order_id | ... A001 | ... | B002 | ... 隔离最弱 · 成本最低

1.3 SaaS成熟度模型

SaaS成熟度模型由Microsoft提出,用于衡量SaaS应用在多租户、可配置性、可扩展性方面的能力。共分为4个级别:

级别 名称 隔离模型 可配置性 可扩展性 典型特征
Level 1 定制化实例 数据库隔离 低(代码级定制) 低 每个租户独立部署,本质是“托管软件”
Level 2 可配置实例 数据库/Schema隔离 中(配置文件/开关) 中 同一代码库,通过配置满足不同租户
Level 3 可扩展多租户 Schema/共享表隔离 高(元数据驱动) 高 租户可自定义字段、流程、UI
Level 4 可扩展多租户 + 弹性 混合隔离 极高 极高(自动扩缩容) 水平扩展、按需分配资源、零停机
💡 架构建议:大多数SaaS产品从 Level 2 起步,逐步演进到 Level 3。Level 4 需要强大的基础设施支撑(如Kubernetes、分布式数据库),适合超大规模SaaS平台。本课程后续的鉴权拦截链路设计,主要面向 Level 2 ~ Level 3 的典型架构。

成熟度演进路径

  1. Level 1 → Level 2:将定制代码抽象为配置项,实现“一份代码,多租户运行”。
  2. Level 2 → Level 3:引入元数据框架,支持租户级自定义扩展,同时强化鉴权与隔离。
  3. Level 3 → Level 4:实现无状态化、弹性伸缩、多区域部署,鉴权链路需支持分布式会话与全局租户上下文。