限量版仔
楼主
发布于 2023-6-19 13:13:45
阅读 890
查看全部
目录
需求点
多租户架构示意图
技术栈
技术点
GetWay
效劳
线程级缓存
第三方接口
MQ消息
文件系统
DAO层
总结
多租户架构,是基于一套代码运行多个公司的业务的架构。如今基于如下构造:
需求点
- 1. 不同公司域名,或者用户名@公司简写
- 2. 网关解析域名和租户映射,并存储
- 3. 效劳之间传送租户信息
- 4. 业务系统接到恳求( HTTP恳求,RPC恳求,MQ消息 )就先获取传送的租户信息
- 5. 效劳里线程级别存储租户信息,部分框架会复用线程,所以处置一个恳求后需要清空租户
- 6. 存储数据,文件 都需要根据租户各自
- 7. 跟第三方通信(RPC恳求,MQ消息)也需要 添加租户信息
复制代码 多租户架构示意图
技术栈
网关:getway
效劳:springmvc,springboot,struct2
线程级缓存:THReadLocal
PRC:Dubbo
HTTP:Feign
MQ:RocketMQ
File:SSO,S3,FastDFS,FTP
耐久化:Mybatis(数据源,Sql解析)
DB:Mysql
技术点
GetWay
解析租户
添加租户到HTTP Header中,位置:Feign Interceptor
效劳
Springmvc,SpringBoot,Struct2
每个组件都有Filter或者Interceptor,解析后放在缓存中
线程级缓存
使用ThreadLocal,一个线程内可以用。
父子线程就穿不过去了,需要用InheriableThreadLocal。
详细代码分析见
第三方接口
PRC:Dubbo 拦截器
HTTP:Feign 拦截器
MQ消息
MQ:RocketMQ
文件系统
File:SSO,S3,FastDFS,FTP
依照租户ID区分不同的途径
DAO层
耐久化:Mybatis(数据源,Sql解析)
假设分表,单表添加了TenantID作数据的分别,需要Sql中表名或者where中添加条件(详细参考:Saas.数据权限控制(Sql解析)_凯瑞.路的博客-网站博客)
假设分库,动态数据源AbstratRoutingDataSource,Mycat中间件
总结
这是一个框架类的文章,目的就是晓得哪个位置需要干什么事,详细技术细节参考其他Saas系列文章。 |
|