saas系统多租户数据隔离的实现(一)数据隔离方案

摘要:
聊完以后,实在手痒难耐,于是花了两天时间自己实现了两个saas系统多租户数据隔离实现方案。总结saas系统中需要解决的最核心的问题是租户的数据隔离问题,我们看到解决这个问题有好几种方式,这就需要我们在业务场景中去根据实际情况进行选择。
0. 前言

前几天跟朋友聚会的时候,朋友说他们公司准备自己搞一套saas系统,以实现多个第三方平台的业务接入需求。聊完以后,实在手痒难耐,于是花了两天时间自己实现了两个saas系统多租户数据隔离实现方案。俗话说“独乐乐不如众乐乐”,所以我把我的“研究成果”写出来,让大家乐呵乐呵。

在分享我的研究成果之前,我们先了解一下相关的定义吧。如果对这部分内容熟悉的同学,可以直接略过。

1.什么是saas系统

引用百度百科上面的描述,“SaaS平台是运营saas软件的平台。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。SaaS 是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入。”

也就是说,我只需要能连接上互联网,并且给saas平台交租金,我就能用saas平台给我提供的系统服务。这方面最典型的例子就是各种云平台,例如阿里云。既然我能通过互联网使用saas平台提供的服务,那么其他人当然也是可以的。于是这就产生了一个多租户的问题。

2.什么是多租户

多租户问题,简单来说,是一种架构设计方式,就是在一台或者一组服务器上运行的saas系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离。从这种架构设计的模式上,不难看出来,多租户架构的重点就是同一套程序下多个租户数据的隔离。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改。

3.数据隔离方案

目前saas多租户系统的数据隔离有三种解决方案,即为每个租户提供独立的数据库、独立的表空间、按字段区分租户,每种方案都有其各自的适用情况。下面我们依次讲解这3种方案。

3.1每个租户提供独立的数据库系统

这种方案的实现方式是所有租户共享同一个应用,但应用后端会连接多个数据库系统,一个租户单独使用一个数据库系统。这种方案的用户数据隔离级别最高,安全性最好,租户间的数据能够实现物理隔离。但成本较高。

saas系统多租户数据隔离的实现(一)数据隔离方案第1张

3.2每个租户提供独立的表空间

这种方案的实现方式,就是所有租户共享同一个应用,应用后端只连接一个数据库系统,所有租户共享这个数据库系统,每个租户在数据库系统中拥有一个独立的表空间。

saas系统多租户数据隔离的实现(一)数据隔离方案第2张

3.3按租户id字段区分租户

这种方案是多租户方案中最简单的设计方式,即在每张表中都添加一个用于区分租户的字段(如租户id或租户代码)来标识每条数据属于哪个租户,其作用很像外键。当进行查询的时候每条语句都要添加该字段作为过滤条件,其特点是所有租户的数据全都存放在同一个表中,数据的隔离性是最低的,完全是通过字段来区分的。

saas系统多租户数据隔离的实现(一)数据隔离方案第3张

4.三种数据隔离方案的优劣势分析
隔离方案成本支持租户数量优点不足
独立数据库系统隔离级别最高,安全性最好,能够满足不同租户的独特需求,出现故障时恢复数据比较容易数据库需要独立安装,维护成本和购置成本高
共享数据库,独立表空间较多提供了一定程度的逻辑数据隔离,一个数据库系统可支持多个租户出现故障的情况下,数据恢复相对而言比较复杂
按租户id字段区分非常多维护和购置成本最低,每个数据库能够支持的租户数量最多隔离级别最低,安全性也最低,数据备份和恢复非常复杂,需要逐表逐条备份和还原
5.为土豪准备的解决方案

前面咱们说的那三种数据隔离解决方案,都是多个租户共享一个应用实例的。如果你是土豪,非常的不差钱,那这里就还有一种一个租户一个应用实例的解决方案,直接为土豪量身定制,纯24k钛合金的。

saas系统多租户数据隔离的实现(一)数据隔离方案第4张

这种方案是在多实例系统的基础上进行负载均衡,将租户的访问请求路由到其专属的租户系统上去。这种多实例的部署架构,可以为每个租户定制代码,以及提供特色服务。当然,使用这种解决方案提供服务的租户,那也肯定不差钱,能负担高额租金的“大客户”了。

总结

saas系统中需要解决的最核心的问题是租户的数据隔离问题,我们看到解决这个问题有好几种方式,这就需要我们在业务场景中去根据实际情况进行选择。

下一篇文章,我们就来看一下,如何根据租户id字段来实现同一张表中不同租户的数据的crud(即增删改查)。提前剧透一下,我们将使用 springboot + mybatisplus来实现这种数据隔离方案。

参考资料

https://www.mingzhe.org/blog/2017/08/01/multiple-tenants-architecture-introduction/

免责声明:文章转载自《saas系统多租户数据隔离的实现(一)数据隔离方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Groovy 学习手册(5)腾讯云大数据套件Hermes-MR索引插件使用总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

怎么删除表空间对应的某一个数据文件

如果想要删除表空间的数据文件,最好且最安全的办法是,删除表空间后重建 步骤如下:   1,导出该表空间中的所有内容;   2,删除表空间:DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS;   3,重新创建新的表空间及其数据文件;   4,将导出的数据导入表空间; 但是在实际应用环境中,数...

越狱的 ios 如何 获取 读取 提取 手机上的 短信 通话记录 联系人 等信息

http://willson.sinaapp.com/2011/12/iphone 获取短信脚本.html  Iphone获取短信脚本http://bbs.9ria.com/thread-209349-1-1.html          IPhone短信相关部分研究(转载)http://blog.csdn.net/slinloss/article/deta...

Oracle查询用户权限角色(dba_sys_privs) (转)

Oracle查询用户权限 (转自:CSDN) 数据字典 1、动态数据字典是以v$xxx开始的数据字典,在数据库中约有150个左右,这些数据字典反映数据库动态运行状况,在不同时间查询会得到不同的结果。 2、DBA数据字典是以DBA_xxx表示,该数据字典存储数据库结构,查询DBA数据字典可以反映数据库结构设置,管理磁盘空间和表空间、事务与回退段、用户与表空间...

数据层交换和高性能并发处理(开源ETL大数据治理工具--KETTLE使用及二次开发 )

ETL是什么?为什么要使用ETL?KETTLE是什么?为什么要学KETTLE?        ETL是数据的抽取清洗转换加载的过程,是数据进入数据仓库进行大数据分析的载入过程,目前流行的数据进入仓库的过程有两种形式,一种是进入数据库后再进行清洗和转换,另外一条路线是首先进行清洗转换再进入数据库,我们的ETL属于后者。 大数据的利器大家可能普遍说是hadoo...

SQLPrompt(可视化工具插件助手) 安装和破解

1、sqldbx工具介绍 在介绍SQL Prompt 5.3.4.1以前,先介绍另一款sql工具sqldbx。它也是一款拥有智能提示的sql编程工具,并且小巧灵活,支持多种类型的数据库(不只仅是SQL Server)。惟一的缺点就是它不支持中文,数据表中查询到的中文在这款工具的结果集中显示都是乱码的。总而言之,它也是一款可以提升sql编程效率的工具。编程...

达梦、oracel、mysql数据库兼容

联合表更新sql语句: 只支持mysql、oracle,不支持达梦 update to_pub_report a, to_pub_rec_process b set a.Satisfy_ID = 1, a.Satisfy_Content = '默认满意' where a.re...