SaaS软件服务基于大规模定制的数据层架构研究*

2012-10-08 01:58罗小利吴清烈任鸿美
电信科学 2012年4期
关键词:租户数据表数据模型

罗小利,吴清烈,任鸿美

(东南大学电子商务系 南京211189)

1 引言

SaaS改变了传统的软件提供方式,将软件以服务的方式通过互联网提供给客户,使得SaaS软件服务商与客户从售卖关系转化为服务关系[1]。SaaS软件服务商与客户是一对多模式[2],所以SaaS软件服务成功的关键是实现强大的多租户,保证海量数据的高效性和安全性。

SaaS软件服务商要实现盈利,必须把成本控制在相对较低的水平,以吸引更多的租户。在传统的信息化建设中,软件提供商与客户之间是一对一的关系,针对客户特定的数据需求,只需要设计特定的一套应用程序和数据架构,就可以保证数据的安全性和高效性。在SaaS模式下,多租户(multi tenancy)是SaaS模式的典型特征,其基本原理是在实现公共资源共享、数据共享的同时,保证客户特定数据的分开[3]。因此,设计稳定安全的数据架构,使其在多租户模式下既可以保证租户特定数据的隔离性、安全性,又可以使租户最大程度地共享数据架构,是SaaS应用和推广的一个关键因素。

本文首先分析SaaS软件服务在数据层应用大规模定制的必要性,针对如何处理多租户模式下的数据安全和共享问题对3种数据架构设计方案进行分析和比较;接着讨论共享数据库、共享Schema架构下可行的个性化数据扩展方案,以满足客户对数据的个性化需求;最后,用案例证明SaaS软件服务基于大规模定制的数据扩展方案的可行性。

2 SaaS软件服务基于大规模定制的数据层研究思路

在SaaS模式下,按照软件构件进行数据切分,租户共享领域共性构件,对这些共性构件的存储,比如公共的程序数据、公共配置数据等,可以在共用的存储空间存放,而不必在每个租户的存储空间复制一次再进行存储;即使是同一软件构件产生的业务数据,客户的某些属性也是相同的,可以采用相同的数据结构来定义。这为SaaS软件服务在数据存储层应用大规模定制管理理念提供了可能性。

SaaS软件服务商面对的是众多客户,每个客户根据自己的业务需要会产生各自独特的数据需求,所要求的数据结构也会有所不同,并且即使是同一客户,其需求的数据结构也会随着业务变化发生变化。这就要求SaaS软件服务商设计满足客户个性化需求的动态数据结构,既可以满足客户特定的数据需要,又可以保证客户业务数据的隔离[4],以实现SaaS模式的安全性、高效性。

在数据存储层应用大规模定制,可以有效地利用存储空间,提高数据库的实用性和灵活性。根据以上两点,本文按照软件构件划分数据,将领域共性构件的数据集中存储在一个数据库中,将客户的业务数据存放在另一个数据库中。针对客户的业务数据,比较和分析了3种数据架构,指出它们的适用范围及优缺点。同一软件构件下客户的业务数据采用统一的数据结构,然而不同租户可能有不同的数据模型要求,需要在标准数据结构的基础上实现扩展性,以满足不同租户特定的需求。然而尤其在共享数据、共享Schema数据架构下,租户使用的是相同的数据表,一个租户对数据结构的修改或者扩展可能会影响其他租户对该数据库的使用,因此需要实现动态数据扩展,既满足租户对数据模型特定的扩展,又不会影响其他租户的使用,从而节约了资源,降低了存储成本,提高了SaaS软件服务商的市场竞争力。

3 SaaS软件服务基于大规模定制的数据层架构设计

SaaS软件服务商要在竞争激烈的市场环境中取得竞争优势,应该能够以低成本保证每个租户方便、快捷地使用自己的数据。在标准数据结构的基础上实现数据模型的扩展,以满足客户独特的业务需求是SaaS软件服务能否成功推广的关键所在。

3.1 SaaS软件服务基于大规模定制的数据层整体结构

SaaS软件服务大规模定制的数据层整体结构如图1所示。

