SOA數(shù)據(jù)需要一個native XML數(shù)據(jù)管理服務器
作者: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
概要
這篇文章適合于那些正在尋找或者研究一個高效的、靈活的、基于標準的途徑去實現(xiàn)真實世界面對服務的架構(gòu)(SOA)的讀者們。
隨 著網(wǎng)絡服務的生根發(fā)芽,SOA作為發(fā)展和提升軟件架構(gòu)質(zhì)量的可行之道,我們不得不承認SOA數(shù)據(jù)的總量也在迅速膨脹。而且,隨著網(wǎng)絡服務標準在功能上的拓 寬, SOA必須支持這些日新月異的新標準。我們必須清醒地認識到我們需要存儲、管理、查詢、操作、移植SOA數(shù)據(jù),并且頻繁地通過程序訪問SOA數(shù)據(jù)。一個用 來制作mid-tier cache的用例可以用來顯示那些技術(shù)無關的、可重用的、富功能化的服務,因此可以用來提高SOA的可測量性和運行表現(xiàn)。
此 外,隨著企業(yè)越來越熱衷于和合作伙伴的頻繁協(xié)作,如何處理復雜多變的模式將成為一項挑戰(zhàn)。因此,我們不僅需要一個簡單的XML持久性機制,我們還需要一個 native 的XML 的數(shù)據(jù)管理服務器來滿足SOA數(shù)據(jù)管理的復雜需要.SOA的基本原則就是為不同引用提供低耦合的解決方案。因此,數(shù)據(jù)由程序產(chǎn)生并服務于程序,并且數(shù)據(jù)的 存儲和使用都已經(jīng)被良好地優(yōu)化。
在傳統(tǒng)的SOA中,數(shù)據(jù)存儲的方法通常是地址相關的,并且對具體程序來說是特定的。而一個SOA存儲庫是 一種處理分布式SOA數(shù)據(jù)持久化的的機制。這是一項復雜的企業(yè)級技術(shù),不僅可以處理數(shù)據(jù)的持久化和caching,并且可以進行生命周期管理、安全、發(fā) 現(xiàn)、并且可以從不同的面對服務的程序中轉(zhuǎn)換分布式的數(shù)據(jù),這些程序例如silo應用,web門戶、商業(yè)過程和移動應用程序。本質(zhì)上,SOA數(shù)據(jù)本性上是短 暫的和流動的。因此,它需要一個native的數(shù)據(jù)存儲來聚合針對特定服務的相關數(shù)據(jù),這與運行的應用本身無關;而不會為各個獨立的應用分派數(shù)據(jù)來生成服 務,否則,數(shù)據(jù)的存取將會由于沒有通用性而存取不便。SOA數(shù)據(jù)通常是存儲在關系數(shù)據(jù)庫或者文件系統(tǒng)上的,但這種方式往往不能很好地處理SOA數(shù)據(jù)。
Elliotte Harold,在他的文章"Managing XML Data: Native XML Databases," (IBM developerWorks, June 2005)里明確地表示了native XML數(shù)據(jù)庫的好處。用他的原話說,“當你手上的工具只有一把錘子時,所有的東西都看上去像個釘子。當你唯一的工具是關系數(shù)據(jù)庫時,所有的東西仿佛都可以 制成一張表。但實際上,事實遠比一張張表要復雜。數(shù)據(jù)并不是都可以制成表的,并且數(shù)據(jù)通常可以從和該數(shù)據(jù)本身結(jié)構(gòu)類似的工具中獲益。所以,當數(shù)據(jù)是XML 形式,對應的管理工具也最好是一個native的XML數(shù)據(jù)庫。
基于 XML的SOA 數(shù)據(jù)實際上不能輕松地在關系數(shù)據(jù)庫上建模。 關系數(shù)據(jù)庫模式的擴展性很弱, 這常常不能適應不斷發(fā)展的SOA數(shù)據(jù)模式,這個缺點在企業(yè)間的伙伴合作中更為顯著。文件系統(tǒng)同樣不能提供高級的查找和管理能力,而這些需求在一個SOA中 是很基本的。所以,由于這些本質(zhì)性的差別,我們非常地肯定,這些XML的數(shù)據(jù)應該是以XML方式來持久化、管理和處理。考慮到復雜多變并且不斷發(fā)展的網(wǎng)絡 服務標準列表,他們包括大量的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字母圖案的細面條,讓小朋友邊喝湯邊把里面的字母排成單詞來玩。)的標準,我們會發(fā) 現(xiàn),基本上,這些標準通常由由XML schema來描述,例如WS-Policy XML Schema, the Collaboration Protocol Profile (CPP) XML Schema, the Collaboration Protocol Agreement (CPA) XML Schema。再次強調(diào),如果數(shù)據(jù)是XML形式,它就應該以XML方式來存儲、管理和對待參照圖1的WS_Policy Schema 與WS-Policy 框架標準相關的ws-policy.xsd文件。他標準化了服務消費者和服務提供者之間策略是如何交互的。

