摘 要: 针对中小企业资金缺乏、IT人才较少等问题,本文对传统软件向SaaS软件转型关键技术进行研究,提出了SaaS软件关键技术的解决方案以及七层架构模型。
关键词: 传统软件; SaaS; 架构模型
随着互联网技术的高速发展和应用软件的日渐成熟,软件即服务SaaS(Software-as-a-Service)模式已经成为一种新型的软件运营模式。在国外,SaaS正在渗透到软件应用的各个方面,甚至开始成为主流。全球SaaS模式的创始者和领导者Salesforce就是以SaaS模式的CRM取得巨大成功的。而在国内还是以传统按需求定制软件的方式为主,SaaS还处于起步阶段。在传统软件的基础上向SaaS软件转型已经成为当前势不可挡的潮流。SaaS作为一种新的软件服务模式,技术架构与传统软件相比有很大差别,在技术上还有很多新的挑战。因此本文对传统软件向SaaS软件转型的关键技术进行研究并提出一些可行方案。
1 SaaS模式及相关概念
1.1 SaaS模式概述
SaaS模式是一种通过互联网提供软件服务的模式,与传统软件相比,SaaS软件不再是用户向软件开发商定制软件或进行二次开发,而是软件提供商将应用软件部署在自己的服务器上并通过互联网提供在线软件服务。软件提供商负责搭建一切网络设备、软硬件运作平台等基础设施,并进行后期维护。企业用户根据实际需要通过Internet向软件提供商订购所需要的应用软件服务,按照订购服务的多少和时间长短给提供商支付费用。SaaS模式下通过租用服务的方式,用户不需再定制软件、购买硬件、建设机房、招聘IT维护人员就可以按需使用软件,也不需要用户关心软件后期的维护,只要连上网就可以享受软件商提供的软件服务。用户不需要一次性支付很大一笔软件定制费,只需支付很少一点租用费用就可以使用软件,风险非常低,发现软件不满足要求或不适合本公司管理模式可以停止续租[1]。
这种基于SaaS模式的软件服务方式大大减轻了对于资金缺乏、IT人才匮乏的中小企业的压力。同时,对软件商也不用在推广和销售软件产品时投入巨大营销成本和后期的维护成本,不需维护多个用户的多套软件产品出现的奇怪问题,减轻了软件维护人员的负担。SaaS模式的4个基本要素是:互联网平台、网络存储、按需付费、多租户。
1.2 多租户概念
多租户是指多个企业用户(在SaaS模式下习惯用租户)共同使用部署在软件供应商服务器上的一个应用实例,供应商提供一套软硬件资源,网络设备进行运营管理和资源维护,通过对租户的规模效应来大大降低了软件运营的成本。多租户(Multi-tenant)是SaaS最重要的核心概念和关键技术之一。
1.3 成熟度模型
根据SaaS应用是否具有可配置性、高性能、可伸缩性等特点,把SaaS成熟度模型分为四级[1]。
第一级:定制开发,是最初级的SaaS应用成熟度。每个租户对应一个单独开发的软件实例。与传统模式几乎没有差别,最大不同就在于商业模式,即软硬件以及相应维护均由SaaS供应商负责。
第二级:可配置,是在第一级的基础上改进的。每个租户仍然对应一个单独的软件实例,但是供应商只提供了一套代码,通过不同的配置来灵活地满足各个租户。
第三级:高性能的多租户架构,提出了多租户的概念,多个租户共享同一个运行实例。这种多租户单实例的架构更接近于真正意义上的SaaS应用架构。降低了硬件及维护成本,发挥了SaaS应用的规模效应。
第四级:可伸缩性的多租户架构,添加了中间调度层将多个租户分配到多个运行实例上,通过多个运行实例来分担大规模租户访问。这一级成熟度硬件和租户数量可以无限制地增加,因此是最为理想的SaaS架构。
2 SaaS软件的关键技术
2.1 多租户模式下的数据存储
SaaS软件与传统软件相比,最大不同就是多租户模式,多个租户共享同一个软件实例,租户的数据既有隔离又有共享。根据多租户模式的特点,在数据存储上有3种被选的解决方案。
方案1: 独立数据库。这种数据存储方案将每个租户的数据信息单独存储在独立的数据库中,是实现SaaS数据隔离最便捷的方式,而且对一个租户数据模型的更改不会影响其他租户的数据,安全性好。但是这种方案大大增加了数据库的安装费用,有多少个租户就需要搭建多少个数据库。这种数据存储方案适用于像银行、医院等安全性要求较高的企业,但明显不适合资金缺乏的中小企业的使用。
方案2:共享数据库。独立架构,每个租户共享同一个数据库,但是对于每个租户都有一个独立的数据库架构与之对应,这意味着各个租户都有一套不同的数据表结构。当创建一个新租户时,系统会相应地创建一套默认的表结构,同时与一个独立的数据库架构建立关联关系。可在一个数据库中存储多个租户的数据,与独立数据库相比,虽然数据库的搭建费用降低了,还有一定的数据隔离,但是存在故障时恢复数据困难和数据统计难度。
方案3:共享数据库。共享架构,即所有的租户共享一个数据库,共用同一套数据表结构。一个数据表存储了所有租户的数据信息,通过一个TenantID字段来区分各个租户的数据。这种方案是共享程度最高,隔离级别最低的数据存储方式。这种方案又是硬件维护和购买成本最低的,每台数据库服务器支持的租户最多。这种方式非常适用于大规模的中小企业的租户。因此下面将详细研究这种方案下的关键技术。
2.2 共享数据库共享架构的多租户模式
(1) 多租户技术
多租户技术是SaaS服务模式区别于传统模式最本质的区别,达到SaaS模式的成熟度模型的必要条件是解决数据的隔离性,实现多租户模式。在SaaS模式下建立多租户,必须在业务表增加一个TenantID字段用来区别每个不同的租户,保证每个租户数据的安全。如表1所示。
通过TenantID字段来获得对应租户的业务数据。当系统用到租户的业务数据时,需要在每条SQL语句中增加‘TenantID = ?’ 条件进行业务数据操作。
(2) 数据扩展技术[2]
为了满足不同租户的不同需求,SaaS软件必须能够保证对数据可扩展。多租户模式满足大规模租户对数据的个性化需要,最常见的解决方案就是实现扩展数据的可配置。实现数据的可配置有以下3种常见方案。
方案1:定制字段,就是根据租户的需要在各租户共有的数据表上添加相应的定制字段来保存扩展数据。这种方案数据扩展非常简单但是其扩展性非常有限,当租户量达到一定数量,表中添加的字段就会非常多,而且每个租户添加的字段对另外租户是没有任何意义的,严重破坏了表的结构,有些扩展字段可能为空,浪费了表空间。
方案2:预分配字段,该方法在表格中提供一定数量的预设字段,当租户要扩展数据时,从表中选取适当的预设字段进行扩展,但是不同租户选取同一个预设字段的含义可能也不一样。如表2中TenantID字段区分每个租户,除了一些固定的字段外,还提供了一些预分配字段,Ext1、Ext2、Ext3就是预分配的字段,预分配字段的使用由租户自己预定,一般初始为字符串类型,其真实类型可以采用元数据表来进行跟踪。
这种方案虽然能满足可配置、可扩展的需求,但是预留过多浪费空间,预设过少,又不能满足租户的需求。
方案3: 名称值对,本方案采用一个单独的表来存储扩展数据。扩展表将数据表的横向扩展列转换成纵向的扩展数据集,为每一条原数据记录设一个扩展字段,保存为扩展表中的一条记录。将数据表中的数据记录与元数据表中的配置记录相关联,构成扩展数据记录。如图1所示。
虽然这种方案很好地达到了多租户数据扩展的灵活性要求,但增加了查询、更新记录等数据库操作的复杂度,每次操作都涉及到多个表间的关联,因此该方案也有待优化。
方案4:XML[3]共享模型的数据扩展,这种方案在数据表中采用一种XML数据类型字段来存储租户间的数据。当今主流的关系数据系统都支持XML数据的存储和管理,并提供了很多函数来直接对XML文档节点进行管理。下面以Oracle数据库系统为例。
表结构:TableName(TenantID,Col1,Col2,,XMLDataField),其中TenantID、Col1、Col2字段是所有租户共用的字段;XMLDataField字段存储租户特有的异构数据,其格式完全遵循XML的格式。设计XMLDataField字段的格式如下:
<UserExtendCols>
<UserExtendCol1 colName=' ' colType=' '>value1
</UserExtendCol1>
<UserExtendCol2 colName=' ' colType=' '>value2
</UserExtendCol2>
<UserExtendCol3 colName=' ' colType=' '>value3
</UserExtendCol3>
……
</UserExtendCols>
XML文档中每个子节点代表租户的一个扩展列,包括列名、列的数据类型、列所对应的值等信息。每增加一个扩展列就在相应的XML文档中添加一个子节点,满足租户对数据扩展的个性化需要。
使用XML字段作为数据扩展方案,对扩展数据的操作简单,不需频繁地多表连接,可以灵活地满足多租户模式下的异构数据的定制,提高了性能。该方案的使用需要在系统的架构模式中添加一层对XML数据进行解析再呈现给客户以及对客户数据封装成XML数据再保存到数据库中。
2.3 多租户模式下的功能可配置
SaaS软件所强调的是“按需使用,按需付费”。在SaaS模式下,租户根据自己不同的需求来使用同一软件,则需达到可配置性要求[4]。实现功能的可配置,可采用如图2所示的四级表结构。
每个租户对应一个预设的功能模式,预设了租户的基本功能。功能模式由多个原子功能构成。租户表存储租户的相关信息,TenantID:租户的唯一标识;UserName:租户的登录账号;Password:租户的登录密码;PatternNo:租户使用系统包括的功能模式。功能表存储了系统所有的原子功能相关信息,MENU_No:原子功能唯一标识;MENU_NAME:原子功能的名称。模式表存储了功能模式信息。PatternNo:系统中包括的所有模式标识。MENU_No:功能模式包括的原子功能。模式表可以作为租户选择功能的向导。租户模式功能表存储了租户所拥有的功能的相关信息。租户模式功能表定义了该租户所有的功能信息,该表可以作为租户所拥有的所有功能的查询。
3 SaaS模式下的体系架构设计
软件系统架构决定了系统的灵魂,好的体系架构可以保证系统的稳定性、健壮性、可扩展性、兼容性和可用性,而传统软件通常需要采用分层的设计思想,一般大致分为5层,包括客户层、表现层、控制层、业务逻辑层、数据库层。这种传统软件的体系架构分层不能很好地满足SaaS软件的可扩展性和可配置性,难以满足SaaS模式下多租户的个性化需要。因此在讨论了SaaS软件关键技术之后,本文提出SaaS模式下的体系架构。在传统软件体系架构的基础上增加配置管理层和数据模式选择层。根据多租户的不同需要配置管理层可以对系统的功能进行配置管理,选择满足自身业务需要的功能。数据模式选择层是软件供应商为了考虑各种租户对系统的不同需求而对数据存储模式进行选择。如果数据扩展方案采用的是XML数据字段,则需要在此基础上添加一层XML数据处理层,完成对XML数据的解析、封装处理。这样的体系架构可以极大地满足大规模的各种行业的租户,具有极大的可扩展性。SaaS系统体系架构如图3所示。
本文就传统软件向SaaS软件转型的一些关键技术进行了研究,并给出了一些技术可行的解决方案。在此基础上对传统软件体系架构进行修改,总结出了SaaS软件的体系架构模型,可以很好地满足SaaS软件的可扩展性和可配置性要求。本文对SaaS软件的安全性研究涉及较少,安全性[5]是决定租户对SaaS软件信任的关键要素,只有很好的安全保障才能让租户放心地使用SaaS软件。因此,后期将会对安全性问题进行详细的研究。
参考文献
[1] 叶伟.互联网时代的软件革命SaaS架构设计[M]. 北京:电子工业出版社,2008
[2] 查俊,温浩宇. SaaS数据层方案比较研究[J].情报杂志, 2010,29(B06):176-177.
[3] 周健,孙丽燕.面向对象XML的存储模式的研究[J]. 计算机技术与发展,2009,19(3):114-117,119.
[4] 姜世超,基于SaaS模式Multi-Tenant应用的可配置性研究[D].大连:大连海事大学, 2009.
[5] 琚洁慧,吴吉义,章剑林,等.SaaS应用中的多租户与安全技术研究[J].电信科学,2010,26(10):41-46.