标准答案
- 身份层从登录态和成员关系中确定可信租户上下文,不能只相信客户端请求传来的 tenantId。
- 数据层根据安全与规模选择行级、Schema、数据库或集群隔离,并让所有查询、缓存 Key、搜索和对象存储路径带有受控租户边界。
- 配置和功能开关可按租户覆盖,但需要默认值、权限、版本和回滚,避免一个租户配置影响全局。
- 计费和资源层记录用量、配额、限流和超额策略,确保重度租户不会挤占其他租户或绕过计费。
题目解析
多租户问题的本质是“任何入口都不能越过边界”。API、后台任务、消息消费、导出、缓存、日志和运维工具都需要同样的租户检查。
隔离级别可以随着业务成长升级,但迁移成本很高。早期至少要让数据所有权和访问路径可识别,避免以后无法拆分。
常见误区
- 只在 HTTP 层过滤 tenantId,后台任务和消息消费者没有租户上下文。
- 缓存 Key 不包含租户,导致数据串租户。
- 将租户配额当作 UI 提示,而不是服务端强制规则。