在图1所示的框架中,公共数据库存放的是公共数据,即独立于客户的数据,是所有租户共享的,如公共配置数据、公共的程序数据、公共服务数据等,租户是不能修改公共数据的。根据系统构件切分数据,切分的粒度可以是从系统、模块逐步深入切分,以实现数据存储的解耦。在某个粒度切分开来的数据存储的上层程序不能直接访问该数据,只能通过接口来调用。公共数据的存储可以是不同数据库、不同表或者物理分开的数据库等方式,由于上层程序代码是相互独立的,不能直接访问,可实现数据存储的完全松耦合,满足SaaS软件服务 “按需定制,按需付费”、服务可度量等特点。

客户数据库存放的是客户的业务数据、配置数据、应用服务器及数据库管理的程序文件。在同一系统构件下采用相同的数据结构,但可按照数据级进行区分,如客户业务数据的属性。租户可以在标准数据结构的基础上自定义需要扩展的数据,以灵活、快捷地满足客户的个性化数据需求。

在图1所示的框架下,数据访问层从业务逻辑层分离出数据访问代码,屏蔽不同的数据存储方式与数据存储层进行交互。数据访问层通过访问公共数据库来获取公共数据,但不可以修改公共数据。通过访问客户数据库来获取每个租户特定的业务数据,可以进行更新、查找、删除、创建等操作。

3.2 数据存储架构选择

SaaS模式下,多个租户共享一个应用实例,租户间的数据既有共享又有隔离[5],在两者之间寻求平衡是必须考虑的一个重要因素,同时还要考虑SaaS软件服务提供商和租户间共同寻求的低成本、高效性因素。租户共享的公共数据库,不论采取何种存储方式,均能实现数据存储的松耦合,且客户是不能修改公共数据的,所以在这里不再累述。客户数据库按照数据隔离和共享的程度可以划分为以下3种数据架构。

(1)独立数据库

一个租户对应一个专门的数据库[6~9],如图2所示,租户可以最大程度地按照自己的需求设计数据结构,通过元数据的描述为每个数据库与其对应的租户建立联系,是实现数据隔离最安全的数据架构。在这种数据模型下,租户可以简单方便地实现数据扩展,以满足不同租户的个性化需求。同时,数据备份也会要求使用专用的数据库,当发生故障时,可以简单快捷地恢复租户的数据,客户的私有数据不会被其他客户意外地访问到,安全性比较高。

这种数据架构下,一个服务器所能容纳的数据库数量会很快达到饱和,只能支持有限数量的租户,相对其他数据架构,部署和维护成本十分高,适合对数据隔离级别要求非常高的客户,如银行、医院。

(2)共享数据库、独立Schema

共享数据库、独立Schema架构实现租户的数据库共享,但每个租户都有一套各自不同的数据表架构,存储在单独的模式中,如图3所示,一个数据库存储多个租户的信息,每个租户均有自己的一套表,这些表被包含在同一个Schema描述的表组中。这种架构下,租户可以相对自由地对同一Schema下的表进行新增和修改,满足租户特定的需求。与独立数据库相同,可以便捷地扩展数据模型。

在这种数据架构下,租户的数据在一定程度上得到了较好的隔离,每个服务器可以支撑更多的租户,硬件成本相对降低,节约了服务器资源,经济实用性增强。但维护比较复杂,例如数据库出错,无论表里的数据是否损坏,需要恢复所有租户的表,需要花费很长的时间。比较适用于租户对安全级别要求比较高,且每个租户的数据表不多的状况。

(3)共享数据库、共享Schema

共享数据库、共享Schema是在同一个服务器上,以同一个数据库、同一张表来存放租户的数据,如图4所示。这种数据架构下,一张表可以包含很多租户的数据记录,租户之间通过ID来区分[10],因此共享程度最高,但数据隔离程度最低,相应的安全级别也较低。一个服务器可以最大程度地支撑租户的数量,SaaS软件服务商拥有最低的硬件成本和数据备份成本,经济适用性最好。

该架构下,多个租户共同使用一张表,租户不能按照自己的需求随意地修改数据结构,以避免影响其他租户的使用,相对其他两种架构,租户在数据结构上拥有的自由度不高。为了满足每个租户的个性化需求,SaaS软件服务商在数据扩展、配置方面比较复杂。由于很多客户共享一张表,数据安全方面需要花费更多的成本,以保障租户数据的安全性,不会因为系统异常而被其他租户访问到。与共享数据库、独立Schema一样,共享Schema架构在数据维护方面比较复杂,一旦数据库出错,数据恢复效率比较低。这种架构比较适合租户对安全级别要求较低,且每个租户数据存储量少的情况。

