0
点赞
收藏
分享

微信扫一扫

SaaS多租户数据隔离的三种解决方案


什么是SaaS?

SaaS是Software as a Service的缩写,意为软件即服务。SaaS是一种软件部署模式,第三方供应商在云基础设施上构建应用程序,并以订阅的形式,通过互联网向客户提供这些应用程序,不要求客户预先建设底层基础设施。这意味着软件可以在任何有互联网连接和网络浏览器的设备上访问,而不像传统软件那样只能在本地机器上安装。

SaaS服务通常基于一套标准软件系统为成百上千的不同客户(又称租户)提供服务。这要求SaaS服务要能够支持不同租户之间数据和配置的隔离,从而保证每个租户数据的安全与隐私,以及用户对诸如界面、业务逻辑、数据结构等的个性化需求。由于SaaS同时支持多个租户,每个租户可能包含多个用户,这对支撑软件的基础设施平台的性能、稳定性、扩展性具有较高要求。

什么是多租户?

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

数据隔离方案

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

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

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

SaaS多租户数据隔离的三种解决方案_数据库

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

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

SaaS多租户数据隔离的三种解决方案_数据库_02

按租户id字段区分租户

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

SaaS多租户数据隔离的三种解决方案_数据_03

三种数据隔离方案的优劣势分析

隔离方案

成本

支持租户数量

优点

不足

独立数据库系统



隔离级别最高,安全性最好,能够满足不同租户的独特需求,出现故障时恢复数据比较容易

数据库需要独立安装,维护成本和购置成本高

共享数据库,独立表空间


较多

提供了一定程度的逻辑数据隔离,一个数据库系统可支持多个租户 出现故障的情况下,数据恢复相对而言比较复杂

按租户id字段区分


非常多

维护和购置成本最低,每个数据库能够支持的租户数量最多 隔离级别最低,安全性也最低,数据备份和恢复非常复杂,需要逐表逐条备份和还原

高成本的解决方案

前面咱们说的那三种数据隔离解决方案,都是多个租户共享一个应用实例的。如果你非常的不差钱,那这里就还有一种一个租户一个应用实例的解决方案。

SaaS多租户数据隔离的三种解决方案_分布式_04

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

谈谈按租户id字段区分租户

目前我所在的公司,是一家大的saas软件公司,用户数量比较大的租户几百家,采用的就是按租户id字段区分数据。

方案就是,每张表都存一个机构id字段,代表每一个租户,开发时增删改查的sql必须携带机构id字段。
就这么简单,而且成本最低的。

但问题有几点:

  • 安全性较低,如果漏了机构id,很容易暴露出其他租户的数据。
  • 单个表的数据会非常大,对租户而言,体验并不好。
  • 定制化需求比较复杂,如果某个租户有特殊的需求开发起来比较复杂。


举报

相关推荐

0 条评论