[摘 要]面向服務(wù)的體系結(jié)構(gòu)(SOA)表示開(kāi)發(fā)者可以如何使用Web服務(wù)的總體背景和指導(dǎo)原則。Web服務(wù)規(guī)范定義了實(shí)現(xiàn)服務(wù)以及與它們的交互所需要的細(xì)節(jié)。面向服務(wù)的體系結(jié)構(gòu)(SOA)可以基于Web服務(wù),但是它也可能改為使用其他的技術(shù)來(lái)代替。
[關(guān)鍵詞]SOA Web Service
[中圖分類號(hào)]TP [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1009-5489(2009)02-0091-02
一、SOA系統(tǒng)概述
面向服務(wù)的體系結(jié)構(gòu)(SOA)支持跨企業(yè)和業(yè)務(wù)合作伙伴之間的端到端集成。這就提供了一種靈活的業(yè)務(wù)流程模型,使得客戶可以迅速地響應(yīng)新的顧客需求、新的業(yè)務(wù)機(jī)會(huì)以及競(jìng)爭(zhēng)的威脅。
對(duì)于大多數(shù)公司來(lái)說(shuō),下一步要考慮的不再是點(diǎn)對(duì)點(diǎn)的應(yīng)用,而是WebServices在企業(yè)間以及業(yè)務(wù)伙伴間更為寬廣的應(yīng)用。這種技術(shù)的變遷需要更松散耦合、面向基于標(biāo)準(zhǔn)的服務(wù)的架構(gòu)。這樣一個(gè)架構(gòu)要求對(duì)IT在組織中的角色有新的觀點(diǎn)和認(rèn)識(shí),而不僅僅是一種實(shí)現(xiàn)方法。通過(guò)對(duì)業(yè)務(wù)的敏捷反應(yīng),企業(yè)可以得到實(shí)實(shí)在在的回報(bào),而要達(dá)到這一點(diǎn),面向服務(wù)架構(gòu)設(shè)計(jì)師的角色非常關(guān)鍵(相關(guān)角色的介紹在下一章有詳細(xì)介紹)。除此之外,潛在的回報(bào)更是不可勝數(shù)“分布計(jì)算技術(shù)能夠保證對(duì)業(yè)務(wù)需求有足夠充分靈活的反應(yīng),而這種業(yè)務(wù)上的敏捷正是各公司夢(mèng)寐以求而目前還遙不可及的。”
Web Services是在改進(jìn)DCOM和CORBA缺點(diǎn)上不斷做出的努力。今天應(yīng)用Web Services的面向服務(wù)架構(gòu)與過(guò)去不同的特點(diǎn)就在于它們是基于標(biāo)準(zhǔn)以及松散耦合的。廣泛接受的標(biāo)準(zhǔn)(如XML和SOAP)提供了在各不同廠商解決方案之間的交互性。而松散耦合將分布計(jì)算中的參與者隔離開(kāi)來(lái),交互兩邊某一方的改動(dòng)并不會(huì)影響到另一方。這兩者的結(jié)合意味著公司可以實(shí)現(xiàn)某些Web Services而不用對(duì)使用這些Web Services的客戶端的知識(shí)有任何了解。通常情況下,我們將這種基于標(biāo)準(zhǔn)的、松散耦合的面向服務(wù)的架構(gòu)簡(jiǎn)稱為SOA。
SOA的強(qiáng)大和靈活性將給企業(yè)帶來(lái)巨大的好處。如果某組織將其IT架構(gòu)抽象出來(lái),將其功能以粗粒度的服務(wù)形式表示出來(lái),每種服務(wù)都清晰地表示其業(yè)務(wù)價(jià)值,那么,這些服務(wù)的顧客(可能在公司內(nèi)部,也可能是公司的某個(gè)業(yè)務(wù)伙伴)就可以得到這些服務(wù),而不必考慮其后臺(tái)實(shí)現(xiàn)的具體技術(shù)。更進(jìn)一步,如果顧客能夠發(fā)現(xiàn)并綁定可用的服務(wù),那么在這些服務(wù)背后的IT系統(tǒng)能夠提供更大的靈活性。
但是,要得到這種強(qiáng)大和靈活性,需要有一種實(shí)現(xiàn)架構(gòu)的新方法,這是一項(xiàng)艱巨的任務(wù)。企業(yè)架構(gòu)設(shè)計(jì)師必須要變成“面向服務(wù)的架構(gòu)設(shè)計(jì)師”,不僅要理解SOA,還要理解SOA的實(shí)踐。在架構(gòu)實(shí)踐和最后得到的架構(gòu)結(jié)果之間的區(qū)別非常微妙,也非常關(guān)鍵。SOA的原則即SOA是一種企業(yè)架構(gòu),因此,它是從企業(yè)的需求開(kāi)始的。但是,SOA和其他企業(yè)架構(gòu)方法的不同之處在于SOA提供的業(yè)務(wù)敏捷性。業(yè)務(wù)敏捷性是指企業(yè)對(duì)變更快速和有效地進(jìn)行響應(yīng)、并且利用變更來(lái)得到競(jìng)爭(zhēng)優(yōu)勢(shì)的能力。對(duì)架構(gòu)設(shè)計(jì)師來(lái)說(shuō),創(chuàng)建一個(gè)業(yè)務(wù)敏捷的架構(gòu)意味著創(chuàng)建這樣一個(gè)IT架構(gòu),它可以滿足當(dāng)前還未知的業(yè)務(wù)需求。要滿足這種業(yè)務(wù)敏捷性,SOA的實(shí)踐必須遵循以下原則:
1.業(yè)務(wù)驅(qū)動(dòng)服務(wù),服務(wù)驅(qū)動(dòng)技術(shù)
從本質(zhì)上說(shuō),在抽象層次上,服務(wù)位于業(yè)務(wù)和技術(shù)中間。面向服務(wù)的架構(gòu)設(shè)計(jì)師一方面必須理解在業(yè)務(wù)需求和可以提供的服務(wù)之間的動(dòng)態(tài)關(guān)系,另一方面,同樣要理解服務(wù)與提供這些服務(wù)的底層技術(shù)之間的關(guān)系。
2.業(yè)務(wù)敏捷是基本的業(yè)務(wù)需求
SOA考慮的是下一個(gè)抽象層次:提供響應(yīng)變化需求的能力是新的“元需求”,而不是處理一些業(yè)務(wù)上的固定不變的需求。從硬件系統(tǒng)而上的整個(gè)架構(gòu)都必須滿足業(yè)務(wù)敏捷的需求,因?yàn)椋赟OA中任何的瓶頸都會(huì)影響到整個(gè)IT環(huán)境的靈活性。
3.一個(gè)成功的SOA總在變化之中
SOA工作的場(chǎng)景,更象是一個(gè)活的生物體,而不是象傳統(tǒng)所說(shuō)的“蓋一棟房子”。IT環(huán)境惟一不變的就是變化,因此面向服務(wù)架構(gòu)設(shè)計(jì)師的工作永遠(yuǎn)不會(huì)結(jié)束。對(duì)于習(xí)慣于蓋房子的設(shè)計(jì)師來(lái)說(shuō),要轉(zhuǎn)向設(shè)計(jì)一個(gè)活的生物體要求嶄新的思維方式。SOA的基礎(chǔ)還是一些類似的架構(gòu)準(zhǔn)則。
二、SOA體系結(jié)構(gòu)的優(yōu)勢(shì)
面向服務(wù)的體系結(jié)構(gòu)可以基于現(xiàn)有的系統(tǒng)投資來(lái)發(fā)展,而不需要徹底重新創(chuàng)建系統(tǒng)。如果組織將研發(fā)力量集中在創(chuàng)建服務(wù)、利用現(xiàn)有的技術(shù)、結(jié)合基于組件的方法來(lái)開(kāi)發(fā)軟件上,將獲得如下幾方面好處:
1.利用現(xiàn)有資產(chǎn),這是首要的需求。通過(guò)使用適當(dāng)?shù)腟OA框架并使其可用于整個(gè)企業(yè),可以將業(yè)務(wù)服務(wù)構(gòu)造成現(xiàn)有組件的集合。使用這種新的服務(wù)只需要知道它的接口和名稱。服務(wù)的內(nèi)部細(xì)節(jié)以及在組成服務(wù)的組件之間傳送的數(shù)據(jù)的復(fù)雜性都對(duì)外界隱藏了。這種組件的匿名性使組織能夠利用現(xiàn)有的投資,從而可以通過(guò)合并構(gòu)建在不同的機(jī)器上、運(yùn)行在不同的操作系統(tǒng)中、用不同的編程語(yǔ)言開(kāi)發(fā)的組件來(lái)創(chuàng)建服務(wù)。遺留系統(tǒng)可以通過(guò)Web服務(wù)接口來(lái)封裝和訪問(wèn)。
2.商品化基礎(chǔ)架構(gòu)。在所有不同的企業(yè)應(yīng)用程序之間,基礎(chǔ)架構(gòu)的開(kāi)發(fā)和部署將變得更加一致。現(xiàn)有的組件、新開(kāi)發(fā)的組件和從廠商購(gòu)買的組件可以合并在一個(gè)定義良好的SOA框架內(nèi)。這樣的組件集合將被作為服務(wù)部署在現(xiàn)有的基礎(chǔ)構(gòu)架中,從而使得可以更多地將基礎(chǔ)架構(gòu)作為一種商品化元素來(lái)加以考慮。
3.更快的產(chǎn)品上市速度。組織的Web服務(wù)庫(kù)將成為采用SOA框架的組織的核心資產(chǎn)。使用這些Web服務(wù)庫(kù)來(lái)構(gòu)建和部署服務(wù)將顯著地加快產(chǎn)品的上市速度,因?yàn)閷?duì)現(xiàn)有服務(wù)和組件的新的創(chuàng)造性重用縮短了設(shè)計(jì)、開(kāi)發(fā)、測(cè)試和部署產(chǎn)品的時(shí)間。
4.減少成本。隨著業(yè)務(wù)需求的發(fā)展和新的需求的引入,通過(guò)采用SOA框架和服務(wù)庫(kù),為現(xiàn)有的和新的應(yīng)用程序增強(qiáng)和創(chuàng)建新的服務(wù)的成本大大地減少了。同樣,開(kāi)發(fā)團(tuán)隊(duì)的學(xué)習(xí)難讀也降低了,因?yàn)樗麄兛赡芤呀?jīng)熟悉了現(xiàn)有的組件。
5.降低風(fēng)險(xiǎn)。重用現(xiàn)有的組件降低了在增強(qiáng)或創(chuàng)建新的業(yè)務(wù)服務(wù)的過(guò)程中帶來(lái)的風(fēng)險(xiǎn)。如前所述,這也減少了維護(hù)和管理支持服務(wù)的基礎(chǔ)架構(gòu)的風(fēng)險(xiǎn)。
6.持續(xù)改進(jìn)業(yè)務(wù)過(guò)程。SOA允許清晰地表示流程流,這些流程流通過(guò)在特定業(yè)務(wù)服務(wù)中使用的組件的順序來(lái)標(biāo)識(shí)。這給商業(yè)用戶提供了監(jiān)視業(yè)務(wù)操作的理想環(huán)境。業(yè)務(wù)建模反映在業(yè)務(wù)服務(wù)中。流程操縱是以一定的模式重組部件(構(gòu)成業(yè)務(wù)服務(wù)的組件)來(lái)實(shí)現(xiàn)的。這將進(jìn)一步允許更改流程流,而同時(shí)監(jiān)視產(chǎn)生的結(jié)果,因此促進(jìn)了持續(xù)改進(jìn)。
7.以流程為中心的體系結(jié)構(gòu)。現(xiàn)有的體系結(jié)構(gòu)模型和實(shí)踐往往是以程序?yàn)橹行牡摹?yīng)用程序是為了程序員的便利而開(kāi)發(fā)的。通常,流程信息在組件之間傳播。應(yīng)用程序很像一個(gè)黑匣子,沒(méi)有粒度可用于外部。重用需要復(fù)制代碼、合并共享庫(kù)或繼承對(duì)象。在以流程為中心的體系結(jié)構(gòu)中,應(yīng)用程序是為過(guò)程開(kāi)發(fā)的。流程可以分解成一系列的步驟,每一個(gè)步驟表示一個(gè)業(yè)務(wù)服務(wù)。實(shí)際上,每個(gè)過(guò)程服務(wù)或組件功能都相當(dāng)于一個(gè)子應(yīng)用程序。將這些子應(yīng)用程序鏈接在一起可以創(chuàng)建能夠滿足業(yè)務(wù)需求的流程流。這種粒度允許利用和重用整個(gè)組織中的子應(yīng)用程序。
[參考文獻(xiàn)]
[1]Russ Basiura、Mike Batongbacal編著:《ASP.Net Web服務(wù)高級(jí)編程》,清華大學(xué)出版社2003年3月版。
[2]陳英學(xué)編著:《Microsoft ASP.Net深入編程》,北京希望電子出版社2001年7月版。