3.3 数据存储架构的比较

上述3种方案中,每种数据架构都有各自的优缺点及适应范围。表1从共享级别、隔离级别、维护级别、成本、数据扩展便利程度等方面比较了3种数据架构[11]。

表1 数据架构比较

从表1中可以看出,独立数据库共享级别最低,数据隔离、成本、维护级别最高,而共享数据库、共享Schema架构则相反,共享级别最高,而数据隔离最低,安全性差。独立数据库可以简单便捷地实现数据结构的扩展,以满足客户的个性化需求,并且当发生故障时可以相对简单地恢复租户的数据,易于维护。但是独立数据库需要花费大量硬件成本,租户的租金比较高。共享数据库、共享Schema架构下,很多租户共用一个表,共享程度最高,相应地成本就比较低,具有很高的经济效益,但是数据隔离程度最低,需要花费一定的精力避免租户数据的交叉访问,提高数据的安全性。

SaaS软件服务商在选择数据架构时要综合考虑各种因素,如服务的客户数量、性质、数据的安全级别要求、经济成本以及技术风险等。

4 SaaS软件服务基于大规模定制的数据扩展

在同一系统构件下,客户数据既有共同的数据结构又有独特的数据模型需求,僵化的、没有可扩展的默认数据模型是无法满足客户个性化需求的。本文以共享数据库、共享Schema架构为例,在标准数据模型的基础上讨论数据结构的可扩展性,以满足租户的特殊需求。

4.1 3种数据扩展方案

在共享数据库、共享Schema架构下,多个租户共享同一数据表,对数据结构的直接修改或者扩展会影响其他租户的使用。在传统系统应用中,每个客户部署的是不同的应用案例,用户可以定制各自的实例,增加每个客户的扩展数据,一般主要通过定制字段、预分配字段、名称值对这3种方案实现数据扩展[12]。

(1)定制字段

这种方案是根据客户的个性化需求,在数据表上添加相应的列来扩展数据,是传统应用中最简单的解决方案。扩展的列只对特定的客户有用,其他客户在该列下的值均为null,是没有实际意义的。从实际的角度出发,这种方案非常简单,不需要处理复杂的扩展数据追踪。但是在SaaS模式下,若每个租户的数据定义都在同一个表上修改,会造成表中绝大多数用户自定义字段对其他用户没有任何实际意义,浪费存储空间,甚至会严重破坏数据表的结构。因此,这种方案并不适合SaaS模式下的多租户特点。

(2)预分配字段

这种方案是指在数据表中预先设定一定数量的通用字段,类型可以设置为string,当用户需要扩展业务数据时,可以使用其中的一个或者几个字段,以满足客户的个性化需求。预分配的字段是没有固定含义的,对于不同的租户,这些字段保证的是没有特定含义的数据,需要建立元数据表,解释每个租户对预分配字段的语义和实际的数据类型。

预分配字段方案在某种程度上实现了数据的扩展,是实现租户数据扩展的一种简单方式,但是局限性也相当明显:预分配字段的个数必须在系统设计时就确定。设计时要综合考虑需要多少预分配字段,若预分配字段太多,就会产生很多空闲的空间,造成数据存取空间的浪费;若预分配字段太少,则不能实现租户的数据扩展,无法灵活满足租户的个性化需求。SaaS软件服务商面对的是众多客户,有的客户定制字段过多,有的客户则较少,所以这种方案对于多租户的SaaS软件服务实现数据扩展是非常困难的。

(3)名称值对

名称值对方案是通过客户原数据表、扩展数据表和元数据表这3张表来描述客户的信息,不同租户进行字段扩展时,扩展数据表将客户业务数据表的横向列扩展转化成纵向的数据集,将原数据表中的每一条扩展记录的每一个扩展字段,都保存成一条扩展数据行,并将数据表中的记录与元数据表中的配置记录相关联,构成扩展数据记录。

