文章插图
开发过SaaS系统平台的小伙伴一定对多租户这个概念不陌生,简单来说一个租户就是一个公司客户,多个租户共用同一个SaaS系统,一旦SaaS系统不可用,那么所有的租户都不可用 。你可以这么理解SaaS系统就像一栋大楼,而租户就是大楼里面租办公楼层的公司,平时每家公司做着自己的业务,互不干扰,但是一旦大楼的电梯坏了,那么影响到的就是所有的公司 。
多租户问题,其是一种架构设计方式,就是在一台或者一组服务器上运行的SaaS系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离 。从这种架构设计的模式上,不难看出来,多租户架构的重点就是同一套程序下多个租户数据的隔离 。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改 。在讲多租户数据隔离实现之前,先来看看什么是SaaS系统 。
什么是SaaS系统?SaaS平台是运营saas软件的平台 。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,租户(企业)无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统 。SaaS 是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入 。
简单来说就是租户给SaaS平台付租金就能使用平台提供的功能服务,当下比较典型就是各种云平台、云服务厂商 。
多租户数据隔离架构设计目前saas多租户系统的数据隔离有三种架构设计,即为每个租户提供独立的数据库、独立的表空间、按字段区分租户,每种方案都有其各自的适用情况 。
一个租户独立一个数据库一个租户独立使用一个数据库,那就意味着我们的SaaS系统需要连接多个数据库,这种实现方案其实就和分库分表架构设计是一样的,好处就是数据隔离级别高、安全性好,毕竟一个租户单用一个数据库,但是物理硬件成本,维护成本也变高了 。
独立的表空间这种方案的实现方式,就是所有租户共用一个数据库系统,但是每个租户在数据库系统中拥有一个独立的表空间 。
按租户id字段隔离租户这种方案是多租户方案中最简单的数据隔离方法,即在每张表中都添加一个用于区分租户的字段(如tenant_id或org_id啥的)来标识每条数据属于哪个租户,当进行查询的时候每条语句都要添加该字段作为过滤条件,其特点是所有租户的数据全都存放在同一个表中,数据的隔离性是最低的,完全是通过字段来区分的,很容易把数据搞串或者误操作 。
三种数据隔离架构设计的对比如下:
成本
支持租户数量
优点
缺点
独立数据库系统
高
少
【聊聊 SaaS 多租户系统数据隔离实现方案】数据隔离级别高,安全性,可以针对单个租户开发个性化需求
数据库独立安装,物理成本和维护成本都比较高
独立的表空间
中
较多
提供了一定程度的逻辑数据隔离,一个数据库系统可支持多个租户
数据库管理比较困难,表繁多,同时数据修复稍复杂
按租户id字段区分
低
多
维护和购置成本最低,每个数据库能够支持的租户数量最多
隔离级别最低,安全性也最低
大部分公司都是采用第三种:按租户id字段隔离租户架构设计实现多租户数据隔离的 。接下来我们就来看看代码层面怎么实现多租户数据隔离的 。关注公众号:码猿技术专栏,回复关键词:1111 获取阿里内部JAVA性能调优手册!
MyBatis-plus优雅实现多租户数据权限隔离上面我们说过按租户id字段隔离租户这种方式就是在获取数据的时候对每一条SQL语句添加租户id作为过滤条件来隔离租户数据的 。但是这样意味着每个查询SQL都必须加上租户id这个过滤条件,如果漏加就意味着会查询出不同租户的数据,这是绝对不允许的,同时每个查询接口都需要手动设置过滤条件,重复劳动,一点都不够优雅 。这时候就不得不说说mybatis-plus的多租户插件了,看看它如何优雅实现多租户隔离的?再讲述之前,我们先思考一下如何优雅实现数据隔离?首先我们要求每一条SQL都加上租户id这个过滤条件,这意味着我们需要解析原始SQL在合适的地方加上租户id过滤条件,我们知道mybatis提供扩展点就是拦截器,可以对SQL语句处理前后进行增强逻辑,分页插件就是这么做的,所以我们这里要增强SQL自然也是这样,接下来我们就来看看mybatis-plus多租户插件是怎么实现多租户数据隔离的,插件官网介绍地址:https://www.baomidou.com/pages/aef2f2/#tenantlineinnerinterceptor,该拦截器部分源码如下:
推荐阅读
- 孙怡|离开董子健10个月,才懂孙怡的“幸福有点难”,有多难?
- 职场故事|辞职不到1小时,被徒弟踢出群,怒退30个工作群,拉黑100多同事
- |与寰球高管牵手的董小姐,身份被扒个底朝天,多张私照曝光爱好广
- 汤圆没有冰箱能放多久 汤圆保质期一般多久
- 马蹄吃多了有什么坏处 马蹄煮几分钟就可以吃了
- 金桔冰糖水可以多喝吗 金桔冰糖水孕妇能喝吗
- 车厘子怎么保存放的时间长 车厘子放冰箱可以保存多久
- 中国电影|杭州“三多市长”落马,玩弄多位女明星,最爱制服搭高跟鞋
- 46亿光年是多少年的
- 5寸管等于多少厘米