伙伴云客服论坛»论坛 S区 S产品资讯 查看内容

0 评论

0 收藏

分享

Saas.多租户架构

目录
需求点
多租户架构示意图
技术栈
技术点
GetWay
效劳
线程级缓存
第三方接口
MQ消息
文件系统
DAO层
总结
多租户架构,是基于一套代码运行多个公司的业务的架构。如今基于如下构造:
Saas.多租户架构-1.jpg


需求点
  1. 1. 不同公司域名,或者用户名@公司简写
  2. 2. 网关解析域名和租户映射,并存储
  3. 3. 效劳之间传送租户信息
  4. 4. 业务系统接到恳求( HTTP恳求,RPC恳求,MQ消息 )就先获取传送的租户信息
  5. 5. 效劳里线程级别存储租户信息,部分框架会复用线程,所以处置一个恳求后需要清空租户
  6. 6. 存储数据,文件 都需要根据租户各自
  7. 7. 跟第三方通信(RPC恳求,MQ消息)也需要 添加租户信息
复制代码
多租户架构示意图

Saas.多租户架构-2.jpg


技术栈

网关: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系列文章。

回复

举报 使用道具

全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

骑驴追火箭
注册会员
主题 16
回复 19
粉丝 0
|网站地图
快速回复 返回顶部 返回列表