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