客户原数据表主要存储的是租户共同属性下的业务数据;扩展数据表主要存储每个租户扩展数据的值;元数据表主要存储租户扩展数据的字段名称和存储类型,这张表通过关键字联系起来。名称值对这种方案灵活地实现了数据的扩展,租户可以根据自己的个性化需求,不断地增减自定义数据。

名称值对方案虽然数据扩展比较灵活,但数据处理时十分复杂,需要复杂的处理才能实现客户扩展数据和原数据之间的映射,如当检索数据时,得多次访问元数据才能获取所有的业务数据,大大影响了数据访问的效率。

4.2 动态数据扩展模型

SaaS软件服务在数据存储层采用大规模定制管理理念,可以在满足客户对数据模型个性化需求的基础上,降低成本,提高数据访问的效率。上面3种方案均不适合SaaS软件服务基于大规模定制的数据扩展。据此本文设计了动态数据扩展模型,用XML文档描述租户的扩展数据,每个租户均对应一个XML Schema ID,以区分每个租户的扩展数据,既满足租户对数据扩展的需求,又不改变原用的数据结构。当客户需要删除、更新扩展数据时,只需要修改自己的XML文档即可,提高了数据操作的效率,且不会影响其他客户的数据。动态数据结构见表2。

表2 动态数据结构

表 2 中 ,tenancy ID、Preset-param1、Preset-param2 等 存放的是租户共有的数据类型,XML Schema ID存放的是租户特有数据的地址。XML Schema的定义如下:

type="xs:string"/>

type="xs:string"/>

type="xs:string"/>

从XML Schema的描述可知,用户可以自定义扩展数据个数、数据类型,XML具有数据语义的自解释性,解析数据时非常方便[13]。XML Schema的视图如图5所示。

动态数据扩展模型在标准数据结构的基础上可以灵活地实现扩展,以满足客户的个性化数据需求,并且所占的存储空间相对较少,数据查询、更新、删除等操作非常简单、高效,提高了数据访问的效率。利用XML数据类型来存储客户的自定义数据,对扩展数据的类型、个数都没有限制,客户可以根据自己的需求任意地扩展数据,并且不会对其他客户的数据产生影响,满足SaaS模式的多租户特征。因此,可以借助动态数据模型来实现SaaS软件服务基于大规模定制的数据扩展。

5 SaaS软件服务基于大规模定制的数据扩展案例

为验证动态数据扩展模型的可行性,以SaaS软件服务商向学校提供考试系统为例,讨论数据的存储结构及对数据的主要操作。

5.1 考试系统数据存储结构

在共享数据库、共享Schema架构下,很多租户共用一张表,其动态数据扩展见表3。

学校代码为001的租户对数据有个性化需求,需要存储的信息为:考试地点,数据类型为string;成绩上升幅度,数据类型为float。学校代码为001,学生学号为100的租户其对应的XML为:

/**201.xml**/

表3 考试系统动态数据扩展:TbUserInfo

学校代码为002的租户对数据有个性化需求,需要存储的信息为:数学老师姓名,数据类型为string;职称,数据类型为string;所属机构,数据类型为string。学校代码为002,学生学号为101的租户其对应的XML为:

/**202.xml**/

5.2 数据操作

对数据的主要操作有查询、更新、添加新属性、删除,学校代码为001,学生学号为100这条记录扩展部分的操作方法如下。

(1)数据查询

查询扩展数据时,可以通过以下方式:

SELECT XmlInfo.value ('/Root/ExtendParams/ExtendParam/Name',’string’)AS Name,

XmlInfo.value ('/Root/ExtendParams/ExtendParam/Value',’string’)AS Value

FROM TbUserInfo

WHERE SchoolID=001 and StudentID=100;

查询得到的结果见表4。

表4 查询结果

(2)数据新增

当客户需要添加新的数据类型时,可以通过declare语句完成,如下所示:

DECLARE@XmlInfo as XML

SET@XmlInfo=’

由上可知,客户可以根据自己的需求随意扩展字段。

若新增一条数据记录,则通过insert语句完成。

INSERT INTO TbUserInfo (SchoolID,SchoolName,StudentID,StudentName,Course,Grade,XmlInfo)VALUES(004,‘南京航空航天大学 ’,103,‘刘 一 ’,‘会 计 ’,92,@XmlInfo);

