SOA數據需要一個native XML數據管理服務器
作者: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