SpringCloudAlibaba微服务体系下SaaS多租户数据隔离的技术实现:数据库Schema隔离、缓存Key隔离、消息队列Topic隔离的完整方案。
SaaS平台的核心挑战之一是多租户数据隔离。智溯云需要在保证租户间数据完全不可见的前提下,最大化资源利用率。本文分享我们在SpringCloudAlibaba微服务架构下的多租户隔离实践。
数据库层面采用Schema隔离方案。每个租户在MySQL中拥有独立的Schema,通过MyBatis拦截器在SQL执行前动态切换数据源。相比Shared Database方案,Schema隔离在安全性和资源弹性之间取得了最佳平衡:租户间数据物理隔离,但共享数据库实例的计算和存储资源。
缓存隔离是容易忽视的环节。我们在Redis中采用了Key前缀方案:所有缓存Key以tenantId为前缀(如{tenantId}:product:list),通过定制Spring Cache的KeyGenerator自动注入租户信息。消息队列层面,RocketMQ采用Topic隔离,每个租户拥有独立的消息Topic(如order-{tenantId}),确保租户间消息完全隔离。
在网关层,我们通过Spring Cloud Gateway的GlobalFilter从JWT Token中提取tenantId,写入ThreadLocal上下文。后续所有服务调用通过Feign拦截器自动透传tenantId,避免业务代码显式传递。同时实现了租户级别的限流和熔断策略,防止单租户异常流量影响其他租户。