Figure 1. WS-Policy XML Schema
正如圖1所顯示的,與WS-Policy相關聯(lián)的數(shù)據(jù)和元數(shù)據(jù)用XML形式表示,并且用XML持久機制來方便地進行存儲和管理。同樣的,CPP, CPA,和網(wǎng)絡安全服務細節(jié)也同樣可以在XML持久機制下被本地化地存儲和管理
SOA中的Mid-tier caching
SOAs 需要持久化的機制來持久信息,例如應用程序中每個商業(yè)步驟的狀態(tài)、長期的商業(yè)執(zhí)行進程的狀態(tài)、Web services的管理、信息的監(jiān)視、可用Web services的列表,還有更多。通常,大部分的這類信息是被頻繁請求和訪問的,因此這就產(chǎn)生了middle tier中cache的需要,它減輕了由于大量訪問同樣信息存儲而帶來的運行瓶頸。
當SOA數(shù)據(jù)和元數(shù)據(jù)都是XML時,我們提議建立一個 簡單,但是有效的mid-tier caching架構(gòu),這包括一個充當mid-tier cache的XML數(shù)據(jù)庫和大量的XQuery-powered服務。一個SOA存儲庫可以通過一個有效的mid-tier caching提高原SOA的運行效率、可靠性、富功能性以及重用性。而這一切是由以下的服務驅(qū)動的:
基于策略的caching服務:為了提高運行效率和服務質(zhì)量
一 個基于策略的caching服務可以建立基于XQuery的策略,而對一些低效服務進行cache。這些策略在cache被更新前同樣被構(gòu)造成包括 time-to-live。基于time-of-day請求的策略可以決定cache中的數(shù)據(jù)對該請求是否合法或者源數(shù)據(jù)是否必須使用。
同樣,基于服務可用性的策略可以確認當前服務是否可用,結(jié)果是否可以從緩存中獲得。一個cache的更新控制可以基于時間或者通過其他的配置變量來觸發(fā)XML的持久性機制。這種設計同樣可以包括對XML持久性機制服務請求而帶來的動態(tài)just-in-time日志跟蹤。
數(shù)據(jù)用途重定向服務:為了富功能化和提高運行效率。
一個數(shù)據(jù)用途重定向服務可以允許附加的過濾器和服務結(jié)果內(nèi)容的搜尋標準。并且,XQuery可以被用來驅(qū)動重用內(nèi)容的轉(zhuǎn)換和提供對返回結(jié)果內(nèi)容的分析和報告。XQuery還可以傳遞部分結(jié)果集和生成基于多個服務內(nèi)容聚合的最終結(jié)果集。
數(shù) 據(jù)抽象服務:為了簡化部署和方便維護。擁有一個數(shù)據(jù)抽象服務, 系統(tǒng)中的web services就沒有必要再認識所有單獨的數(shù)據(jù)源。圖2顯示了一個Web services的很好的例子,消除了為每個操作開發(fā)單獨的客戶端和web services的需要。這樣的話,異構(gòu)的數(shù)據(jù)源例如JDBC、HTTP、WSDL或文件系統(tǒng)的數(shù)據(jù)源管理都可以使用這個服務。

Figure 2. A data abstraction service eliminates the requirement of different Web services clients for different operations.
除 此之外,既然服務可以運行在任何系統(tǒng)上,一個SOA存儲庫可以被用來整合SOA中的各種服務,也可以通過與數(shù)據(jù)處理盡可能接近的數(shù)據(jù)收集來減緩 center-tier process-abstracting遠程服務的效率問題。作為一個在central-tier的persistence layer,SOA存儲庫可以用來存儲事務數(shù)據(jù)從而實現(xiàn)很多用途,包括分析和集成管理,例如日志記錄。通過在central-tier處理抽象與合成的數(shù) 據(jù)元素,一個集中的SOA數(shù)據(jù)存儲庫形成了。
現(xiàn)存的SOA技術(shù),例如企業(yè)服務總線和orchestration引擎都可以部署SOA存儲 庫進行狀態(tài)管理、工作流持久化和信息持久化。一個SOA存儲庫同樣可以在SOA注冊中提供持久化中樞,不管他們是UDDI (Universal, Description, Discovery, and Integration) 還是ebXML 注冊,從而來允許發(fā)現(xiàn)、發(fā)布、簽定服務。
對SOA中復雜多變的XML數(shù)據(jù)管理的需要
正 如前面討論過,web services和SOA在產(chǎn)生了大量復雜的、作為程序間交換的data-rich XML消息形式的新數(shù)據(jù),而這些數(shù)據(jù)必須存儲然后用來審核和分析。當我們看著這些可以實現(xiàn)SOA的各種各樣的技術(shù),很明顯的是,SOA的關鍵特征和帶來的 好處構(gòu)成了廠商在這個領域的準則。如圖3,這些功能構(gòu)成了核心的SOA和web services的基礎構(gòu)造
--Web services 管理
--Web services監(jiān)視
--SOA管理
--Web services安全
--SOA持久化和caching
--SOA發(fā)現(xiàn)、發(fā)布和簽署。

