多租户架构设计复盘:实习中的一堂硬课

2025 年暑期,我在武汉赢派有限公司技术研发部担任 Java 全栈实习生。接手的第一个挑战就是为 B 端旅游系统“趣游兔”重构多租户架构。系统采用 Spring Boot 3.4.6 + Vue3,业务线覆盖八大模块,一旦租户数据串租就可能导致严重事故。下面分享我经历的三个关键步骤。

1. 数据隔离策略

  • 问题:旧系统只通过库级别区分租户,但为了节省成本又合并到同一实例,导致 SQL 漏写条件时易串租。
  • 方案:在核心表加租户 ID 字段,使用 MyBatis 拦截器统一注入租户条件;借助 Sa-Token 的自定义上下文在每次请求中传递租户信息。
  • 结果:60+ API 全量覆盖,联合测试期间未再出现串租告警。

2. 缓存与权限

  • 问题:Redis 之前只存放基础配置,多个租户共享相同 key,缓存污染频繁。
  • 方案:设计 tenant:{id}: 前缀策略,结合 TTL 控制每个租户的缓存;权限层面拆分到租户维度,配合 Sa-Token 细粒度鉴权。
  • 结果:缓存命中率提升到 85%,新接入租户也能快速完成权限配置。

3. 监控与演练

  • 问题:上线后一旦出现串租,需要快速定位。
  • 方案:用 SkyWalking + 自研拦截器记录租户 ID 和请求链路;编写脚本模拟高并发写入,验证隔离策略。
  • 结果:上线后系统稳定性保持在 99.9%+,排查一次真实工单只花 5 分钟。

小结

这次实践让我真正理解“架构”并不是 PPT,而是从数据、缓存、权限到监控的全链路。后续我也把同样的方法带回学校比赛管理系统的设计中,希望这篇复盘能给你一点参考。

Logo

© 2025 李陈康

Twitter Github ZCool Behance RSS