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