Java面试要点:多租户 SaaS 租户隔离、数据隔离、配置隔离与套餐限制
前言
多租户 SaaS 关注的是“多个客户共用一套系统,但数据、权限、配置互相隔离”。面试常问:
- 租户 ID 从哪里来。
- 数据怎么隔离。
- 租户配置怎么管理。
- 不同套餐怎么限制功能。
- 怎么避免跨租户数据泄漏。
租户识别
常见方式:
- 域名识别:
tenantA.example.com。 - Token 中携带 tenantId。
- 请求头携带 tenantId。
- 登录后绑定租户上下文。
后端要把 tenantId 放入统一上下文,供权限、数据查询、日志审计使用。
数据隔离方案
| 方案 | 优点 | 缺点 |
|---|---|---|
| 独立数据库 | 隔离强 | 成本高 |
| 独立 schema | 隔离较好 | 运维复杂 |
| 共享表加 tenant_id | 成本低 | 隔离依赖代码和权限 |
中小 SaaS 常用共享表加 tenant_id,大型客户可能独立库。
查询隔离
共享表方案必须保证所有查询都带租户条件:
1 | select * from orders |
建议:
- ORM 拦截器自动追加 tenantId。
- 敏感表强制租户字段。
- 管理后台超管权限单独控制。
配置隔离
不同租户可能有不同:
- Logo。
- 菜单。
- 功能开关。
- 流程规则。
- 字段配置。
- 通知模板。
配置要支持租户维度覆盖默认配置。
套餐限制
SaaS 常见套餐:
- 用户数上限。
- 存储空间上限。
- API 调用次数。
- 功能模块开关。
- 数据保留周期。
套餐限制建议在网关、业务服务和定时任务多个位置做校验。
租户级限流
不能只按全局限流,否则大租户可能挤压小租户。
常见维度:
- 租户 QPS。
- 租户并发数。
- 租户任务数。
- 租户存储容量。
高频面试题
多租户最大风险是什么?
跨租户数据泄漏。要从查询条件、权限、日志、缓存 key、文件路径、消息 topic 等多个位置隔离。
缓存 key 怎么设计?
必须带 tenantId,例如 tenant:{tenantId}:user:{userId}。
大客户要求独立部署怎么办?
可以支持混合模式:普通租户共享集群,大客户独立数据库或独立部署。
多租户和 RBAC 有什么关系?
RBAC 解决租户内部权限,多租户解决租户之间隔离,两者要组合。
总结
多租户 SaaS 的核心是租户识别、数据隔离、权限隔离、配置隔离和资源隔离。面试回答一定要强调 tenantId 贯穿全链路,不能只在表里加一个字段。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Junly博客!
评论


