本文列出了本人與?IBM?內(nèi)部和外部的架構(gòu)師、開發(fā)人員在談?wù)?Web?服務(wù)以及?SOA?時(shí)所涉及到的大家共同關(guān)注的事項(xiàng)、問題和資源。
摘自?IBM?WebSphere?開發(fā)者技術(shù)期刊。
引言
在為?IBM?WebSphere®?開發(fā)者技術(shù)期刊撰寫專欄之前,我花費(fèi)了大量的時(shí)間與架構(gòu)師、開發(fā)人員談?wù)摿怂麄冊(cè)诨?Web?服務(wù)和?SOA?設(shè)計(jì)以及構(gòu)建解決方案時(shí)所面臨的問題。有一些問題和主題一再成為討論的焦點(diǎn),因此,我把我個(gè)人認(rèn)為是與?Web?服務(wù)相關(guān)的?10?大問題列出來與大家分享。?
注意,我沒有把它們稱為最佳實(shí)踐,是因?yàn)槠渲杏性S多問題并不太容易回答。相反,別人對(duì)這些問題已經(jīng)回答過許多次,對(duì)于這些內(nèi)容,我只是想指導(dǎo)您了解一下我比較喜歡的資源,這些資源對(duì)該主題進(jìn)行了較為詳細(xì)的說明(當(dāng)然這些資源大多數(shù)是一些?developerWorks?文章)。我認(rèn)為這些主題涉及的領(lǐng)域非常廣泛,對(duì)于我的某些觀點(diǎn),您可以完全贊同也可以完全不贊同;您也可以添加其他主題。這里為您敞開了一扇大門,歡迎您對(duì)我的看法提出意見。
1.?文檔/文本?Web?服務(wù)到底是什么?
這無疑是我聽到的首要問題。事實(shí)上,我們?cè)跀?shù)年前就聽到這一問題,令人感到有些驚奇的是,到目前為止仍有人時(shí)常提出這一問題,而且對(duì)這一問題仍存在一些誤解。您可能知道,您可以在?WSDL?定義中定義?Web?服務(wù)的調(diào)用樣式和編碼樣式。盡管這對(duì)構(gòu)建網(wǎng)絡(luò)?SOAP?消息的確切方式存在影響,但對(duì)整體解決方案、交互樣式或編程模型幾乎毫無效果。因此我的建議始終是:
不要將使用某個(gè)特定的樣式作為整個(gè)企業(yè)范圍的規(guī)則。使用不同的樣式有各種各樣的原因,而且您很可能會(huì)碰到所有這些樣式。?
將該主題看作是一種實(shí)現(xiàn)細(xì)節(jié),不要讓該主題推動(dòng)或影響您的系統(tǒng)設(shè)計(jì)。?
請(qǐng)閱讀?Russ?Butek?撰寫的優(yōu)秀文章?我應(yīng)該采用哪一種?WSDL?樣式?,我認(rèn)為這篇文章對(duì)這些不同之處做出了最好的解釋。?
2.?Web?服務(wù)非常慢,或者?Web?服務(wù)是否非常慢?
眾所周知,使用?Web?服務(wù)在性能上會(huì)受到一定程度的影響。這幾乎不會(huì)令人感到驚奇,因?yàn)槭褂?Web?服務(wù)時(shí)通常會(huì)涉及到把使用某種本機(jī)格式設(shè)置的數(shù)據(jù)構(gòu)建為?XML?文檔,并在網(wǎng)絡(luò)中發(fā)送此文檔。盡管交叉處理(甚至是跨網(wǎng)絡(luò)處理)始終比本地調(diào)用要慢得多,但是如果聽到已經(jīng)對(duì)?Web?服務(wù)的性能進(jìn)行了一些改進(jìn),您可能會(huì)感到驚奇。
有許多技術(shù)可以實(shí)現(xiàn)這一點(diǎn);例如,智能?XML?解析器技術(shù)(為處理?SOAP?和?XML?構(gòu)件而進(jìn)行了高級(jí)優(yōu)化)或?XML?應(yīng)用程序的出現(xiàn)(如?IBM?DataPower®,該應(yīng)用程序支持硬件級(jí)別的?XML?處理)。還有?WebSphere?Application?Server?中的?Web?服務(wù)緩存支持功能,該功能也有助于大大提高性能。事實(shí)上,在某些情況下,在最新?WebSphere?Application?Server?運(yùn)行時(shí)上的?SOAP?over?HTTP?調(diào)用比使用?RMI?over?IIOP?調(diào)用相同的功能要快。
因此,我的建議是應(yīng)繼續(xù)對(duì)分布式計(jì)算應(yīng)用基本的最佳實(shí)踐(例如,減少網(wǎng)絡(luò)通信量等),但開始考慮使用?Web?服務(wù),甚至是用在對(duì)性能要求關(guān)鍵的情況中。?
3.?我的?XML?模式不適用于您的產(chǎn)品
在經(jīng)過了開發(fā)?Hello?World?樣式的測(cè)試應(yīng)用程序之后,您可能會(huì)注意到,在您的工具中,XML?模式規(guī)范中的某些更高級(jí)別的元素或者不受支持或者不能很好地?支持。例如,在?WebSphere?工具中,不存在對(duì)?<xsd:choice>?元素的映射,該元素在模式中非常通用。對(duì)于?<xsd:group>?也是這種情況。在這些情況下,您可以選擇更改模式,也可以選擇開發(fā)自己的代碼來處理基于此模式的?XML。請(qǐng)注意,可能需要手動(dòng)干預(yù)才能將您的模式映射到?Web?服務(wù)實(shí)現(xiàn)。我建議的兩篇文章是:
Web?服務(wù)技巧:?將多態(tài)性作為?xsd:choice?的備選方法
?
如何為?Web?服務(wù)選擇一種自定義映射技術(shù)?
總之,這里沒有一次性解決所有問題的萬能方法。不過,我們有理由期望這些標(biāo)準(zhǔn)和產(chǎn)品的未來版本也能夠提供對(duì)高級(jí)模式不斷增強(qiáng)的支持。
4.?UDDI?是什么情況?還有人在使用它嗎?
在?Web?服務(wù)首次開始流行之后,人們始終指出在任何?SOA?環(huán)境中都存在以下三種主要角色:?
服務(wù)請(qǐng)求程序?
服務(wù)提供程序?
服務(wù)代理程序?
代理程序角色一般由遵循?UDDI?標(biāo)準(zhǔn)的注冊(cè)中心表示。提供公共注冊(cè)中心可讓您創(chuàng)建自己的項(xiàng)和重復(fù)使用其他項(xiàng)。WebSphere?Application?Server?還附帶了一個(gè)專用?UDDI?注冊(cè)中心。?
不過,在實(shí)際情形中我仍沒有看到?UDDI?有多大用處(如果有)。大多數(shù)?IT?組織或者構(gòu)建自己的方式來獲取服務(wù)定義和連接端點(diǎn)(例如使用?LDAP),或者棄用?UDDI,等待注冊(cè)中心的新標(biāo)準(zhǔn)。其他還有將專有擴(kuò)展添加到?UDDI。公共?UDDI?注冊(cè)中心由?IBM?支持,其他組織已經(jīng)放棄。
我的預(yù)測(cè)是,在這一領(lǐng)域,隨著時(shí)間的推移?UDDI?將由未來的新技術(shù)代替。
5.?Web?服務(wù)的同步
另一個(gè)經(jīng)常討論的主題是,服務(wù)是同步的還是異步的,與編程模型相比,使用的通信協(xié)議充當(dāng)什么角色。例如,假設(shè)使用?SOAP?over?JMS?綁定提供了?Web?服務(wù)。使用?JMS(支持異步交互)好像意味著這是一個(gè)異步?Web?服務(wù)。不過,如果在?WebSphere?Application?Server?中使用?JAX-RPC?支持,則服務(wù)使用者將在返回控制之前等待返回響應(yīng)。這一原因是,無論是否使用了該協(xié)議,JAX-RPC?1.1?都在請(qǐng)求程序和提供程序之間強(qiáng)制執(zhí)行了一個(gè)同步交互。換句話說,用來調(diào)用?Web?服務(wù)的編程模型通常確定調(diào)用的同步性,而不是網(wǎng)絡(luò)協(xié)議。
要構(gòu)建真正的異步交互,您有兩個(gè)主要選項(xiàng)。第一個(gè)選項(xiàng)是構(gòu)建一系列交換信息的單向服務(wù),例如使用?WebSphere?Application?Server?V6.1?中的?WS-Addressing?支持。我推薦的一篇?developerWorks?上的文章對(duì)此內(nèi)容進(jìn)行了詳細(xì)說明:Web?服務(wù)尋址(WS-Addressing)對(duì)?SOAP?的隱式影響。
另一個(gè)選項(xiàng)是對(duì)異步調(diào)用使用服務(wù)組件體系結(jié)構(gòu)?(SCA)?支持。SCA?提供了一個(gè)客戶端?API,后者可以將發(fā)送的請(qǐng)求與接收的響應(yīng)分離開。將來,新的?JAX-WS?2.0?標(biāo)準(zhǔn)將提供類似的支持。
6.?ESB?或非?ESB
有許多問題都與企業(yè)服務(wù)總線?(ESB)?這一主題相關(guān):
ESB?究竟是什么?它是一種產(chǎn)品還是一種模式,或者二者兼具??
每個(gè)?SOA?實(shí)現(xiàn)是否都需要?ESB??
假設(shè)?ESB?集線器,它是否有可能存在瓶頸問題??
ESB?中?是什么,ESB?上?是什么??
在嘗試回答這些問題之前,先為您提供一項(xiàng)關(guān)鍵資源,該資源很好地解釋了?IBM?對(duì)?SOA?編程模型上下文中的?ESB?的看法:IBM?企業(yè)服務(wù)總線介紹。?
回答上述問題涉及到整個(gè)系列文章,因此我在這里僅提供一些主要解答要點(diǎn),讓您有個(gè)初步了解;它們分別是:
企業(yè)服務(wù)總線是一種體系結(jié)構(gòu)模式。產(chǎn)品可以方便創(chuàng)建該模式的特定實(shí)例。?
ESB?的關(guān)鍵特性是分離關(guān)注點(diǎn)。像通信協(xié)議差異、路由和審核交互、安全性之類的內(nèi)容可以在實(shí)際的服務(wù)請(qǐng)求程序和提供程序之外處理。如果不使用此分離方法就能夠開始您的解決方案,則不需要立即使用?ESB。不過,在大多數(shù)項(xiàng)目中都不會(huì)出現(xiàn)這種情況。?
ESB?是一種概念上的集線器,在幾乎所有實(shí)例中都以分布式方式物理地部署。?
盡管這有時(shí)很難說清楚(而且通常由您使用的產(chǎn)品驅(qū)動(dòng)),但談?wù)摰囊粋€(gè)較好切入點(diǎn)是考慮基礎(chǔ)結(jié)構(gòu)?邏輯和業(yè)務(wù)?邏輯。與基礎(chǔ)結(jié)構(gòu)相關(guān)的內(nèi)容在總線中發(fā)生,而與業(yè)務(wù)相關(guān)的內(nèi)容則不是。?
而且,我不主張這些簡(jiǎn)單的解答就是對(duì)該主題的正當(dāng)解釋,但它們也許為您的理解提供一些幫助。
7.?標(biāo)頭和其他上下文數(shù)據(jù)
Web?服務(wù)設(shè)計(jì)的一個(gè)關(guān)鍵部分是定義進(jìn)出服務(wù)的消息。可以保險(xiǎn)地說消息始終有兩個(gè)關(guān)鍵部分:與業(yè)務(wù)功能相關(guān)的實(shí)際負(fù)載和上下文數(shù)據(jù)(如消息?ID、事務(wù)或會(huì)話?ID、安全信息等)。每個(gè)消息協(xié)議都為此上下文信息(SOAP?標(biāo)頭、JMS?標(biāo)頭、WebSphere“工作區(qū)”等)提供一個(gè)位置。問題是沒有一個(gè)一致的方法或?API?來處理這些不同的機(jī)制,而且在大多數(shù)實(shí)際的?SOA?環(huán)境中,您會(huì)遇到多個(gè)消息傳遞協(xié)議。
最適于您處理這種不同、而且實(shí)際上可讓您將一個(gè)標(biāo)頭結(jié)構(gòu)映射到另一個(gè)結(jié)構(gòu)的位置是?ESB(這是使用?ESB?的又一好處;下文至少還會(huì)提供一個(gè)這樣的示例)。此映射很可能需要一些手工工作。?
無論您是如何處理的,關(guān)鍵是要為其盡早規(guī)劃和設(shè)計(jì)一個(gè)策略,并盡量在您的所有項(xiàng)目中保持一致。
8.?最終需要使用多少?(Web)?服務(wù)?
我對(duì)該問題的第一反應(yīng)始終是建議采用一種方法,以便在確定服務(wù)的過程中作為指導(dǎo)。其中一個(gè)這樣的示例是由?IBM?全球業(yè)務(wù)服務(wù)部提倡的面向服務(wù)的建模和體系結(jié)構(gòu)?(SOMA)?方法。與?IBM?Rational®?Unified?Process?(RUP)?聯(lián)合在一起通常可促使您使用?SOA?的方法。
第二,不要因?yàn)槟軌虬b而將每項(xiàng)?IT?功能都包裝在?Web?服務(wù)中。有時(shí)會(huì)使您對(duì)此采用整個(gè)“自下而上”的方法并使用富工具支持。在大多數(shù)(甚至是所有)情況下,采用此方法會(huì)導(dǎo)致服務(wù)太多,分得太細(xì),沒有重用而且與業(yè)務(wù)不相關(guān)。
而且,對(duì)此也沒有很好的方法!業(yè)務(wù)分析師和?IT?架構(gòu)師以適當(dāng)?shù)募?xì)分級(jí)別定義和創(chuàng)建適當(dāng)?shù)姆?wù)相當(dāng)不容易。
9.?作為?Web?服務(wù)使用者的遺留應(yīng)用程序
我們對(duì)通過?Web?服務(wù)支持現(xiàn)有功能給予了較多的關(guān)注。我所了解到的談?wù)摰帽容^少(即使也同等重要)的是現(xiàn)有應(yīng)用程序利用新服務(wù)的能力。例如,假設(shè)公司在對(duì)?SOA?采用發(fā)展的方法,隨著時(shí)間的推移創(chuàng)建新服務(wù),并將它們集成到現(xiàn)有環(huán)境中。其中一個(gè)現(xiàn)有應(yīng)用程序是使用?RPG?編寫的,并運(yùn)行于?IBM?iSeries?系統(tǒng)。現(xiàn)在需要將此應(yīng)用程序更改為調(diào)用其中一個(gè)新服務(wù)。但負(fù)責(zé)此系統(tǒng)的開發(fā)人員對(duì)?SOAP?或?XML?不太熟悉,而且沒有基于?RPG?的?Web?服務(wù)包。
對(duì)此問題的最通用的解決方法是將?SOAP?和?XML?處理委托給?ESB。例如,使用?COBOL?或?RPG?編寫的應(yīng)用程序可以容易地與?WebSphere?MQ?隊(duì)列交換記錄格式的消息。已經(jīng)建立了對(duì)這種方法的很好支持,而且已經(jīng)并且經(jīng)常使用。像?WebSphere?ESB?或?WebSphere?Message?Broker?之類?ESB?產(chǎn)品可以從?MQ?接收數(shù)據(jù),將其轉(zhuǎn)換為?XML,然后處理新?Web?服務(wù)的調(diào)用。
換句話說,通常較為可取的方法是,將新服務(wù)對(duì)現(xiàn)有應(yīng)用程序的影響保持在最低限度,并將協(xié)議和消息格式的細(xì)節(jié)委托給?ESB。
10.?“困難在于具體實(shí)施”
最近,我訪問了法國(guó)的?IBM?工業(yè)解決方案中心。該中心展示了針對(duì)不同行業(yè)(如零售業(yè)、衛(wèi)生保健業(yè)或銀行業(yè))的基于?IBM?的解決方案。展示人員并沒有提及任何特定的?IT?產(chǎn)品,而且重點(diǎn)說明了解決方案的實(shí)際(業(yè)務(wù))功能。但是他不經(jīng)意地指出一點(diǎn):“當(dāng)然,您在這里看到的一切都基于?SOA”。盡管我認(rèn)為他不是太關(guān)注如何針對(duì)異步交互在多個(gè)協(xié)議之間維護(hù)?WS-Addressing?標(biāo)頭。
不過,構(gòu)建、設(shè)計(jì)和實(shí)現(xiàn)?Web?服務(wù)和?SOA?會(huì)帶來許多詳細(xì)的?IT?技術(shù)問題。我們?cè)谑褂眯聵?biāo)準(zhǔn)、新編程模型,而且經(jīng)常使用新產(chǎn)品。創(chuàng)建支持諸如異類平臺(tái)之間交互的應(yīng)用程序、企業(yè)范圍重用?IT?服務(wù)并按業(yè)務(wù)線需求不斷更改系統(tǒng)的功能要求,通常會(huì)導(dǎo)致不可預(yù)見的問題。
因此,下次您的經(jīng)理進(jìn)入您的辦公室說:“我希望構(gòu)建一個(gè)每個(gè)人都說非常容易做到的這種?SOA?解決方案”時(shí),您可以按照我的同事?Greg?Flurry?這時(shí)愛講的一句話說:“困難在于具體實(shí)施!”
參考資料?
您可以參閱本文在?developerWorks?全球站點(diǎn)上的?英文原文?。
我應(yīng)該采用哪一種?WSDL?樣式?
Web?服務(wù)技巧:?將多態(tài)性作為?xsd:choice?的備選方法
Web?服務(wù)自定義數(shù)據(jù)綁定——第?1?部分:?如何為?Web?服務(wù)選擇一種自定義映射技術(shù)
Web?服務(wù)尋址(WS-Addressing)對(duì)?SOAP?的隱式影響
用于實(shí)現(xiàn)?Web?服務(wù)的?SOA?編程模型,第?4?部分:?IBM?企業(yè)服務(wù)總線介紹
關(guān)于作者
??Andre?Tost?是?Software?Group?的?Enterprise?Integration?Solutions?組織的一名高級(jí)技術(shù)人員,他在這個(gè)部門幫助?IBM?的客戶建立面向服務(wù)的體系結(jié)構(gòu)。他專長(zhǎng)于?Web?服務(wù)技術(shù)。在開始從事目前的工作之前,他有十年的時(shí)間在?IBM?軟件開發(fā)工作中擔(dān)任各種合作伙伴啟動(dòng)、開發(fā)和構(gòu)架的角色,目前他在?WebSphere?Business?Development?小組工作。他出生于德國(guó),目前在美國(guó)明尼蘇達(dá)州的羅徹斯特居住和工作。在業(yè)余時(shí)間,他喜歡和家人在一起,并且有空就去踢球或看球賽。
點(diǎn)擊查看原文地址:http://www-128.ibm.com/developerworks/cn/websphere/techjournal/0608_col_tost/0608_col_tost.html?ca=drs-
posted on 2006-11-22 09:39
matthew 閱讀(306)
評(píng)論(0) 編輯 收藏 所屬分類:
Web Services and SOA