java的多租户saas架构 saas 多租户 解决方案_数据


在基于云平台提供SaaS软件服务流行的今天,多租户的设计是必须得具备的基本功能需求。

软件上云的核心好处就是通过资源的共享提供资源的利用率。这里面的资源只要分为两类。一是计算资源,二是存储资源。

SaaS的核心就是多个分包商公用一套软件系统,从而减少自己搭建软件系统的成本开支。但是有的东西可以共用,有的东西不能共用,所以必须要有一套隔离机制,也就是租户隔离。

数据是当下最有价值的资产,是不能租户间共享的。而计算资源一般比较昂贵,并且不会保留最终数据,一般在租户设计中这部分是可以共享的。因此,租户隔离的设计一般制定的是数据存储和读取的隔离方案。

多租户的数据隔离方案,常见的有三种:

独立数据库

这种方式是为每个租户创建一个独立的数据库,相对于从物理层面对租户间的数据进行了隔离。是一种非常彻底的隔离方案。

这种方案的优点是:数据的隔离非常彻底,业务代码和数据库设计都比较简单。租户的数据库故障不会对其它租户造成影响。

这种方案的缺点是:违背了SaaS共用资源的初衷,资源共享利用率低,占用资源多费用昂贵。

这种方案的应用场景:一些对数据安全要求非常高的行业,如电信、银行、金融等行业。

独立Schema(用户)

这种方案采用所有租户共享同一个数据库的方式。但通过独立的Schema(用户)对每个租户进行区分。隔离级别有所减弱,但是一个比较折中和中庸的方案。

这种方案的优点和缺点都比较中庸,既提供了一定程度的数据隔离,但是数据又不是完全的隔离,如果是数据库层面的故障,仍然会对所有的租户产生影响。同时在资源利用率优于第一种方案。

共享数据表

这种方案从物理层面上不隔离租户的数据,通过在表中添加租户的识别字段,实现租户间数据的逻辑隔离。

这种方案的优点是:最大限度的共享了资源,实现的成本低廉。

这种方案的缺点是:数据隔离非常低,不同租户间在功能和性能上都会相互影响。

选择合适的方案

以上几种方案都有其适合的应用场景。在实际选择具体方案时,我们需要从实际的业务场景出发,从数据的安全性、系统成本预算、计划支持的租户数量等方面考量,选择一个比较合适的方案。同时,软件开发团队的技术储备,也是一个需要关注的考量因素。