一种面向SaaS应用的差异数据存储方法
2016-05-09欧阳凯周敬利
蔡 婷 蔡 宇 欧阳凯 周敬利
一种面向SaaS应用的差异数据存储方法
蔡 婷1蔡 宇1欧阳凯2周敬利2
1(重庆邮电大学移通学院 重庆 401520)
2(华中科技大学计算机学院 湖北 武汉 430074)
为解决SaaS(Software as a Service)应用中多租户重复定制造成的数据冗余存储问题,提出一种基于元数据的差异数据存储方法。该方案研究传统元数据驱动的存储模式,通过对元数据的分类定义,给出差异存储方案的形式化语义和数据存储策略。最后分别对增删改查操作提出该方案的数据访问算法。计算表明,差异存储方法在冗余减少的概率分析下显示出较高的存储空间利用效率,有效地减少了租户的冗余存储。同时性能测试结果还反映出该方案具有较好的数据访问性能。
SaaS 多租户 元数据 差异存储 方法
0 引 言
在以互联、开放、共享和协作为主旋律的互联网计算环境下,软件呈现出网络化、服务化、虚拟化和集成化的发展趋势。SaaS作为云计算环境下一种新兴的服务供给模式诞生了[1]。SaaS是指可共享的Web应用的部署、运营和使用模式,它强调将应用软件统一部署在运营端,用户则通过网络以按需付费等商业模式来使用应用软件,并且由运营端统一对应用软件需要的计算、存储、带宽资源进行分配管理和优化[2]。
多租户是SaaS模式的核心概念之一。SaaS最大的特征之一就是单实例多租赁,即一个应用可以被多个租户租赁,并且支持租户的按需定制[3]。然而,随着SaaS应用中租户的数目及定制数据量呈海量增长,给SaaS系统的数据存储带来了巨大的挑战。一般来说,SaaS系统中多租户数据存储服务应该同时满足以下两个技术指标:
1) 高效的存储空间利用率;
2) 良好的数据访问性能。
然而,以上两点可能会相互制约。例如空间利用率高的数据存储模式,存储空间固然小,但系统性能可能会因此受到影响。围绕SaaS应用中多租户的数据存储问题,国内外学者开展了大量研究。例如:定制追加字段法[4]、预先分配字段法[5]、扩展关联表[5]、数据透视表[6]、Chunk Folding[4,6]、XML字段拓展技术[7]、纯元数据技术[8-10]等。总结当前学术界的研究成果,主流的数据存储方式可以划分为两类:(1) 基于键值对方式的数据存储方式;(2) 基于元数据驱动的数据存储模式。其中,元数据技术是互联网分布式系统实现SaaS模式下多租户定制的关键,定制过程中通过字段元数据表明确租户和定义字段间的映射关系。本文在基于元数据存储模式的基础上展开研究,分析了SaaS应用中在进行多租户的定制行为时出现的不同租户对于相同数据对象重复定制从而导致的存储空间浪费问题,提出一种面向SaaS应用的差异数据存储方法。最后通过数学计算和实验测试验证了该策略的存储效率和访问性能。
1 问题提出
元数据驱动的支持SaaS模式的多租户定制系统能够给用户提供良好的数据定制服务[11]。基于元数据的数据存储设计不同于传统的静态数据库存放方式,它采用运行时动态生成租户数据完整视图的方式,很好地支持了大量租户灵活多变的数据结构,从而极大地方便了用户的定制服务。然而,在租户的定制过程中,相同的数据对象,可以被不同的租户定制。Saas应用模式的这种多租户的特性极易导致定制对象大量的重复存储,造成存储空间的过度浪费。表1为借鉴Force.com[6]的元数据设计方式描述的一个多租户数据定制实例。其中,TID表示租户标识,ObjID表示租户的定制对象,FieldID用来唯一标识定制对象的属性字段,Val则代表租户对应于某个属性的具体值。
表1 多租户数据定制实例
表1描述了用来存储租户定制对象的元数据表。从存储结果可以看到T1、T2、T3等多个租户同时定制了相同的对象OBJECT,并且每个租户对于OBJECT对象的三个属性信息(a,b,c)都进行了完全存储。可以预测,随着SaaS应用中租户数量的激烈增长,这种传统的基于元数据的存储模式必将导致定制对象的大量重复存储,加大了存储成本开销。为解决该问题,本文分析并提出了基于元数据的差异数据存储模式,同时给出了存储方案的数学定义与算法设计。
2 元数据差异存储模式
2.1 元数据分类与定义
为描述和定义差异数据存储模式,本文对元数据进行了进一步分类,其语义描述如下:
定义1 基本元数据 基本元数据是指由软件提供商所提供的元数据,其还包括在该元数据基础上共享生成的其他定义和配置数据对象。设mi为SaaS应用中某个对象对应的基本元数据,集合Basic_Metadata为系统中所有对象的基本元数据集合,则:Basic_Metadata={m1,m2,…,mi,…,mn}(1≤i≤n)。
定义2 扩展元数据 扩展元数据主要是指SaaS运营商和租户所设置的可共享元数据对象。设ej为第三方或租户所配置的元数据对象,则扩展元数据对象集合Ex_Metadata可以表示为:Ex_Metadata={e1,e2,…,ej,…,en}(1≤j≤n)。
定义3 租户元数据 租户元数据是指租户自己的个性化配置对应的元数据对象,它的基础是基本元数据和扩展元数据。设tk是SaaS中某定制租户自己的个性化配置对象,那么所有租户的元数据对象集合Te_Metadata可表示成:Te_Metadata={t1,t2,…,tk,…,tn}(1≤k≤n)。
在对元数据进行分类的基础上,通过分析不同的元数据类型及其属性,本文提出基本元数据、扩展元数据以及租户元数据之间存在着继承关系。如图1描述了SaaS应用中的租户定制与元数据之间的关系。
图1 满足继承关系的租户定制
定义4 元数据关系 三类元数据间存在如下继承关系:Ex_Metadata可以继承Basic_Metadata集合中的对象mi,Te_Metadata则可以同时继承Ex_Metadata的集合对象ej以及Basic_Metadata的集合对象mi。因此,在这种对元数据进行分类的存储模式下,租户的定制相当灵活,可以根据Ex_Metadata、Ex_Metadata、Te_Metadata三者中任一个集合数据完成相应的定制配置。
多租户数据模式的个性化定制,允许租户在应用中根据业务需求修改数据库建模专家预设定的数据模式。即由开发商提供基础公共数据模式模版,租户在模版上定制个性化需求的数据模式实例[1]。结合前面的定义和分析,本文提出将SaaS模式下的应用程序配置抽象成基本定制模板。
定义5 基本元数据模板
Basic_Template= {mi,ej|mi∈Basic_Metadata,ej∈
Ex_Metadata,1≤i≤n,1≤j≤n}
基本元数据模板中的对象组成主要由两方面构成,基本元数据对象mi以及扩展元数据对象ej。并且在SaaS应用中,mi、ej、tk共同决定了每个租户对应的定制元数据,则SaaS系统的租户定制差异数据就可以表示成由基本元数据模板差异和租户自己定义的元数据差异所组成的集合,定义如下:
定义6 差异数据
diff_Metadata={diff_M,diff_E,tk}
其中,diff_M表示租户间关于基本元数据的定制差异数据,diff_E表示租户关于扩展元数据的定制差异数据,tk表示租户自己定义的元数据。本文不考虑租户自定义的个性化定制差异,后面将主要针对基本模板的定制差异数据研究相关的存储策略。
2.2 差异数据存储策略
在传统的基于元数据驱动的数据存储方式[8]中,SaaS模式下的定制租户必须存储定制对象的所有属性。这种存储设计造成重复对象、相同属性的大量冗余存储,浪费了大量宝贵的存储空间。为此,结合前面的差异元数据理论,本文提出一种面向SaaS应用的差异数据存储策略。该方案相比传统的元数据存储模式减少了租户在定制过程中的存储数据量,新方案中定制租户只需要存储定制对象的部分差异属性,从而提高了存储空间利用效率。
在差异数据存储方法中,第一个租户要求完整存储定制对象的全部属性。根据差异存储设计,如果要插入一条定制字段数据到元数据表中,要先比较该记录是否为差异数据,即比较两个相邻租户对于相同的定制对象的字段属性值是否相等。算法1给出了差异数据存储方法的过程描述。
算法1 差异数据存储过程
输入:租户标识TID,所属对象ObjID,字段标识FieldID,字段对应的属性值Val
输出:差异数据存储表(diff_metadata table)
S1:定制差异表初始状态为空;
S2:输入待增加的租户Ti的定制信息:
Ti的TID、ObjID、FieldID和Val;
S3:在差异存储表中检索相邻租户Ti-1的定制信息:
Ti-1的TID、ObjID、FieldID和Val;
S4:比较S2和S3步骤中的对应字段的属性值ValTi-1与ValTi是否相等;
S5:如果相等,则表示该字段为差异值,将该信息存入差异表;
如果不相等,则表示该字段不是差异值,不写入。
示例1 如表1所示,假设参与定制的租户是T1、T2、T3,定制对象有3个属性,分别为0、1、2 ,ai表示租户Ti对应于属性0的值(1≤i≤3),bi表示租户Ti对应于属性1的值(1≤i≤3),ci表示租户Ti对应于属性2的值(1≤i≤3)。利用差异数据存储方法进行租户的定制存储。
表2为按照算法1存储的多租户数据定制实例表。对比表1可以看出,差异存储方法比传统的元数据存储方法减少了租户T2、T3的定制数据存储量,对于一个具有m个租户的SaaS应用,其共同定制具有n个属性的某相同对象,采用差异数据存储方式需要存储的定制数据量要小于传统元数据方案的m×n的存储量级。
表2 采用差异数据存储方法的租户定制表
3 模型的数据访问
前面针对元数据驱动的传统存储模型存储利用率低的缺点进行了改进,提出了基于元数据分类的多租户差异存储解决方案。接下来需要讨论的便是基于新存储方案的数据访问问题。在差异存储模式下,查询某个租户的指定字段定制信息时,根据租户有序排列这一前提,能够快速得到该字段的上一个租户定制信息,进而计算出该租户的相关字段信息。对数据的访问分为增删改查,下面分别给出四种数据访问方式的算法伪代码描述。
首先需要进行一些形式化定义和基本约定:
diff_Table表示差异表;
beforeTID表示当前租户Ti的上一个租户Ti-1;
fieldValue表示查询结果;
beforeValue表示上一个租户Ti-1该字段的值。
算法2 SELECT
输入:租户标识tID,对象标识objID,字段标识fieldID
输出:字段值fieldValue
S1: createConnection(diff_Table);
//连接数据库
S2: tID,objID,fieldID→getValue()
//获取查询租户的字段信息
S3: if getValue() is not null
getValue()→fieldValue;
return fieldValue;
S4: if fieldValue is null
beforeTID(beforeValue)→beforeValue;
S5: while beforeValue is null
//继续前找
getBeforeTenant(beforeTID)→beforeTID;
getValue(before)→beforeValue;
S6: beforeValue→fieldValue;
S7: return fieldValue.
算法3 INSERT
输入:租户标识tID,对象标识objID,字段标识fieldID字段值fieldValue
输出:更新表
S1: createConnection(diff_Table);
S2: 获取上个租户相同字段的信息:
getBeforeTenant(tID)→beforeTID
getValue(beforeTID,objID,fieldID)→beforeValue
S3: while beforeValue is null
getBeforeTenant(beforeTID)→beforeTID;
getValue(before)→beforeValue;
S4: if beforeValue=fieldValue
return;
S5: else
inserttID,objID,fieldID,fieldValue;
算法4 UPDATE
输入:租户标识tID,对象标识objID,字段标识fieldID字段值fieldValue
输出:更新表
S1: createConnection(diff_Table);
S2: 获取当前待修改租户Ti的字段信息:
tID,objID,fieldID
S3:查询下一个租户Ti+1相同字段的信息:objID,fieldID
S4: if Ti+1(objID,fieldID) is exist
updateTi(tID,objID,fieldID);
S5: else
Ti(tID,objID,fieldID)→diff_table;
updateTi(tID,objID,fieldID);
算法5 DELETE
输入:租户标识tID,对象标识objID,字段标识fieldID字段值fieldValue
输出:更新表
S1: createConnection(diff_Table)→con;
S2: 获取当前待删除租户Ti的字段信息:
tID,objID,fieldID
S3: 查询下一个租户Ti+1相同字段的信息:objID,fieldID
S4: if Ti+1(objID,fieldID) is exist
deleteTi(tID,objID,fieldID);
S5: else
Ti(tID,objID,fieldID)→diff_table;
deleteTi(tID,objID,fieldID);
4 试验结果及分析
4.1 存储空间利用效率实验
在差异数据存储模式中,由于定制租户只存储了定制对象的部分属性数据,故相比传统元数据的完全存储方式要具有更高效的存储空间利用率。为进一步量化差异存储方案的冗余减少量,本文将采用数学理论对该方案的冗余存储空间减少概率进行分析,从而评估差异数据存储方法的存储空间利用效率。在差异存储方法中,一条定制数据存储与否只取决于差异是否存在这两种状态,其符合0-1分布特性,如果将配置n个属性字段看成n次贝努里试验,则它们符合二项分布特性,故实验采用二项分布来估算差异数据的存储空间减少概率。
实验参数为某SaaS应用中,一共有t个租户要进行定制服务。该系统中由第三方运营商提供的定制模板具有m个定制对象,每个租户在定制一个具体的对象时都要设置n个字段属性,且每个属性可供租户进行配置的值有r个。计算两个租户定制时发生q次相同配置的概率为:
其中,ξ表示概率随机试验结果。当相邻租户存在冗余时,则不存储该数据。则在该概率下减少的数据存储量为:
t×m×q
为进一步量化对比结果,实验将相关参数固定为10 000个租户,50个对象,10个属性,可配置属性字段5个,分别测试传统存储和差异存储在不同冗余发生概率下的存储数据量。表3为实验数据测试结果。
表3 存储空间消耗对比数据
根据表3,对比两种存储方式分别在p(ε=1)=27.03%,p(ε=2)=30.21%,p(ε=3)=20.78%,p(ε=4)=9.98%概率下的存储数据量,使用差异数据存储方式对于定制数据的存储消耗要明显小于传统的存储方法。这是因为差异存储免去了对于相同定制数据的存储,提高了系统存储空间的利用效率。
4.2 访问性能的比较分析
在性能评估实验中,本文主要考虑与SaaS应用相关的重要因素租户的规模,测试比较差异存储方案和传统元数据完全存储方案的数据访问性能。首先,实验设计了两类SQL查询语句:(1) 模拟通过客户ID查询一个客户的特定属性值;(2) 查询客户信息表中的所有客户信息。我们将这两类测试语句分别命名为select1、select2。其次,实验测试了更新操作的响应时间,固定租户规模为100个时分别设计某个特定属性字段的插入、删除、更改语句。
实验系统的运行环境是一个配置为Intel(R) Core(TM) i5-2450M CPU, 2.50 GHz的处理器,4.00 GB内存,64位Windows 7操作系统的PC机。数据库为MySQL 5.6.10,采用P6Spy和IronTrackSQL工具来统计不同实验场景下的数据库访问时间。
实验使用的数据情况为,设计三个不同的租户规模分别为1个、50个以及1000个。定制模板中每个对象的字段属性个数为8,假定任意两个相邻租户间具有2个相同的属性设置,分别测试执行以上两类SQL语句获得的响应时间。
如图2-图4可以看出,差异存储模式执行效率要略低于传统存储模式。考虑到差异存储计算步骤明显多于完全存储,访问响应时间会有所增加也是意料之中。随着租户规模的扩大,传统存储的响应时间几乎不变,差异存储的响应时间增长幅度很小,涨幅完全在可接受范围之内。并且由于定制中差异存储的存储数据量会小于传统存储,在一定程度上又提升了访问执行效率,所以本文提出的差异数据存储模式在提高空间利用率的情况下,还是具有较好的数据访问性能的。
图2 select1的性能比较 图3 select2的性能比较
图4 更新操作的性能比较
5 结 语
本文提出了一种适用于SaaS模式下的多租户差异数据存储方法。该方案首先通过分类元数据来建立差异数据的语义,然后根据差异数据存储策略判断租户定制信息是否需要存储。最后还通过数学计算证实了该模型具有良好的空间存储利用率。此外,文中还给出了差异存储方案的数据访问算法,实验数据表明,该方案的数据访问性能还是不错的。
下一步的研究工作主要包括:
(1) 对于不相邻租户间存在的冗余,通过进一步分析和扩展差异存储模型来减少冗余;
(2) 优化多租户存储模式的数据访问算法,降低计算时间;
(3) 研究并提高方案对于不同应用领域的可扩展性。
[1] 韩燕波,王桂玲,刘晨,等.互联网计算机的原理与实践[M].北京:科学出版社,2010.
[2] 林海略,韩燕波.多租户应用的性能管理关键问题研究[J].计算机学报,2010,33(10):1881-1895.
[3] Vidyanand C.Software as a service:Implications for investment in software development[C]//Proceedings of the 40th Hawii International Conference on System Sciences(HICSS’07),2007:209-219.
[4] 叶伟,赵伟,叶军.互联网时代的软件革命:SaaS架构设计[M].北京:电子工业出版社,2009.
[5] Lakshman A,Malik P.Cassandra:a decentralized structured storage system[J].SIGOPS Operating Systems Review,2010,44(2):35-40.
[6] Aulbach S,Grust T,Jacobs D,et al.Multi-Tenant databases for software as a service:schema mapping techniques[C]//Proceedings of the ACM SIGMOD Conference,2008:1195-1206.
[7] 唐圣潘,周肆清,丁长松.基于SASA模式的共享模型的数据扩展技术研究[J].计算机技术与发展,2011,21(8):63-65.
[8] Weissman C D,Bobrowski S.The design of the force.com multi-tenant internet application development platform[C]//Proceedings of the ACM SIGMOD International Conference on Management of Data,2009.Providence,Rhode Island,USA:Ugur Cetintemel,2009:889-896.
[9] 周文琼,李庆忠,范路桥,等.SaaS模式多租户数据存贮模型的研究与实现[J].计算机科学,2013,40(10):194-197.
[10] Salesforce.com.Inc.Database.com[EB/OL].[2011-06-08].http://www. data -base.com/.
[11] 李保栋,孔兰菊,陆春生,等.SaaS交付平台多租户数据管理模型研[J].小型微型计算机系统,2012,33(12):2658-2663.
[12] Agrawal D,Abbadiae E,Antony S,et al.Data management challenges in cloud computing infrastructures databases in Networked Information Systems the 6th International Workshop,DNIS 2010[C]//AizuWakamatsu,Japan,2010:1-10.
AN SAAS APPLICATION-ORIENTED DIFFERENCES DATA STORAGE METHOD
Cai Ting1Cai Yu1Ouyang kai2Zhou Jingli2
1(SchoolofMobileTelecom,ChongqingUniversityofPostsandTelecom,Chongqing401520,China)2(SchoolofComputer,HuazhongUniversityofScienceandTechnology,Wuhan430074,Hubei,China)
To cope with the problem of data redundancy storage caused by the repeated customisations of multi-tenant in SaaS application, we proposed a metadata-based differences data storage method. In the scheme we studied the traditional metadata-driven storage pattern, and addressed the formal semantics and data storage strategy for differences storage scheme by the definition of metadata classification. At last, we proposed the data access algorithms of the scheme for the operations of addition and deletion, query and modification respectively. It was indicated by the calculation that the differences storage method exhibited higher storage space utilisation under the probabilistic analysis of redundant reduction, which reduced tenants’ redundant storages effectively. Meanwhile, the performance test result also reflected a preferable data access performance of the scheme.
Software as a service(SaaS) Multi-tenant Metadata Differences storage Method
2014-10-29。重庆市教委科学技术研究项目(KJ1402 002);重庆市本科高校“三特行动计划”特色专业建设项目(渝教高(2013)49号)。蔡婷,讲师,主研领域:网络安全结构与控制技术,互联网计算。蔡宇,讲师。欧阳凯,博士。周敬利,教授。
TP391
A
10.3969/j.issn.1000-386x.2016.04.010