day14-SaaS多租户数据隔离

day14-SaaS多租户数据隔离

前端: localstorage后端: 网关: 全局过滤器 web:Springmvc的拦截器, Dubbo隐式传参 RpcContext producer: Dubbo隐式传参 RpcContext获取目标值 MybatisPlus:通过多租户插件实现数据隔离

1.说出多租户实现方案?1.1 应用层数据层都隔离,如下图所示:优点:● 各租户之间都是独立的.可以简化数据模型和业务模型的扩展设计.● 可以满足不同租户的独特的需求.● 出现故障时恢复数据比较简单,各系统互不影响.缺点:● 成本比较高,每个服务的运营维护成本太高了.● 在进行业务扩展的时候要保证版本的和兼容性问题.

1.2 应用层共享数据层隔离优点:● 各租户数据库是独立的.可以简化数据模型扩展设计.● 可以满足不同租户的独特的需求.● 出现故障时恢复数据比较简单,各系统互不影响.● 应用层面的维护成本和购置成本有所减少.缺点:● 数据层面:一方面是独立部署数据库服务器成本高,还有当并发量比较高时成本也是需要更高的.● 应用层面:在进行业务扩展的时候要保证版本的和兼容性问题.● 运维层面:运维成本高,应用层面的运维在版本控制的问题上难度增加.

1.3 应用层数据层共享数据隔离采用的逻辑上隔离,即将表的字段进行隔离优点:● 维护和成本低,允许每个数据库支持的租户数量最多.● 服务只需要部署一套即可● 功能定制可以通过权限配置实现.缺点:● 集群服务维护成本较高.

2.项目中是使用什么技术实现多租户的?用到了哪些技术?Mybatis-plus就提供了一种多租户的解决方案,实现原理是==基于Mybatis Interceptor插件【拦截器TenantLineInnerInterceptor)】==行实现的,

3.各个系统如何分析数据库表是否需要忽略?通过mybatis-plus中的拦截器拦截,然后在执行sql语句的时候根据表明来进行判断是否需要忽略,即执行里面的ignoreTable的方法,返回值为true就是需要忽略,false就是不忽略,进行数据隔离.

4.我们平台租户字段有几个,分别是如何传递到各个服务的?有两个字段:enterprise-id,store-identerprise-id是存放在jwttoken里面的,登录时都会携带jwttoken,登录后将其存入到localstorage中,然后请求到网关时,会有全局过滤器拦截前端的请求,然后解析jwttoken,得到uservo字段从而拿到enterprise-id.网关再进过路由到指定的web服务,重新在请求头中设置uservo对应 的 数据.然后web服务使用springMVC的拦截器拦截网关请求获取请求头,解析uservo,在调用生产者时,使用dubbo隐式传参将参数存入rpccontent上下文中,然后获取uservo进而得到enterprise-id.store-id稍微有点不一样,他不是存放在JWTtoken中的,因为在商家平台中可以切换门店,门店换了数据也需要换,但是用户并没有退出登录,所以不能使用JWTtoken来存储,我们单独将其放在storetoken中,这样在切换门店的时候前端会将storetoken的值进行修改即可.其他的都是类似的.

相关推荐

剑网3天工树怎么点
365bet注册网址

剑网3天工树怎么点

📅 10-10 👁️ 6892
探索联想Flex3(轻薄便携、触控娱乐、高效办公,联想Flex3满足你的一切需求)
香港香港摩天轮游玩攻略简介,香港香港摩天轮门票/地址/图片/开放时间/照片/门票价格【携程攻略】