Figure 3. Core Web services infrastructure (Source: Burton Group).
我們可以用下列方式描述XML數(shù)據(jù)管理的用途
--SOA元數(shù)據(jù)的持久化
--SOA的發(fā)現(xiàn)、發(fā)布和簽署
--Web services管理數(shù)據(jù)的持久化
--加速caching
--服務集成
--服務策略的caching和管理
SOA中XML數(shù)據(jù)管理還可以:
--監(jiān)視、日志、審核的持久化
--安全能力的持久化
--SOA管理
--SOA OLAP數(shù)據(jù)和元數(shù)據(jù)的移植和持久化
--商業(yè)伙伴的檔案和協(xié)議的持久化
--消息的持久化
--狀態(tài)管理
--Schema 版本化
Native XML數(shù)據(jù)管理服務器概覽
一 個XML數(shù)據(jù)管理服務器(XDMS)不僅僅是一個XML數(shù)據(jù)的數(shù)據(jù)倉庫。一個XMDS是一個復雜的系統(tǒng),必須具有可適應性,可測量性和高效性。實際中,大 部分XML數(shù)據(jù)的管理服務器不能滿足這些苛刻的需要。XDMS中最典型的是我們并不需要預先知道任何關于XML文檔結(jié)構(gòu)的知識。任何合法的XML文檔例如 XML,網(wǎng)絡服務描述語言(WSDL),CPPA,XML Schema 或者Extensible Stylesheep Language Transformation可以被隨意插入,然后native的XML數(shù)據(jù)管理服務器可以自動生成需要的內(nèi)部結(jié)構(gòu)來滿足這些存儲。并且,XML數(shù)據(jù)管理 服務器支持事務處理、索引、schema或者DTD驗證(有些支持schema versioning)、擴展連接和服務鏡像。一個XDMS解決方案必須也能夠存儲非XML數(shù)據(jù),例如二進制數(shù)據(jù),因此要提供一個能夠存儲任何我們可能需 要的內(nèi)容的解決方案。
對SOA存儲庫操作的native XML接口是XQuery.為了探究XML數(shù)據(jù)庫的完全潛力,XQuery是一個用來生成、管理、檢測、管理XML數(shù)據(jù)的途徑。XQuery還提供了一個標準的方案來統(tǒng)一異構(gòu)的數(shù)據(jù)源來使得他們看起來像一個單獨的服務器。
XQuery介紹
XQuery是一個多功能的語言。例如,表達式可以合成從而隨意生成復雜的對一個或多個XML數(shù)據(jù)集合的查詢。XQuery同時提供了基于XML模式和DTD的強類型機制和基于原始 XML數(shù)據(jù)的弱類型機制
XQuery數(shù)據(jù)模型
XQuery 數(shù)據(jù)模型比XML Infoset and Post-Schema Validation Infoset (PSVI)的XML數(shù)據(jù)模型更具有擴展性。XQuery通過數(shù)據(jù)模型的操作來定義,但他約束了數(shù)據(jù)模型中文檔和事例的組織。這個數(shù)據(jù)模型由被搜索的 XML數(shù)據(jù)、所有中間值和最終查詢結(jié)果組成。他支持可以產(chǎn)生非XML數(shù)據(jù)、XML碎片和類型與非類型數(shù)據(jù)的中間表達式。
XQuery和XML模式對XML數(shù)據(jù)有相同的類型概念。XQuery提供基于XML Schema內(nèi)置類型和用戶自定義的Schema類型。Query同樣支持在現(xiàn)存的XML Schema數(shù)據(jù)類型之外的數(shù)據(jù)類型
XQuery數(shù)據(jù)模型和類型系統(tǒng)的組件如下:

XQuery表達式有一個靜態(tài)的類型和一個動態(tài)的類型。靜態(tài)的類型適合那些編譯時運行的表達式。動態(tài)的類型適合那些表達式的結(jié)果并且在運行時運用的表示式
靜態(tài)的類型和動態(tài)類型的比較:
靜態(tài):對應文擋與查詢的類型索引的集合
動態(tài):管理查詢是如何進行的數(shù)值索引規(guī)則的集合
XQuery syntax
幾個可以被用在語法查詢中的XQuery表達式的類型