(3)数据修改

修改扩展数据某个属性下的值时,通过update语句完成。

UPDATE TbUserInfo

SET XmlInfo.modify('replace value of

(/Root/ExtendParams/ExtendParam[Name="考试地点 "]/Value/text())with"教1-101"')

WHERE SchoolID=001 AND StudentID=100;

该过程将SchoolID=001 AND StudentID=100的数据的扩展文件中的Name为 “考试地点”的ExtendParam中的Value 值(原来值为:“五教 301”)变换为“教 1-101”。

(4)数据删除

当删除一整条数据记录时,操作如下:

DELETE FROM TbUserInfo WHERE SchoolID=001 AND StudentID=100;

删除扩展数据某一个属性时,通过update语句完成。

UPDATE TbUserInfo

SET XmlInfo.modify ('delete/Root/ExtendParams/ExtendParam[1]')

WHERE SchoolID=001 AND StudentID=100;

当扩展数据类型及数据更新时,需要对其验证,使其满足XML Schema的定义。

从该案例可以看出,动态数据扩展模型比定制列、预分配字段、名称值对等数据扩展方案更加灵活,所占的存储空间相对较少,并且数据操作简单、快捷,符合大规模定制的管理理念。借助这种模型可以实现SaaS的原数据表和扩展数据的集成。

6 结束语

本文首先根据系统构件把存储数据分为公共数据和客户数据,设计了SaaS软件服务基于大规模定制的数据层架构。针对客户数据,讨论了3种数据存储架构的优缺点及适用范围。以共享数据库、共享Schema架构为例,按照大规模定制的管理理念,SaaS软件服务商要满足客户的个性化需求,且降低成本、提供数据操作的效率,本文提出了动态数据扩展模型以实现数据扩展问题,适合SaaS模式的多租户特征。

1 Chong F,Carraro G.Architecture strategies for catching the long tail.Microsoft Corporation,2006

2 Chong F,Carraro G,Wolter R.Multi-tenant data architecture.http://msdn.microsoft.com/en-us/library/aa479086.aspx

3 Ralph Mietzner,AndreasMetzger,Frank Leymann,etal.Variability modeling to support customization and deployment of multi-tenant-aware software as a service applications.Proceeding of the 2009 ICSE Workshop on Principles of Engineering Service Oriented Systems,2009

4 Aulbach S,Grust T,Jacobs D,et al.Multi-tenant database for software asaservice:schema-mapping techniques.SIGMOD,2008(7):9~12

5 Chong F,Carraro G,Wolter R.Multi-tenant data architecture.http://msdn.Microsoft.com/errus/library/aa479363.aspx,2006

6 Gao Bo,Guo Changjie,Wang Zhihu,et al.Devlop and deplop multi-tenant web-delivered solutions using IBM middlleware:part 3:resource sharing,isolation and customization in the single instance multi-tenant application.http://www.ibm.com/developworks/cn,2009

7 唐君.基于SaaS的中小企业管理软件实现.复旦大学硕士学位论文,2008

8 邓伟华.SaaS应用的数据模型研究与设计.电脑编程技巧与维护,2009(8)

9 Chong F,Carraro G.抓住市场的长尾.北京:中信出版社,2006

10 Lin Huiping,Li Weiping,Wu Si.A service in education:SOA-based credit bank system, computer systems and applications.Computer Systems&Applications,2009,18(6):1~5

11 陆洪潮.SaaS模式的ERP系统的研究.武汉理工大学硕士学位论文,2009

12 杜佳,温浩宇,杨朝君.SaaS数据扩展模型研究.情报杂志,2010(29):188~191

13 Rohit Khare,Adem Pifkin.Special Feature:XML-a door to automated Web application.IEEE Internet Computing,1997,4(1):78~80

猜你喜欢
租户数据表数据模型
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
基于多租户隔离的云安全建设
基于列控工程数据表建立线路拓扑关系的研究
面板数据模型截面相关检验方法综述
基于MVC模式的多租户portlet应用研究*
财政支出效率与产业结构:要素积累与流动——基于DEA 和省级面板数据模型的实证研究
图表
基于分位数回归的电力负荷特性预测面板数据模型
企业多租户云存储平台的设计与实现