一、SaaS基础概念
SaaS 是 Software-as-a-Service(软件即服务)的简称,是一种区别于传统软件购买和安装的、互联网化的“按需租用”软件交付模式,也是一种面向软件应用的云服务模式。(SaaS可以理解为服务器、数据库、网络、代码等都放在云上)
举个例:现在公司需要一套管理软件系统,老板交给你负责。
那么你可以有三种解决方案:
- 自己开发一套
- 买一套回来安装
- 租一个线上系统
SaaS产品大概分为几类
- 业务垂直型
专门针对某个特定的业务环节,例如人事、财税、项目协同等等;代表产品包括OA(比如A8、钉钉)、CRM(纷享销客、销售易)、金蝶ERP。它们具有行业普适性,能够在大多数企业中得到应用;
- 行业垂直型
专门针对某个特定的行业,围绕这个行业的核心业务,为企业客户提供一套完整的业务系统;比如餐饮行业的SaaS基本上是围绕收银、点餐的,代表产品有二维火、客如云等。
SaaS的销售模式—此处只是简单介绍
SaaS产品有直销、分销、免费三种销售模式,有时也会将这三种模式结合使用。
二、业务架构
一般来说,SaaS产品由租户实例、用户界面、管理平台三个部分构成,我们可以把它们分别称为租户端、用户端、平台端。
如图:
租户端:
在这个软件系统里面,把不同租户之间的数据进行了隔离。这样每个租户(企业)在使用的时候,因为看不到其他企业的数据,就好象只有自己在使用这一套软件。
用户端:
一般是既有网站、也有移动端(APP或小程序)的组合模式,在使用上与非SaaS产品区别不大。
平台端:
管理平台是给SaaS厂商的内部员工使用的。主要作用对租户、实例、租约进行管理,简单来说就是管理客户信息、帮客户开通和续约。
三、技术架构
首先设计好一个独立软件产品(非SaaS)的所有功能和业务逻辑。 然后给所有数据都加上客户标识,按客户维度对数据进行逻辑分离。 完成这两步,就已经能够形成“实例”,也就是SaaS化最重要的第一步。
什么是多租户?
多租户问题,简单来说,是一种架构设计方式,就是在一台或者一组服务器上运行的saas系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离。
从这种架构设计的模式上,不难看出来,多租户架构的重点就是同一套程序下多个租户数据的隔离。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改。
对于“多租户”的架构来说,会引入一些系统设计的复杂度。一方面,如果完全隔离,资源使用上会比较浪费,如果共享,又会导致程序设计的一些复杂度。
通常来说多租户的做法有三种。
1.完全独立的设计。每个租户有自己完全独立的服务和数据。
2.独立的数据分区,共享的服务。多租户的服务是共享的,但数据是分开隔离的。
3.共享的服务,共享的数据分区。每个租户的数据和服务都是共享的。
这三种方案各有优缺点,如图所示。
通过上图,可以看到:
- 如果使用完全独立的方案,在开发实现上和资源隔离度方面会非常好,然而,成本会比较高,计算资源也会有一定的浪费。
- 如果使用完全共享的方案,在资源利用和成本上会非常好,然而,开发难度非常大,而且数据和资源隔离非常不好。
所以,一般来说,技术方案会使用折衷方案,也就是中间方案,服务是共享的,数据通过分区来隔离,而对于一些比较重要的租户(需要好的隔离性),则使用完全独立的方式。
然而,在虚拟化技术非常成熟的今天,我们完全可以使用“完全独立”(完全隔离)的方案,通过底层的虚拟化技术(Hypervisor 的技术,如 KVM,或是 Linux Container 的技术,如 Docker)来实现物理资源的共享和成本的节约。
1. SaaS多租户数据存储隔离
1. 数据存储隔离方案
目前saas多租户系统的数据隔离有三种解决方案,即为每个租户提供独立的数据库、独立的表空间、按字段区分租户,每种方案都有其各自的适用情况。下面我们依次讲解这3种方案。
1.每个租户提供独立的数据库系统
这种方案的实现方式是所有租户共享同一个应用,但应用后端会连接多个数据库系统,一个租户单独使用一个数据库系统。这种方案的用户数据隔离级别最高,安全性最好,租户间的数据能够实现物理隔离。但成本较高。
使用场景
一般适用于大型租户,可以容忍表数据结构的差异,由应用实例进行多租户逻辑兼容。
2.每个租户提供独立的表空间
这种方案的实现方式,就是所有租户共享同一个应用,应用后端只连接一个数据库系统,所有租户共享这个数据库系统,每个租户在数据库系统中拥有一个独立的表空间,即一般通过租户名称作为后缀如:goods_wm,goods_mdl,goods_gdsy等,一般运用于中型企业租户。
3.按租户id字段区分租户
这种方案是多租户方案中最简单的设计方式,即在每张表中都添加一个用于区分租户的字段(如租户id或租户代码)来标识每条数据属于哪个租户,这种方案使用的也是最多的。
当进行查询的时候每条语句都要添加该字段作为过滤条件,其特点是所有租户的数据全都存放在同一个表中,数据的隔离性是最低的,完全是通过字段来区分的。
使用场景
一般运用于中小型企业租户,租户表数据结构差异化最小。
优劣点
优点:
1.成本最小
2.架构设计简单
缺点:
1.安全性较低,如果漏了租户id,很容易暴露出其他租户的数据。
2.单个表的数据会非常大,对租户而言,体验并不好。
3.定制化需求比较复杂,如果某个租户有特殊的需求开发起来比较复杂。
三种数据隔离方案的优劣势分析
2. SaaS多租户应用隔离
前面咱们说的那三种数据隔离解决方案,都是多个租户共享一个应用实例的。如果你非常的不差钱,那这里就还有一种一个租户一个应用集群的解决方案。
这种方案是在多实例系统的基础上进行负载均衡,将租户的访问请求路由到其专属的租户系统上去。这种多实例的部署架构,可以为每个租户定制代码,以及提供特色服务。当然,使用这种解决方案提供服务的租户,那也肯定不差钱,能负担高额租金的“大客户”了。