除此之外,XQuery的實現(xiàn)可以被擴展。更多的復雜實現(xiàn)包括對文件系統(tǒng)、HTTP、Web Services、Java數(shù)據(jù)連接橋(JDBC),Java消息服務和其他數(shù)據(jù)源的支持
圖4中,XQuery提供了對native XML數(shù)據(jù)管理服務器的整合,作為一個靈活的和基于標準的持久性機制。

Figure 4. XML-based persistence mechanism for SOA.
我 們推薦native XML數(shù)據(jù)管理服務器的使用(如圖4所示),來作為對SOA持久化的一個好的實現(xiàn)。一個native的XML數(shù)據(jù)管理服務器可以被用來進行SOA內(nèi)部服務 的整合,因為服務是本地獨立的。 David S. Linthicum在他的一篇題為"The Importance of Persistence within a SOA”,的blog中提到,服務的整合、持久性問題、存儲、事務數(shù)據(jù)的處理、集中的原數(shù)據(jù)是作為面對信息服務集成的關鍵方面。整合的服務同樣可以通過使 數(shù)據(jù)接近數(shù)據(jù)處理的組件而提高系統(tǒng)效率。在central tier使用一個原生的XML數(shù)據(jù)管理服務器允許架構(gòu)師們?yōu)榉治龊腿罩径鎯κ聞仗幚硇畔ⅰ?br />
SOA中,XQuery使用實例
XQuery在SOA中的強大能力表現(xiàn)在許多復雜的查詢功能。下面的這些例子證明一個具體的XQuery實現(xiàn)是怎么被一個具體的native XML數(shù)據(jù)管理服務器無縫整合的。
例 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檢查服務的可用性和更新注冊器的狀態(tài)
...
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 >
...
結(jié)論
在 這篇文章中,我們介紹了一個native的XML數(shù)據(jù)管理服務器作為最合理的存儲SOA數(shù)據(jù)的途徑,因為數(shù)據(jù)本身是基于XML的。有些人可能會爭論這些數(shù) 據(jù)和元數(shù)據(jù)也可以用關系數(shù)據(jù)庫來存儲和管理。但是,由XML產(chǎn)生的數(shù)據(jù)和元數(shù)據(jù)必須被轉(zhuǎn)換成相關的表達,從而進行大規(guī)模的映射和管理。由于企業(yè)中SOA數(shù) 據(jù)和元數(shù)據(jù)迅速膨脹,復雜度將會越來越大。并且,由于這些數(shù)據(jù)經(jīng)常被存取和消耗,一個由XQuery驅(qū)動的native XML數(shù)據(jù)管理服務器能被用來提供一個基于標準的中間緩存來減少運行時的負荷和提高SOA的可測量性和可靠性。
我們要感謝 Infravio 市場部副總裁Miko Matsumura,他同樣是Sun Microsystems的前Java Evangelist,SOA Blueprints的共同創(chuàng)始人,ebXML和software engineer with Cyclone Commerce專家。同眼感謝Frank Cohen,Raining Data公司的技術(shù)主管來對本人進行審核。
關于作者
Ash Parikh是Raining Data公司企業(yè)應用小組的主管。他是在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經(jīng)驗并且是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. 發(fā)表了多篇文章。
Robert Smik同樣是 Raining Data公司企業(yè)應用小組的領袖。他從事應用程序、軟件設計和開發(fā)超過15年。他的經(jīng)歷包括設計和開發(fā)高復雜度的數(shù)據(jù)系統(tǒng),architecting multitier網(wǎng)絡環(huán)境,設計和開發(fā)各種連接解決方案,產(chǎn)品和智能卡,并且還有SOA和數(shù)據(jù)集成工具。Smik是HL7 and CDISC的核心成員,他并且在XML-Journal and JavaWorld發(fā)表過論文。
Premal Parikh同樣是 Raining Data公司企業(yè)應用小組的領袖,他有10年的軟件工業(yè)經(jīng)驗,包括設計產(chǎn)品,原形,分析,工程建模和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
--知識:原數(shù)據(jù)的基礎:存儲庫vs 注冊器:http://www.dmreview.com/article_sub.cfm?articleId=1025672
--“SOA和持久化數(shù)據(jù)的需要”
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技術(shù)研究組
http://www.oasis-open.org/committees/tc_cat.php?cat=ws
--OASIS電子商務技術(shù)研究組
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數(shù)據(jù):原生XML數(shù)據(jù)庫http://www-128.ibm.com/developerworks/xml/library/x-mxd4.html
--SOA中持久化的重要性http://www.webservices.org/index.php/ws/content/view/full/63535