作者:Ash Parikh, Robert Smik, and Premal Parikh;
realalley(作者的blog:
http://blog.matrix.org.cn/page/realalley)
原文:
http://www.javaworld.com/javaworld/jw-06-2005/jw-0627-webservices.htmlhtml
Matrix:
http://www.matrix.org.cn/resource/article/44/44466_SOA+Native+XML.html
关键字:SOA;Native;XML
概要
这篇文章适合于那些正在寻找或者研究一个高效的、灵活的、基于标准的途径去实现真实世界面对服务的架构(SOA)的读者们。
随
着网络服务的生根发芽,SOA作为发展和提升软件架构质量的可行之道,我们不得不承认SOA数据的总量也在迅速膨胀。而且,随着网络服务标准在功能上的拓
宽,
SOA必须支持这些日新月异的新标准。我们必须清醒地认识到我们需要存储、管理、查询、操作、移植SOA数据,并且频繁地通过程序访问SOA数据。一个用
来制作mid-tier cache的用例可以用来显示那些技术无关的、可重用的、富功能化的服务,因此可以用来提高SOA的可测量性和运行表现。
此
外,随着企业越来越热衷于和合作伙伴的频繁协作,如何处理复杂多变的模式将成为一项挑战。因此,我们不仅需要一个简单的XML持久性机制,我们还需要一个
native 的XML
的数据管理服务器来满足SOA数据管理的复杂需要.SOA的基本原则就是为不同引用提供低耦合的解决方案。因此,数据由程序产生并服务于程序,并且数据的
存储和使用都已经被良好地优化。
在传统的SOA中,数据存储的方法通常是地址相关的,并且对具体程序来说是特定的。而一个SOA存储库是
一种处理分布式SOA数据持久化的的机制。这是一项复杂的企业级技术,不仅可以处理数据的持久化和caching,并且可以进行生命周期管理、安全、发
现、并且可以从不同的面对服务的程序中转换分布式的数据,这些程序例如silo应用,web门户、商业过程和移动应用程序。本质上,SOA数据本性上是短
暂的和流动的。因此,它需要一个native的数据存储来聚合针对特定服务的相关数据,这与运行的应用本身无关;而不会为各个独立的应用分派数据来生成服
务,否则,数据的存取将会由于没有通用性而存取不便。SOA数据通常是存储在关系数据库或者文件系统上的,但这种方式往往不能很好地处理SOA数据。
Elliotte
Harold,在他的文章"Managing XML Data: Native XML Databases," (IBM
developerWorks, June 2005)里明确地表示了native
XML数据库的好处。用他的原话说,“当你手上的工具只有一把锤子时,所有的东西都看上去像个钉子。当你唯一的工具是关系数据库时,所有的东西仿佛都可以
制成一张表。但实际上,事实远比一张张表要复杂。数据并不是都可以制成表的,并且数据通常可以从和该数据本身结构类似的工具中获益。所以,当数据是XML
形式,对应的管理工具也最好是一个native的XML数据库。
基于 XML的SOA 数据实际上不能轻松地在关系数据库上建模。
关系数据库模式的扩展性很弱,
这常常不能适应不断发展的SOA数据模式,这个缺点在企业间的伙伴合作中更为显著。文件系统同样不能提供高级的查找和管理能力,而这些需求在一个SOA中
是很基本的。所以,由于这些本质性的差别,我们非常地肯定,这些XML的数据应该是以XML方式来持久化、管理和处理。考虑到复杂多变并且不断发展的网络
服务标准列表,他们包括大量的OASIS initiatives,例如Web Services Business Process
Execution Language (WSBPEL), Web Services Security, Web Services
Distributed Management (WSDM), ebXML Collaboration Protocol Profile and
Agreement (CPPA), and Web Services Policy Framework
(WS-Policy),还有大量的World Wide Web的initiatives,以及过时的REST-based XML 。
浏
览过这些类似于字母汤(译者注:字母汤是一种罐头汤,里面是切成ABC字母图案的细面条,让小朋友边喝汤边把里面的字母排成单词来玩。)的标准,我们会发
现,基本上,这些标准通常由由XML schema来描述,例如WS-Policy XML Schema, the Collaboration
Protocol Profile (CPP) XML Schema, the Collaboration Protocol Agreement
(CPA) XML Schema。再次强调,如果数据是XML形式,它就应该以XML方式来存储、管理和对待参照图1的WS_Policy
Schema 与WS-Policy 框架标准相关的ws-policy.xsd文件。他标准化了服务消费者和服务提供者之间策略是如何交互的。
Figure 1. WS-Policy XML Schema
正如图1所显示的,与WS-Policy相关联的数据和元数据用XML形式表示,并且用XML持久机制来方便地进行存储和管理。同样的,CPP, CPA,和网络安全服务细节也同样可以在XML持久机制下被本地化地存储和管理
SOA中的Mid-tier caching
SOAs
需要持久化的机制来持久信息,例如应用程序中每个商业步骤的状态、长期的商业执行进程的状态、Web services的管理、信息的监视、可用Web
services的列表,还有更多。通常,大部分的这类信息是被频繁请求和访问的,因此这就产生了middle
tier中cache的需要,它减轻了由于大量访问同样信息存储而带来的运行瓶颈。
当SOA数据和元数据都是XML时,我们提议建立一个
简单,但是有效的mid-tier caching架构,这包括一个充当mid-tier
cache的XML数据库和大量的XQuery-powered服务。一个SOA存储库可以通过一个有效的mid-tier
caching提高原SOA的运行效率、可靠性、富功能性以及重用性。而这一切是由以下的服务驱动的:
基于策略的caching服务:为了提高运行效率和服务质量
一
个基于策略的caching服务可以建立基于XQuery的策略,而对一些低效服务进行cache。这些策略在cache被更新前同样被构造成包括
time-to-live。基于time-of-day请求的策略可以决定cache中的数据对该请求是否合法或者源数据是否必须使用。
同样,基于服务可用性的策略可以确认当前服务是否可用,结果是否可以从缓存中获得。一个cache的更新控制可以基于时间或者通过其他的配置变量来触发XML的持久性机制。这种设计同样可以包括对XML持久性机制服务请求而带来的动态just-in-time日志跟踪。
数据用途重定向服务:为了富功能化和提高运行效率。
一个数据用途重定向服务可以允许附加的过滤器和服务结果内容的搜寻标准。并且,XQuery可以被用来驱动重用内容的转换和提供对返回结果内容的分析和报告。XQuery还可以传递部分结果集和生成基于多个服务内容聚合的最终结果集。
数
据抽象服务:为了简化部署和方便维护。拥有一个数据抽象服务, 系统中的web
services就没有必要再认识所有单独的数据源。图2显示了一个Web services的很好的例子,消除了为每个操作开发单独的客户端和web
services的需要。这样的话,异构的数据源例如JDBC、HTTP、WSDL或文件系统的数据源管理都可以使用这个服务。
Figure 2. A data abstraction service eliminates the requirement of different Web services clients for different operations.
除
此之外,既然服务可以运行在任何系统上,一个SOA存储库可以被用来整合SOA中的各种服务,也可以通过与数据处理尽可能接近的数据收集来减缓
center-tier process-abstracting远程服务的效率问题。作为一个在central-tier的persistence
layer,SOA存储库可以用来存储事务数据从而实现很多用途,包括分析和集成管理,例如日志记录。通过在central-tier处理抽象与合成的数
据元素,一个集中的SOA数据存储库形成了。
现存的SOA技术,例如企业服务总线和orchestration引擎都可以部署SOA存储
库进行状态管理、工作流持久化和信息持久化。一个SOA存储库同样可以在SOA注册中提供持久化中枢,不管他们是UDDI (Universal,
Description, Discovery, and Integration) 还是ebXML 注册,从而来允许发现、发布、签定服务。
对SOA中复杂多变的XML数据管理的需要
正
如前面讨论过,web services和SOA在产生了大量复杂的、作为程序间交换的data-rich
XML消息形式的新数据,而这些数据必须存储然后用来审核和分析。当我们看着这些可以实现SOA的各种各样的技术,很明显的是,SOA的关键特征和带来的
好处构成了厂商在这个领域的准则。如图3,这些功能构成了核心的SOA和web services的基础构造
--Web services 管理
--Web services监视
--SOA管理
--Web services安全
--SOA持久化和caching
--SOA发现、发布和签署。
Figure 3. Core Web services infrastructure (Source: Burton Group).
我们可以用下列方式描述XML数据管理的用途
--SOA元数据的持久化
--SOA的发现、发布和签署
--Web services管理数据的持久化
--加速caching
--服务集成
--服务策略的caching和管理
SOA中XML数据管理还可以:
--监视、日志、审核的持久化
--安全能力的持久化
--SOA管理
--SOA OLAP数据和元数据的移植和持久化
--商业伙伴的档案和协议的持久化
--消息的持久化
--状态管理
--Schema 版本化
Native XML数据管理服务器概览
一
个XML数据管理服务器(XDMS)不仅仅是一个XML数据的数据仓库。一个XMDS是一个复杂的系统,必须具有可适应性,可测量性和高效性。实际中,大
部分XML数据的管理服务器不能满足这些苛刻的需要。XDMS中最典型的是我们并不需要预先知道任何关于XML文档结构的知识。任何合法的XML文档例如
XML,网络服务描述语言(WSDL),CPPA,XML Schema 或者Extensible Stylesheep Language
Transformation可以被随意插入,然后native的XML数据管理服务器可以自动生成需要的内部结构来满足这些存储。并且,XML数据管理
服务器支持事务处理、索引、schema或者DTD验证(有些支持schema
versioning)、扩展连接和服务镜像。一个XDMS解决方案必须也能够存储非XML数据,例如二进制数据,因此要提供一个能够存储任何我们可能需
要的内容的解决方案。
对SOA存储库操作的native XML接口是XQuery.为了探究XML数据库的完全潜力,XQuery是一个用来生成、管理、检测、管理XML数据的途径。XQuery还提供了一个标准的方案来统一异构的数据源来使得他们看起来像一个单独的服务器。
XQuery介绍
XQuery是一个多功能的语言。例如,表达式可以合成从而随意生成复杂的对一个或多个XML数据集合的查询。XQuery同时提供了基于XML模式和DTD的强类型机制和基于原始 XML数据的弱类型机制
XQuery数据模型
XQuery
数据模型比XML Infoset and Post-Schema Validation Infoset
(PSVI)的XML数据模型更具有扩展性。XQuery通过数据模型的操作来定义,但他约束了数据模型中文档和事例的组织。这个数据模型由被搜索的
XML数据、所有中间值和最终查询结果组成。他支持可以产生非XML数据、XML碎片和类型与非类型数据的中间表达式。
XQuery和XML模式对XML数据有相同的类型概念。XQuery提供基于XML Schema内置类型和用户自定义的Schema类型。Query同样支持在现存的XML Schema数据类型之外的数据类型
XQuery数据模型和类型系统的组件如下:
XQuery表达式有一个静态的类型和一个动态的类型。静态的类型适合那些编译时运行的表达式。动态的类型适合那些表达式的结果并且在运行时运用的表示式
静态的类型和动态类型的比较:
静态:对应文挡与查询的类型索引的集合
动态:管理查询是如何进行的数值索引规则的集合
XQuery syntax
几个可以被用在语法查询中的XQuery表达式的类型
除此之外,XQuery的实现可以被扩展。更多的复杂实现包括对文件系统、HTTP、Web Services、Java数据连接桥(JDBC),Java消息服务和其他数据源的支持
图4中,XQuery提供了对native XML数据管理服务器的整合,作为一个灵活的和基于标准的持久性机制。
Figure 4. XML-based persistence mechanism for SOA.
我
们推荐native
XML数据管理服务器的使用(如图4所示),来作为对SOA持久化的一个好的实现。一个native的XML数据管理服务器可以被用来进行SOA内部服务
的整合,因为服务是本地独立的。 David S. Linthicum在他的一篇题为"The Importance of Persistence
within a
SOA”,的blog中提到,服务的整合、持久性问题、存储、事务数据的处理、集中的原数据是作为面对信息服务集成的关键方面。整合的服务同样可以通过使
数据接近数据处理的组件而提高系统效率。在central tier使用一个原生的XML数据管理服务器允许架构师们为分析和日志而存储事务处理信息。
SOA中,XQuery使用实例
XQuery在SOA中的强大能力表现在许多复杂的查询功能。下面的这些例子证明一个具体的XQuery实现是怎么被一个具体的native XML数据管理服务器无缝整合的。
例 1:使用XQuery往WSDL中插入操作
...
declare namespace wsdl = "http://schemas.xmlsoap.org/wsdl/";
insert
<wsdl:operation name="testInsertOperation" parameterOrder="id">
<wsdl:input message="impl:testInsertOperationRequest" name="testInsertOperationRequest"/>
<wsdl:output message="impl:testInsertOperationResponse" name="testInsertOperationResponse"/>
</wsdl:operation>
after doc("xxx:///SOARepository/webservices/PurchaseOrderWS.xml")
/wsdl:definitions/wsdl:portType/wsdl:operation[@name="getPODetail"]
...
例2:使用XQuery检查服务的可用性和更新注册器的状态
...
declare namespace wsdl = "http://schemas.xmlsoap.org/wsdl/";
declare namespace wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
for $i in collection('xxx:///SOARepository/webservices')/wsdl:definitions
where fn:doc-available
(fn:concat($i/wsdl:service/wsdl:port/wsdlsoap:address/@location,'?wsdl' ))
return
<Service>
<TimeStamp>fn:current-date()</TimeStamp>
<Status>down</Status>
</Service>
...
例三:用XQuery测量SOPA消息的可靠性
...
declare namespace wsdl = "http://schemas.xmlsoap.org/wsdl/";
declare namespace msg ="http://schemas.xyz.com/msg";
declare namespace SOAP="http://schemas.xmlsoap.org/soap/envelope/";
<ExpiredMessage>
{
for $i in doc('file:///c:/SOARepository/ReliableMessaging/RM14.xml')/SOAP:Envelope
where $i/SOAP:Header/ReliableMessage/TimeToLive < current-dateTime()
return
$i
}
</ExpiredMessage>
...
例4,用XQuery找回在策略文档中使用过的记号类型
...
declare namespace wsp="http://schemas.xmlsoap.org/ws/2004/09/policy/";
declare namespace wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
<Tokens>
{
for $policy in collection('xxx:///SOARepository/WSPolicy')/wsp:Policy
return $policy/wsp:ExactlyOne/wsp:All/wsse:SecurityToken/wsse:TokenType
}
</Tokens >
...
结论
在
这篇文章中,我们介绍了一个native的XML数据管理服务器作为最合理的存储SOA数据的途径,因为数据本身是基于XML的。有些人可能会争论这些数
据和元数据也可以用关系数据库来存储和管理。但是,由XML产生的数据和元数据必须被转换成相关的表达,从而进行大规模的映射和管理。由于企业中SOA数
据和元数据迅速膨胀,复杂度将会越来越大。并且,由于这些数据经常被存取和消耗,一个由XQuery驱动的native
XML数据管理服务器能被用来提供一个基于标准的中间缓存来减少运行时的负荷和提高SOA的可测量性和可靠性。
我们要感谢
Infravio 市场部副总裁Miko Matsumura,他同样是Sun Microsystems的前Java Evangelist,SOA
Blueprints的共同创始人,ebXML和software engineer with Cyclone
Commerce专家。同眼感谢Frank Cohen,Raining Data公司的技术主管来对本人进行审核。
关于作者
Ash
Parikh是Raining Data公司企业应用小组的主管。他是在SOA和分布式领域计算的著名专家,出席过OASIS Symposium
2005,Delphi BPX Summit 2004, Delphi Enterprise On-Demand 2004, JavaOne
2004, JavaOne 2003, BEA e-World 2002, and JavaOne 2002.
Parikh有超过
15年的IT经验并且是Java Community Process和OASIS technical
committees的会员。他是《Oracle9iAS Building J2EE Applications》 (Osborne Press,
November 2002)的作者之一,并且在avaWorld, XML-Journal, Java Pro, Web Services
Journal, ADTmag, Softwaremag.com, and Java Skyline. 发表了多篇文章。
Robert
Smik同样是 Raining
Data公司企业应用小组的领袖。他从事应用程序、软件设计和开发超过15年。他的经历包括设计和开发高复杂度的数据系统,architecting
multitier网络环境,设计和开发各种连接解决方案,产品和智能卡,并且还有SOA和数据集成工具。Smik是HL7 and
CDISC的核心成员,他并且在XML-Journal and JavaWorld发表过论文。
Premal Parikh同样是
Raining Data公司企业应用小组的领袖,他有10年的软件工业经验,包括设计产品,原形,分析,工程建模和B2B
市场的门户建设。他同样也是OASIS Web services standards technical committees.的会员。
资源
--Matrix:
http://www.matrix.org.cn
--Javaworld:
http://www.javaworld.com
--XQuery:
http://www.w3.org/TR/xquery/
--Web Services 注册器在SOA中的的角色(Burton Group, November 2004):
http://www.burtongroup.com/events/downloads/ppt/972.ppt
--知识:原数据的基础:存储库vs 注册器:http://www.dmreview.com/article_sub.cfm?articleId=1025672
--“SOA和持久化数据的需要”
http://www.itarchitect.co.uk/articles/display.asp?id=162
--Web Services 测率框架http://www-128.ibm.com/developerworks/library/specification/ws-polfram/
--OASIS Web service技术研究组
http://www.oasis-open.org/committees/tc_cat.php?cat=ws
--OASIS电子商务技术研究组
http://www.oasis-open.org/committees/tc_cat.php?cat=ec
--Web Services Policy XML模式
http://www-128.ibm.com/developerworks/library/specification/ws-polfram/ws-policy.xsd
--揭穿XQuery的神话和误解http://www-128.ibm.com/developerworks/xml/library/x-xqmyth.html
--管理XML数据:原生XML数据库http://www-128.ibm.com/developerworks/xml/library/x-mxd4.html
--SOA中持久化的重要性http://www.webservices.org/index.php/ws/content/view/full/63535