🏢 SaaS 多租户
- 支持
SaaS 多租户,可个性化``自定义每个租户套餐与权限。 - 支持
非租户模式NONE、多租户共享数据表字段模式COLUMN、共享数据库独立数据表模式SCHEMA、独立数据源模式DATASOURCE、独立数据源+字段模式DATASOURCE_COLUMN等多种租户模式。
租户的数据隔离方案
非租户模式 NONE
- 租户模式:无
- 隔离模式:无
- 即不区分租户。
共享数据表字段模式 COLUMN
- 租户模式:共享数据库,共享Schema,共享表模式
- 隔离模式:表级隔离(Shared Schema)
- 即所有租户
共用一套数据库与表结构,通过表中新增 租户IDtenant_id字段,实现行级的数据隔离。
共享数据库独立数据表模式 SCHEMA
- 租户模式:共享数据库,独立Schema模式
- 隔离模式:Schema 级隔离(Isolated Schema)
- 即每个租户独立拥有一套 Schema(命名空间),每个 Schema 内有独立的表结构,但共用数据库实例。
独立数据源模式 DATASOURCE
- 租户模式:独立数据库模式
- 隔离模式:数据库级隔离(Dedicated Database)
- 即每个租户拥有独立的数据库实例,包含独立的表结构、权限、存储空间和连接配置。
独立数据源+字段模式 DATASOURCE_COLUMN
- 租户模式:混合租户模式:独立数据库模式 + 共享Schema,共享表模式
- 隔离模式:混合隔离模型:数据库级隔离(Dedicated Database)+ 表级隔离(Shared Schema)
- 即每个租户拥有独立的数据库实例,包含独立的表结构、权限、存储空间和连接配置,同时支持子租户
共用一套主租户数据库与表结构,通过表中新增 子租户IDtenant_id字段,实现行级的数据隔离。
租户模式区别
| 租户模式 | 数据模式 | 描述 | 优点 | 缺点 |
|---|---|---|---|---|
| NONE(非租户模式) | 非租户模式 | 非租户模式:没有租户 | 简单、适合独立系统 | 缺少租户系统的优点。 |
| COLUMN(字段模式|列模式) | 共享数据库、共享数据表 | 租户共用一个数据库,在业务表中增加租户字段来区分。 | 成本低、扩展灵活,简单、不复杂、开发无感知。 | 需要严格控制租户隔离逻辑,容易因代码缺陷造成数据泄露,数据隔离粒度低。数据隔离性差、安全性差、数据备份和恢复困难。 |
| SCHEMA(表模式) | 共享数据库、独立数据表 | 数据库物理共享,但逻辑结构完全隔离。 | 各租户互不干扰,逻辑边界清晰,安全性显著提升;可独立迁移、备份、审计,更灵活的数据维护。 | 如需跨租户统计数据,存在一定难度。 |
| DATASOURCE(独立数据源) | 独立数据库 | 每个租户独立一个 数据库(数据源),执行代码时,动态切换数据源。 | 可独立部署数据库,数据隔离性好、扩展性高、故障影响小。用户数据隔离级别高,安全性好。 | 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库,成本较高。 |
| DATASOURCE_COLUMN(独立数据源+字段模式) | 独立数据库 | 先独立数据库隔离租户,在按字段隔离门店或单位等。每个租户独立一个 数据库(数据源),执行代码时,动态切换数据源,在动态拼接 子租户ID 二次隔离。 | 可独立部署数据库,数据隔离性好、扩展性高、故障影响小、支持大租户小|子租户形式。 | 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库。 |
多租户方案对比
| 隔离模式 | 数据隔离级别 | 资源利用率 | 成本 | 复杂度 | 适用场景 |
|---|---|---|---|---|---|
| 共享表 | 低 | 最高 | 低 | 低 | 大量小租户、成本敏感场景 |
| 独立表 | 中 | 中高 | 中低 | 低 | 中小型应用、原型验证 |
| 独立 Schema | 高 | 中 | 中 | 中 | 中型SaaS、安全要求较高的场景 |
| 独立数据库 | 最高 | 低 | 高 | 中 | 企业级应用、金融/医疗行业 |
| 混合模式 | 可变 | 可变 | 中高 | 高 | 多层级服务、复杂业务需求 |