Jason Bloomberg
[2003/3/20]
Web service已經(jīng)不再是新婚的娘子。眾多企業(yè)都已經(jīng)創(chuàng)建各種實(shí)驗(yàn)性Web Services 項(xiàng)目,事實(shí)證明,這項(xiàng)新興的分布式計(jì)算技術(shù)確實(shí)能夠降低集成和開(kāi)發(fā)的成本。另外,一些關(guān)鍵的Web Services標(biāo)準(zhǔn)紛紛制定,強(qiáng)安全(robust security)和管理方面的產(chǎn)品也陸續(xù)問(wèn)世。對(duì)于志向遠(yuǎn)大的企業(yè)來(lái)說(shuō),他們已經(jīng)在考慮下一步了。
對(duì)大多數(shù)公司來(lái)說(shuō),下一步要考慮的不再是點(diǎn)對(duì)點(diǎn)的應(yīng)用,而是Web services在企業(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)鍵。除此之外,潛在的回報(bào)更是不可勝數(shù)-分布計(jì)算技術(shù)能夠保證對(duì)業(yè)務(wù)需求足夠靈活的反應(yīng),而這種業(yè)務(wù)上的敏捷正是各公司夢(mèng)寐以求而目前還遙不可及的。
分布式計(jì)算將網(wǎng)絡(luò)上分布的軟件資源看作是各種服務(wù)。面向服務(wù)架構(gòu)是一種不錯(cuò)的解決方案。但這種架構(gòu)不是什么新思想;CORBA和DCOM就很類(lèi)似,但是,這些過(guò)去的面向服務(wù)架構(gòu)都受到一些難題的困擾:首先,它們是緊密耦合的,這就意味著如分布計(jì)算連接的兩端都必須遵循同樣API的約束。打比方說(shuō),如果一個(gè)COM對(duì)象的代碼有了更改,那么訪問(wèn)該對(duì)象的代碼也必須作出相應(yīng)更改。其二,這些面向服務(wù)架構(gòu)受到廠商的約束。Microsoft控制DCOM自不必說(shuō),CORBA也只是一個(gè)偽裝的標(biāo)準(zhǔn)化努力,事實(shí)上,實(shí)現(xiàn)一個(gè)CORBA架構(gòu),經(jīng)常都是在某個(gè)廠商對(duì)規(guī)范的實(shí)現(xiàn)上進(jìn)行工作。
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)稱(chēng)為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的實(shí)踐,即:面向架構(gòu)的設(shè)計(jì)師在構(gòu)建SOA時(shí)必須要做的事情。
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í)踐必須遵循以下原則:
* 業(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)系。
* 業(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)境的靈活性。
* 一個(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è)活的生物體要求嶄新的思維方式。如下文所寫(xiě)的,SOA的基礎(chǔ)還是一些類(lèi)似的架構(gòu)準(zhǔn)則。
SOA基礎(chǔ)
在IT行業(yè)有兩個(gè)越來(lái)越普遍的發(fā)展方向,一個(gè)是架構(gòu)方面的,一個(gè)是方法學(xué)方面的,面向服務(wù)的架構(gòu)設(shè)計(jì)師可以從中有所收獲。第一個(gè)就是MDA(模型驅(qū)動(dòng)架構(gòu)),由提出CORBA的OMG模型提出。MDA認(rèn)為架構(gòu)設(shè)計(jì)師首先要對(duì)待創(chuàng)建的系統(tǒng)有一個(gè)形式化的UML(也是由OMG提出)的模型。MDA首先給出一個(gè)平臺(tái)無(wú)關(guān)的模型來(lái)表示系統(tǒng)的功能需求和use cases,根據(jù)系統(tǒng)搭建的平臺(tái),架構(gòu)設(shè)計(jì)師可以由這個(gè)平臺(tái)無(wú)關(guān)的模型得到平臺(tái)相關(guān)的模型,這些平臺(tái)相關(guān)模型足夠詳細(xì),以至于可以用來(lái)直接生成需要的代碼。
MDA的核心就在于在設(shè)計(jì)階段系統(tǒng)就已經(jīng)完全描述,這樣,在創(chuàng)建系統(tǒng)的時(shí)候,幾乎就沒(méi)有錯(cuò)誤解釋的可能,模型也就可以直接生成代碼。但MDA有一些局限性:首先,MDA假設(shè)在創(chuàng)建模型之前,業(yè)務(wù)需求已經(jīng)全部描述,而這一點(diǎn),在當(dāng)前典型的動(dòng)態(tài)業(yè)務(wù)環(huán)境中幾乎是不可能的。第二,MDA沒(méi)有一個(gè)反饋機(jī)制。如果開(kāi)發(fā)人員對(duì)模型有需要改動(dòng)的地方,并沒(méi)有提供給他們這么一個(gè)途徑。
SOA的另一個(gè)基礎(chǔ)是敏捷方法(AM),其中非常有名的方法是極限編程(XP)。象XP這樣的AM提供了在需求未知或者多變的環(huán)境中創(chuàng)建軟件系統(tǒng)的過(guò)程。XP要求在開(kāi)發(fā)團(tuán)隊(duì)中要有一個(gè)用戶代表,他幫助書(shū)寫(xiě)測(cè)試來(lái)指導(dǎo)開(kāi)發(fā)人員的日常工作。開(kāi)發(fā)團(tuán)隊(duì)中的所有成員都參與到設(shè)計(jì)之中,并且設(shè)計(jì)要盡量小并且非形式化。AM的目標(biāo)是僅僅創(chuàng)建用戶想要的,而不是在一些形式化模型上耗費(fèi)工作量。AM的核心思想就在于其敏捷性-處理需求變更的敏捷性。AM的主要弱點(diǎn)是其規(guī)模上的限制,例如,XP在一個(gè)小團(tuán)隊(duì)和中型項(xiàng)目中效果不錯(cuò),但是當(dāng)項(xiàng)目規(guī)模增大時(shí),如果沒(méi)有一個(gè)一致的清晰的計(jì)劃,項(xiàng)目成員很難把握項(xiàng)目中的方方面面。
從表面看來(lái),MDA和AM似乎是相對(duì)立的-MDA假定需求是固定的,而AM恰恰相反。MDA的中心是形式化的模型,而AM恰恰要避開(kāi)它們。但是,我們還是決定冒險(xiǎn)把這些不同方法中的一些元素提取出來(lái),放入到一個(gè)一致的架構(gòu)實(shí)踐中。
在SOA中有三個(gè)抽象層次,按照SOA的第一條準(zhǔn)則:業(yè)務(wù)驅(qū)動(dòng)服務(wù)、服務(wù)驅(qū)動(dòng)技術(shù)。AM將業(yè)務(wù)模型直接和實(shí)踐連接起來(lái),表現(xiàn)在平臺(tái)相關(guān)的模型之中。MDA并沒(méi)有把業(yè)務(wù)模型和平臺(tái)無(wú)關(guān)模型分開(kāi)來(lái),而是把平臺(tái)無(wú)關(guān)模型做為起點(diǎn)。SOA必須連接這些模型,或者說(shuō)抽象層次,得到單一的架構(gòu)方法。我們將從五個(gè)視圖的架構(gòu)實(shí)現(xiàn)方法來(lái)實(shí)現(xiàn)這個(gè)連接。
SOA的五視圖實(shí)現(xiàn)方法
企業(yè)架構(gòu)設(shè)計(jì)師發(fā)現(xiàn)他們的職業(yè)非常有競(jìng)爭(zhēng)力并且值得驕傲,因?yàn)樗麄円獜暮芏喾矫鎭?lái)通盤(pán)考慮IT系統(tǒng)。Kruchten(RUP的開(kāi)發(fā)負(fù)責(zé)人)將這些方面提取出來(lái),在應(yīng)用到SOA時(shí),我們稱(chēng)為五視圖實(shí)現(xiàn)方法(five-view approach)。
四個(gè)方框表示對(duì)一個(gè)架構(gòu)的不同審視方法,分別代表不同的涉眾(stakeholder)。弟五個(gè)視圖,use-case視圖涵蓋了其它視圖,在架構(gòu)中扮演的是一個(gè)特殊的角色。部署視圖將軟件映射到底層平臺(tái)和相關(guān)硬件上,是系統(tǒng)部署人員對(duì)架構(gòu)的視圖;實(shí)現(xiàn)視圖描述了軟件代碼的組織,是從開(kāi)發(fā)人員角度出發(fā)的視圖;業(yè)務(wù)分析人員則利用過(guò)程視圖進(jìn)行工作,它描述的是軟件系統(tǒng)的運(yùn)行時(shí)特性。最后,邏輯視圖表示的是用戶的功能需求。在SOA中,面向服務(wù)的架構(gòu)必須能夠以u(píng)se-case視圖中的用例將用戶連接到服務(wù),將服務(wù)連接到底層的技術(shù)。
為了表示面向?qū)ο蟮募軜?gòu)是如何工作在這些視圖之上,讓我們將他們置于SOA元模型的上下文之中。SOA中兩個(gè)領(lǐng)域存在重疊:由業(yè)務(wù)模型和服務(wù)模型表示的業(yè)務(wù)領(lǐng)域和由服務(wù)模型及平臺(tái)相關(guān)模型表示的技術(shù)領(lǐng)域(兩個(gè)領(lǐng)域共享服務(wù)模型)。業(yè)務(wù)用戶通過(guò)邏輯視圖和過(guò)程視圖處理粗粒度的業(yè)務(wù)服務(wù),根據(jù)變化的業(yè)務(wù)需求,按照需要將它們安排在過(guò)程之中。另一方面,技術(shù)專(zhuān)家的工作是創(chuàng)建并維護(hù)服務(wù)和地層技術(shù)之間的抽象層。表示這些服務(wù)的中間模型,起到的是軸心的作用,業(yè)務(wù)以它為中心進(jìn)行。
SOA元模型從MDA中繼承平臺(tái)無(wú)關(guān)模型和平臺(tái)相關(guān)模型,但是添加了AM和用戶交互以及敏捷的反饋這兩部分,后者通過(guò)橢圓之間的雙向箭頭來(lái)表現(xiàn)。類(lèi)似地,元模型通過(guò)引入由中心的服務(wù)模型提供的中間層抽象解決了AM在伸縮性方面的問(wèn)題。這樣,服務(wù)模型中的任何需求的變化,都會(huì)反映到用戶每天的業(yè)務(wù)處理中。同樣,由于底層技術(shù)是模型驅(qū)動(dòng)的,技術(shù)專(zhuān)家也可以根據(jù)這些變化的需求迅速而有效地作出應(yīng)變。
SOA實(shí)踐和過(guò)去解決企業(yè)架構(gòu)傳統(tǒng)方式的不同之處就在于其對(duì)敏捷性的支持。如前所說(shuō),SOA的第三條原則就在于它總在變化之中。這種恒在的變化性環(huán)境是SOA實(shí)踐的基石。如圖所示,涉眾(stakeholders,譯者注:RUP中也有這個(gè)詞,表示軟件開(kāi)發(fā)中涉及到的各種角色如:用戶、設(shè)計(jì)人員、開(kāi)發(fā)人員乃至測(cè)試人員等等。)在一個(gè)必需的基礎(chǔ)上影響到整個(gè)架構(gòu)的變化。在當(dāng)技術(shù)專(zhuān)家在每天的日常工作中不斷對(duì)變化的業(yè)務(wù)需求作出響應(yīng)的這種情況下,設(shè)計(jì)階段和運(yùn)行階段之間的界限變得模糊起來(lái),很難清晰地分離這兩個(gè)階段。
剩下的部分
我們已經(jīng)為面向服務(wù)的架構(gòu)提供了一個(gè)高層次的框架,其中MDA和AM的元素幫助工具的使用者來(lái)創(chuàng)建和維護(hù)SOA。但是,SOA中還缺少一些內(nèi)容-那就是軟件開(kāi)發(fā)商和專(zhuān)業(yè)的服務(wù)組織必需提供的。理想情況下,開(kāi)發(fā)商必需提供面向服務(wù)的業(yè)務(wù)流程、工作流以及服務(wù)的協(xié)調(diào)工具和服務(wù);另外,能夠以一種敏捷的、平臺(tái)無(wú)關(guān)的方式充分反映業(yè)務(wù)服務(wù)的建模工具也是必須的;技術(shù)專(zhuān)家必須配備可以從模型中自動(dòng)生成代碼,并在代碼變化時(shí)更新模型的工具,最后,開(kāi)發(fā)商必須提供支持SOA的軟件,幫助面向服務(wù)的架構(gòu)設(shè)計(jì)師以一種可信并且可伸縮的方式創(chuàng)建位于服務(wù)和底層技術(shù)之間的抽象層次。幸運(yùn)的是,這方面的產(chǎn)品即將上市。
另外,最重要的就是貫穿本文的自頂而下的SOA實(shí)現(xiàn)方法了。今天關(guān)于Web services的大部分思考都是自底而上的:“這是如何創(chuàng)建Web services的方法,現(xiàn)在,我們來(lái)使用它們集成吧”,對(duì)Web services技術(shù)的這種方法是偉大的第一步,因?yàn)樗梢泽@人地降低集成的開(kāi)銷(xiāo),這是現(xiàn)在的技術(shù)管理人員最樂(lè)意見(jiàn)到的了。但當(dāng)經(jīng)濟(jì)進(jìn)一步發(fā)展,IT走出低谷,企業(yè)會(huì)尋求IT的幫助來(lái)提高組織戰(zhàn)略意義上的核心價(jià)值。使用面向服務(wù)的架構(gòu),IT可以提供給企業(yè)實(shí)現(xiàn)業(yè)務(wù)敏捷性的這樣一個(gè)框架。