In this paper, a new model is proposed for distributed commodity information integration, which is built upon RESTful Web services and Mashup technology. And based on the model, a prototype system is developed for one-stop online Chinese book information search, and the applicability and efficiency of the model are tested in some level.
电子商务的发展促使电子商务网站及其提供的商品信息迅猛增长。由于网站之间彼此孤立,信息共享和应用交互比较困难,海量的商品信息也呈现出分布、多样和异构的特征,使得用户较难及时高效地获得所需信息。因此,如何实现分布式商品信息集成、为用户提供一站式的商品信息检索服务,已经成为学术界和业界关注的热点问题之一。传统的分布式技术由于其复杂性和局限性已经不能很好地解决这一问题,Web2.0和面向服务架构SOA的深入发展为解决这一问题提供了良好的契机。
近年来,随着Web2.0和SOA的发展及融合,对REST服务和Mashup这两种新兴技术和模式的研究引起了国内外学者的广泛关注。Schroth等[ 1, 2, 3]从技术和商业角度对Web2.0和SOA进行了比较分析,提出了基于SOA以及REST服务和Mashup构建全球化服务网络的框架。Thor[ 4]对Mashup应用于数据整合进行了研究,提出一个实现数据集成的Mashup框架并应用于在线书目引用服务中。Alani等[ 5]通过创建小型、以数据为中心的本体,将多个分布异构数据源集成起来创建Mashup应用。Wang等[ 6]提出了一个基于本体和贝叶斯网络的方法,实现在线
旅游信息集成并创建旅游推荐系统。姚鹤岭[ 7]和詹骞[ 8]分别研究了REST服务在GIS中的应用。李峰等[ 9]从Mashup体系架构出发,论述归纳了Mashup相关技术。陈亮等[ 10]利用已发布的REST服务构建了一个多数据源的简单商品查询系统。李凌等[ 11]以服务增值为原则,提出了一个图书馆推荐书目服务的Mashup应用方案。
这些文献从不同角度对REST服务和Mashup在不同领域的应用提出了框架及方法。但是互联网上的商品信息具有海量、分布和异构等特征,具体到如何利用REST服务和Mashup实现分布式商品信息集成值得深入研究。目前国内由于缺乏Web API的支持,商品信息集成主要采用Web信息抽取方法,其局限性在于过份依赖网站和网页结构,较难保证所抽取信息的准确性和有效性,同时,信息抓取工具不具有普适性,从而导致不必要的开发负担[ 12]。国外现有的购物类Mashup应用主要基于Amazon、eBay等提供的API构建,采用的协议各不相同,大部分Mashup应用基于一个或几个固定的数据源,其设计模式及实现方法也各不相同。
针对这一现状,本文提出了一种基于REST服务和Mashup实现分布式商品信息集成的模型,主要解决的关键问题是分布式数据源的集成和异构数据的融合,同时保证系统具有简单性及较好的可扩展性。该模型利用REST服务实现对底层分布式数据源的访问,降低了系统的复杂性;同时,对现有Mashup应用实现架构进行扩展,提出一个服务总线方案,以实现分布式数据源集成及灵活扩展;在Mashup服务器中引入语义网技术对多数据源的数据进行处理,以实现异构数据的融合。本文对该模型的特性进行了分析和测试,并以图书商品为例,实现了一个一站式的中文在线图书商品查询比价系统,验证了模型的可行性和有效性。
REST是一种分布式超媒体系统的架构风格,由Fielding博士于2000年在其博士论文中首次提出[ 13]。近年来,遵从REST架构风格的REST服务由于其简单性、松散耦合、高度可伸缩性以及良好的性能等优势,在Web服务的设计与开发领域得到广泛的关注和应用。REST服务采用面向资源的架构,将网络上所有事物都抽象为资源,每个资源都有唯一的资源标识符,通过统一接口对资源进行操作,所有操作都是无状态的[ 14]。它以更加贴近Web特性的方式实现Web服务,完全基于现有的Web标准协议,降低了开发的复杂性,提高了松散耦合性、互操作性和可扩展性。与基于SOAP的Web服务相比,REST服务更加适合于互联网规模的、开放的、跨组织的分布式信息集成和应用开发。
Mashup是近年来迅速发展起来的Web2.0应用开发的一种新兴技术,它可以将来自多个数据源的内容和服务进行创新组合,从而创建出一种全新的Web应用。Mashup实现了整合资源和服务的技术创新以及内容和功能的按需定制[ 15],具有聚合增值、易于实现、可重用性强等优势[ 16, 17, 18]。Mashup应用的体系结构主要由三部分组成:API/内容提供者、Mashup站点和客户端的Web浏览器[ 12]。其中,API/内容提供者是Mashup应用所融合内容和功能的提供者,它们通常会通过标准Web协议发布自己的内容;Mashup站点是Mashup应用逻辑所在的地方,Mashup应用通常使用服务器和客户机端逻辑的组合来实现集成。客户端的Web浏览器是以图形化方式呈现Mashup应用程序以及与用户交互的地方。Mashup应用开发涉及到很多复杂技术,包括Web服务/REST服务、Ajax、RSS/Atom、XML/JSON以及语义网技术等[ 19]。
本文基于REST服务和Mashup两种技术,提出了一种实现分布式商品信息集成的模型。该模型的核心问题是实现分布式数据源的集成和异构数据的融合,并使系统具有简单性以及较好的可扩展性。因此,该模型以REST服务为基础,提供对分布式数据源的访问;通过服务总线架构实现底层分布式数据源的集成;在数据融合中引入语义网技术来解决数据异构性问题,从而使整个系统不仅实现了分布式异构数据源的整合,而且具有简单性、较好的可扩展性及松散耦合性。
本文所提出的模型共分为5层,自底向上依次为数据层、服务层、服务总线层、逻辑层和表现层,如图1所示:
其中服务层、服务总线层和逻辑层是整个模型的关键层次。各层次的主要功能如下:
(1)数据层是整个模型的基础,包括本地数据源和外部数据源。数据源通过REST服务暴露其数据。
(2)服务层通过创建REST服务实现对底层分布异构数据源的访问。这些REST服务统一由服务总线层来管理和调用。REST服务是一组由URI标识的资源,通过统一的HTTP方法实现对资源的操作。这种设计模式类似于关系型数据库的设计,可以降低系统开发的复杂性。
(3)服务总线层是本模型的核心之一,主要功能包括服务注册、管理和服务调用。该层作为连接上层服务访问请求与服务层之间的一个中间件形式存在,不仅屏蔽了底层服务调用的复杂性,实现了分布式数据源的集成;而且由于引入动态服务列表机制,还能方便地添加、修改和删除服务,使整个模型具有更好的可扩展性。
(4)逻辑层是本模型的另一个核心层,其主要功能是将多个分布异构数据源的访问结果数据进行融合处理。该层利用语义网技术实现异构数据融合。首先创建商品领域本体,利用服务总线层返回的查询响应结果创建本体实例,并依据所定义的领域本体对本体实例进行语义查询,最终将融合的结果展现给客户端。
(5)表现层是系统与用户之间的交互界面,其主要功能是根据用户需求发送请求,并将请求处理结果按照用户的个性化需求展示出来。
本模型的关键层次是服务总线层和逻辑层,下面将对其实现原理及关键技术进行详细阐述。
(1) 服务总线层
Mashup应用的实现方式主要有两种:客户机端Mashup[ 20]和服务器端Mashup[ 21]。在客户机端Mashup中,由于浏览器直接与数据源进行连接,因此在数据融合和安全性等方面存在一定局限性。在服务器端Mashup中,Mashup服务器作为代理处理客户端请求以及访问多数据源的响应。这种实现方式从安全性、数据融合、可伸缩性等方面较第一种实现方式具有优势。为了更有效地实现多数据源集成并使整个系统获得更好的可扩展性,本模型对服务器端Mashup实现方式进行了扩展,引入了服务总线层。
服务总线层的总体流程如图2所示。服务总线层通过暴露一个统一的URI来接收上层请求。当它接收到一个HTTP请求后,首先要解析该请求的URI以分离出所需参数,并在动态服务列表中读取各个服务的相关信息,然后将两者结合起来构造访问各个服务的URI并直接向该URI发送HTTP请求来调用各个服务。当服务总线层接收到访问各个服务的响应结果后,对其进行预处理,合并为一个良构的XML文档返回给逻辑层进行Mashup处理。
动态服务列表是服务总线层的一个核心机制,旨在更加方便灵活地实现服务的调用及扩展。传统Web服务调用通常需要复杂的客户端编程,而大多数REST服务调用通过Web浏览器发送HTTP请求即可实现。基于REST服务调用的这种简单性以及对目前REST服务调用机制的分析研究,笔者在服务总线层引入了动态服务列表,该表是一个数据库表,用来记录调用Web服务所必需的常见参数。这样,不仅可以通过后台服务信息管理系统十分方便地添加服务,而且服务列表还可以通过添加另外的服务总线地址不断进行扩展,使得整个系统变得更加灵活和易于扩展。
服务总线的实现采用Ruby on Rails框架。Rails是目前实现最好、开发效率最高的REST框架,它采用MVC(Model-View-Control)模式进行Web应用开发,并使各个层次无缝地协同运转。服务总线的具体实现如下:
①在MySQL Server中创建数据库“Booksearch”,在该库下创建数据表“Services”,用来存放服务注册信息。对应该数据表创建模型类“Service”,它继承ActiveRecord::Base基类。
②为服务总线控制器设置URI路由规则:
ActionController::Routing::Routes.draw do |map|
map.resources :services #第一条路由规则
map.connect ':controller/:action/:type/:title'
#第二条路由规则
map.connect ':controller/:action/:type/:title.:format'
#第三条路由规则
end
第一条路由规则用于服务信息管理,第二、三条路由规则用于服务调用。
③创建服务总线控制器“BooksearchController”,它继承基类“ApplicationController”。该类主要实现对底层各个数据源所暴露服务的调用。当服务总线接收到逻辑层发送的HTTP请求后,按照预先设置的URI路由规则解析出URI路径中所包含的客户端用户的查询参数。然后,访问动态服务列表,检索出该服务的根URI,并将查询参数附加其后,构成访问服务的目标URI。这样,直接使用Rails内置的Open-URI库中的Open方法即可访问服务并获取响应结果。
④创建服务信息管理模块控制器“ServicesController”,它继承基类“ApplicationController”,实现服务层的服务信息管理,包括增加、删除、修改和查询等。
(2)逻辑层
逻辑层的主要功能模块包括:请求代理、Mashup引擎和领域本体,其总体架构如图3所示:
请求代理的主要功能是将客户端的请求转发给服务总线层,引入该模块主要考虑两点:
①逻辑层和服务总线层可能部署于不同的服务器,受浏览器同源策略的限制,如果客户端直接向服务总线层URI发出请求,可能导致请求失败;
②如果在发送给服务总线的URI中直接加入中文,也会造成访问失败,因此需要先对URI中的非常规字符进行编码后再将请求发送给服务总线层。
Mashup引擎是逻辑层的关键组件,其主要功能是对访问服务总线所返回的响应结果进行融合处理,并将其按照用户实际需求以一定格式返回给客户端。从服务总线层返回的响应结果来自多个分布异构数据源,因此,在进行数据融合处理时要解决的关键问题是数据的异构性,具体表现为:数据的层次结构不同、领域定义不同以及标签语义不同。由于目前大多数Mashup应用基于一个或几个固定数据源,因此实现异构数据融合的方法通常是基于对各个数据源数据结构的分析,将不同数据源的数据结构进行一定的格式转换后再进行数据融合处理。该方法的局限性是编程量较大,而且系统的可扩展性不是很好。为此,本模型在逻辑层利用语义网相关技术来解决异构数据的融合,具体实现如下:
①创建商品领域本体。以图书商品为例,假设底层有4个数据源:当当、淘宝、China-pub以及Amazon,则本体中的主要类及属性的定义如下:
1)图书商品类为父类,当当、淘宝、China-pub、Amazon的图书商品为其子类,它们是一对多的关系,如图4所示:
2)定义图书商品类的属性及其之间的关系。
②数据源信息提取。利用XPath技术,从服务总线返回的结果XML文档中依次将各个数据源查询响应结果的有效数据提取出来。
③创建本体实例。首先,在服务器上创建一个OWL文件模板,并在该模板中导入①中所创建的图书商品本体描述文件。然后,将提取出的各个数据源的图书商品信息依次添加至该模板,以创建图书本体实例。
④对图书本体实例进行基于元数据语义扩展查询,实现异构数据的融合。在创建商品领域本体时,对描述元数据元素的关键词进行了同义语义扩展,即根据元数据语义来定义它们之间的关系。因此,利用Jena框架编程,采用SPARQL语言可以实现对本体实例的语义查询,即不只是字符匹配,而会自动根据元数据的语义及其之间的关系进行匹配。这样不仅减少了冗余信息的生成,而且消除了漏匹配问题,也使系统较易实现扩展。
基于3.1节提出的模型,本文以图书商品为例,设计并实现了一个一站式的在线中文图书商品信息查询及比价原型系统。该系统选择了三个典型的中文在线图书网站(当当、China-pub和淘宝)作为底层模拟数据源,创建REST服务来访问其中的图书商品信息;选择Amazon作为远程数据源,通过其提供的REST服务调用图书商品信息。整个系统实现是一个Web应用,用户在Web浏览器中登录该系统网站,即可以多种方式查询到多个图书网站的图书商品信息并进行比价,避免了频繁登录各个网站。
原型系统的总体架构如图5所示,主要由Web客户端、Mashup服务器、Rails服务器以及数据源构成。其中,数据源包括本地和远程数据源;Web服务器实现服务创建、服务总线以及服务注册与管理;Mashup服务器对服务总线返回的响应结果进行融合处理、语义查询,并将查询结果返回给客户端;客户端功能是按照用户实际需求展示信息,并利用Ajax技术与Mashup服务器之间进行异步通信,以提高系统性能并丰富用户体验。系统各组件之间的交互流程如下:
(1)用户进入系统网站,打开图书商品查询网页,选择查询方式并输入关键字,提交请求后发送到Mashup服务器;
(2)Mashup服务器中的请求代理构造访问服务总线层的URI并向其发送请求;
(3)服务总线层根据预先配置的URI路由规则分离出请求参数,检索动态服务列表,调用各个REST服务以对底层各个数据源进行查询;
(4)服务层的各个服务将对底层数据源的查询结果返回给服务总线,服务总线对该结果数据进行预处理并返回给Mashup服务器;
(5)Mashup服务器对服务总线返回的响应数据进行融合处理,创建本体实例,并依据定义的领域本体,应用SPARQL语言对本体实例进行基于元数据语义的扩展查询,并将查询处理结果返回给客户端;
(6)客户端按照用户实际需求展示信息。用户接收到搜索结果列表后,可以选择排序方式、进行比价、查询用户评论以及链接到相关图书商品网页购买商品。
系统运行结果的主要界面如图6所示:
本文结合REST服务和Mashup两种技术的优势,实现了Web环境下分布的、异构的商品信息数据源的集成,并能够向用户提供一站式商品信息查询服务。由于本模型以REST服务为基础,因此具有简单性、松耦合性和跨平台性。同时,较好的可扩展性也是本模型的一大特点。整个模型采用分层架构,各层以及模块之间松散耦合,易于维护和扩展;在服务总线层引入了动态服务列表机制,可以方便地添加服务,实现服务的“即插即用”,易于实现底层数据源的扩展,还可以在服务总线级进行扩展,不仅能够提高服务访问速度,实现分布式计算的平衡负载,而且使得整个系统变得更加灵活和易于扩展;在逻辑层的数据Mashup中利用语义网技术,不仅解决了访问分布式数据源的数据异构问题,而且当底层数据源发生改变或进行扩展时,只需要修改所创建的领域本体,因此易于实现底层扩展。
由于本文所提出的模型的核心基础是REST服务,因此,REST服务的性能对于模型系统的整体性能至关重要。在现有技术和条件的基础上,参考目前传统Web服务的性能测试指标,设计了一个可行的测试方案,重点测试了REST服务的两个性能指标:网络通信量,即访问Web服务所必需产生的网络通信量;服务响应时间,即从客户端发出服务请求到收到正确的响应数据所需的时间,并与基于SOAP/WSDL的传统Web服务性能进行比较分析,结果如图7和图8所示:
结果表明,访问REST服务所产生的网络通信量远低于传统Web服务,这提高了网络带宽利用率;REST服务的响应时间虽然略高于Java开发的传统Web服务,但随着访问负载的增加,REST服务的响应时间的增幅比较平稳,这意味着在更大的访问负载情况下,REST服务的响应时间可能优于传统Web服务,对此进行进一步研究是有意义的。
随着Internet和相关Web技术的发展,将Web上海量的、分布的和异构的电子商务网站的信息集成起来,实现信息共享和增值,使得企业和用户可以在统一环境下从多个分布式异构数据源获取所需的商务信息,对于推动电子商务发展具有重要的现实意义。本文就如何利用REST服务和Mashup这两种新兴技术实现跨平台的分布式商品信息集成进行了有益的探讨,提出了一种实现分布式商品信息集成的模型,并以图书商品为例,实现了一站式的在线中文图书商品信息查询比价系统,验证了模型的可行性和有效性。该模型提出了一种服务总线架构,并引入语义网技术实现异构数据融合,从而提高了系统的可扩展性和灵活性。 然而,有效地实现跨平台的分布式商品信息集成涉及一系列非常复杂的基础理论与技术问题。在本文研究的基础上,尚需在数据缓存、安全性、语义REST服务、基于本体的商品信息语义扩展查询方法等方面进行进一步深入的研究。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|
[15] |
|
[16] |
|
[17] |
|
[18] |
|
[19] |
|
[20] |
|
[21] |
|