圖1 SOA的目標(biāo):IT與業(yè)務(wù)對齊

眾所周知,業(yè)務(wù)是不斷發(fā)展、變化的,業(yè)務(wù)創(chuàng)新越來越成為企業(yè)核心競爭力的一部分。傳統(tǒng)IT支撐業(yè)務(wù)發(fā)展的方式是為新業(yè)務(wù)構(gòu)建新的業(yè)務(wù)系統(tǒng),設(shè)計(jì)新的數(shù)據(jù)庫,系統(tǒng)多是“豎井狀”的孤島形式,系統(tǒng)間連接常見的是點(diǎn)對點(diǎn)的缺乏規(guī)劃的連接方式。久而久之,這樣的方式已經(jīng)無法滿足業(yè)務(wù)發(fā)展對IT帶來的要求,IT成為企業(yè)的嚴(yán)重短板。SOA出現(xiàn)的主要目的就是徹底改變這種局面,使IT變得靈活,與業(yè)務(wù)對齊,不再成為企業(yè)的后腿。甚至能夠促進(jìn)業(yè)務(wù)的發(fā)展,并創(chuàng)造新的業(yè)務(wù)價值。

為什么SOA能夠?qū)崿F(xiàn)IT和業(yè)務(wù)對齊呢?這得歸功于SOA架構(gòu)中的若干實(shí)施原則。

應(yīng)用功能的服務(wù)化

將應(yīng)用程序打散成服務(wù)是SOA實(shí)施的關(guān)鍵之一。一方面,遺留系統(tǒng)的功能和數(shù)據(jù)不能丟棄,只有重用才能利用其價值。另一方面,將應(yīng)用作為整體,是從技術(shù)和實(shí)施上都非常難于復(fù)用的。所以,SOA的實(shí)施原則要求將應(yīng)用中的功能模塊抽象成開放、標(biāo)準(zhǔn)、粒度適中的服務(wù),進(jìn)而促進(jìn)現(xiàn)有功能重用、避免重復(fù)投資、加速新業(yè)務(wù)開發(fā)的速度。

架構(gòu)的松耦合原則

SOA的另一重要原則是松耦合,松耦合不僅表現(xiàn)在服務(wù)本身,還表現(xiàn)在架構(gòu)層面。服務(wù)的松耦合表現(xiàn)在服務(wù)的描述與其底層實(shí)現(xiàn)技術(shù)是分離的。換言之,一個服務(wù),其底層實(shí)現(xiàn)可能是Java,也可能是.NET;架構(gòu)的松耦合表現(xiàn)在服務(wù)消費(fèi)者與服務(wù)提供者的分離,在服務(wù)消費(fèi)者及提供者之間置入仲裁(Mediation)模塊。這樣,服務(wù)提供者對服務(wù)的修改對服務(wù)消費(fèi)者產(chǎn)生的影響可降至最低。

面向服務(wù)的整合

面向服務(wù)的整合是SOA的核心之一,主要由企業(yè)服務(wù)總線(ESB)提供這一部分的能力。服務(wù)消費(fèi)者之間既有面向服務(wù)的調(diào)用,也有面向消息的處理。企業(yè)服務(wù)總線提供的協(xié)議轉(zhuǎn)換、數(shù)據(jù)格式轉(zhuǎn)化、多種消息處理機(jī)制、審計(jì)、日志等功能能夠最大限度地提高SOA架構(gòu)的靈活性和擴(kuò)展性。

服務(wù)的組合及編排

服務(wù)梳理出來之后,基于服務(wù)的組合和編排就成為可能。服務(wù)的組合和編排能夠最大限度地重用現(xiàn)有功能,支持業(yè)務(wù)的創(chuàng)新。偏重于技術(shù)層面的服務(wù)/消息組合可由ESB提供,而偏業(yè)務(wù)層面的服務(wù)組合和編排可通過BPM組件實(shí)現(xiàn)。當(dāng)然,SOA實(shí)施原則還有許多,如服務(wù)治理、安全訪問、信息服務(wù)、門戶服務(wù)的實(shí)施原則,本文不再贅述。

中國式SOA在企業(yè)中的發(fā)展現(xiàn)狀

前幾年,硝煙彌漫、戰(zhàn)火紛飛,各路廠商奮力拼殺在SOA市場上。大廠商拼的是在市場上的統(tǒng)治地位,小廠商若能分得一杯羹也滿意了。喧囂之后總要?dú)w于沉靜。轉(zhuǎn)眼間,云計(jì)算鋪天蓋地席卷而來,絢麗的云彩抓住了大眾的眼球。SOA像是退居幕后的明星、落幕的英雄,很少再被人提起,甚至有人宣布“SOA已死”。那么,SOA真的銷聲匿跡了嗎?中國式SOA的當(dāng)前狀態(tài)是怎樣的呢?

圖2 Gartner技術(shù)成速度模型

圖2 Gartner技術(shù)成速度模型

SOA呼聲漸弱,實(shí)際上它越來越火

的確,現(xiàn)在大廠商們都已經(jīng)不再把SOA作為市場宣傳的重點(diǎn)了。但是,SOA卻走到了應(yīng)用最廣泛的時期。若對應(yīng)到Gartner技術(shù)成熟度曲線模型,中國當(dāng)前SOA所處的階段是圖2中的第4個階段——復(fù)蘇期。

我們大致可以如此推算SOA在中國的幾個階段,2006年之前是技術(shù)萌芽;2006-2008年是過熱期;2009年度過了幻滅期;從2010年開始進(jìn)入復(fù)蘇期,當(dāng)前正由復(fù)蘇期邁向成熟期。

經(jīng)過幾年的歷練,中國的SOA不論理論、實(shí)踐,還是產(chǎn)品都得到了長足的發(fā)展。一方面,中國培養(yǎng)了一大批掌握SOA精髓的系統(tǒng)集成商和獨(dú)立軟件提供商,如華為、東軟、用友、金蝶、中軟……他們或?qū)OA的理念植入到其解決方案中,或?qū)OA理念融合進(jìn)其產(chǎn)品之中。SOA架構(gòu)師、整合架構(gòu)師的隊(duì)伍也不斷壯大。另一方面,中國也擁有了自主研發(fā)的SOA中間件產(chǎn)品,如普元、炎黃盈動的流程引擎;銳易特、東方通、金蝶的ESB都是市場上的佼佼者。伴隨著國人對SOA的理解越來越深入,越來越成熟和專業(yè)的SOA產(chǎn)品及解決方案將會隨之而來。

SOA已經(jīng)深入人心?,F(xiàn)在,幾乎所有待建的系統(tǒng)和平臺都要求基于SOA架構(gòu)。SOA已經(jīng)成為基本的架構(gòu)原則,不論是系統(tǒng)間的整合,還是平臺的建設(shè),人們會不約而同地采用SOA原則來架構(gòu)靈活、易于擴(kuò)展的系統(tǒng)。

中國式SOA的幾點(diǎn)不足

盡管SOA已經(jīng)深入人心,但并非所有的人都能將SOA原則使用得很好。若不能很好運(yùn)用SOA,就無法收獲相應(yīng)的價值。下面給出幾點(diǎn)常見的不足之處,我無法在這篇文章中展開討論這些問題,但還是期待從業(yè)人員正視這些不足之處,找到正確的實(shí)施方法。

對SOA的理解參差不齊。若不能充分理解SOA,未能理解SOA的目標(biāo)和架構(gòu)原則,就無法正確實(shí)施SOA。在一些項(xiàng)目實(shí)施過程中,舊系統(tǒng)被直接推翻,而不是先將遺留系統(tǒng)服務(wù)化,然后再循序漸進(jìn)式地改進(jìn)。若所有舊系統(tǒng)全部推翻后重建,勢必會耗費(fèi)大量時間和人物力才能完成,不符合SOA多次少量投入的特點(diǎn)。此外,許多人理解的服務(wù)就是Web Service規(guī)范的服務(wù)。而事實(shí)上,SOA不限定采用何種技術(shù),只要是開放、標(biāo)準(zhǔn)的技術(shù)即可,比如JMS、RESTful Service等。

忽略服務(wù)梳理和服務(wù)描述的重要性。我清楚地記得一個項(xiàng)目,用戶通過這樣的方式生產(chǎn)Web服務(wù):將系統(tǒng)里的某個通用Java接口中的所有方法全部暴露出來,使用某個WSDL自動生產(chǎn)工具生成一個超級大的WSDL文件以及許多關(guān)聯(lián)的數(shù)據(jù)描述(XSD)文件。WSDL中暴露了大量原有程序中的Java包結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)信息。這個例子是一個糟糕的實(shí)踐。

哪些功能應(yīng)該封裝成服務(wù)、服務(wù)該如何描述,這些工作是需要規(guī)劃的。我們需要根據(jù)業(yè)務(wù)、現(xiàn)有系統(tǒng)等方面,全方位(或局部)梳理業(yè)務(wù),才能找到那些適合于暴露成服務(wù)的功能。確定好應(yīng)該暴露的服務(wù)之后,進(jìn)一步確定服務(wù)規(guī)約,描述其輸入和輸出、與其他系統(tǒng)的依賴關(guān)系、服務(wù)非功能性需求等。

重視工作流(Workflow),忽視服務(wù)自動編排(Service Choreography)。我見到的大多數(shù)BPM項(xiàng)目都是關(guān)于工作流的,工作流是以審批為主的業(yè)務(wù)流程,在中國尤為突出。這種流程在某種程度上比此前從一個辦公室走到另一辦公室、然后再到下一個辦公室的場景已經(jīng)先進(jìn)許多了。但我們知道除了工作流之外,BPM還有其他形式,比如服務(wù)自動編排,這樣的場景卻在很大程度上被忽視了。

服務(wù)治理未得到充分重視。服務(wù)治理或管理對于長期SOA實(shí)施的成敗至關(guān)重要。隨著SOA的持續(xù)發(fā)展,企業(yè)中的服務(wù)會越來越多,服務(wù)的變更、服務(wù)位置的變化和服務(wù)的版本升級相關(guān)工作越來越頻繁,如何把這些變化造成的影響控制到最小?再者,當(dāng)服務(wù)多了之后,如何快速便捷地找到所需的服務(wù)也是極為重要的工作。所以,服務(wù)管理和治理越發(fā)顯得重要。

企業(yè)級應(yīng)用,SOA還是ROA?

隨著Web2.0和云計(jì)算的興起,REST應(yīng)用再次變得火熱起來。與REST的相關(guān)的詞匯也出現(xiàn)了好幾個,RESTful Service和ROA (Resources Oriented Architecture)就是典型的代表。甚至有許多人認(rèn)為ROA會替代SOA。事實(shí)上是這樣的嗎?

認(rèn)為ROA勝過SOA的人一般指的是RESTful Service勝過SOAP,這種觀點(diǎn)產(chǎn)生的原因是RESTful Service簡單、擴(kuò)展性高、高性能(緩存機(jī)制);而大多數(shù)SOAP缺省基于RPC方式【注:SOAP并不限制一定使用RPC】, 這種機(jī)制需要在客戶端建立一個代理才模擬服務(wù)短的接口,進(jìn)而調(diào)用服務(wù)端的服務(wù)。相對而言,SOAP的客戶端和服務(wù)端的耦合要緊密一些,這限制了分布式應(yīng)用的擴(kuò)展。另外,RESTFul Service推薦的消息傳輸格式是JSON,它比SOAP要求的數(shù)據(jù)格式SOAP信封要簡單許多,這也是RESTful Service勝出的另一方面。

我認(rèn)為要回答這個問題,首先需要看看企業(yè)級應(yīng)用的特點(diǎn)以及兩種架構(gòu)風(fēng)格的適用性。由于遺留原因,目前企業(yè)內(nèi)的大多數(shù)應(yīng)用并非基于Web,應(yīng)用系統(tǒng)間的交互大多基于RPC方式,ROA很難在這種環(huán)境下開枝散葉。

此外,企業(yè)應(yīng)用間互相訪問的功能多數(shù)是基于過程而非基于資源交互,例如“核準(zhǔn)保單”,雖然可以通過REST實(shí)現(xiàn)這種場景,但畢竟沒有RPC使用起來那么直觀。可喜的是,近年來Web應(yīng)用越來越多地在企業(yè)內(nèi)使用,這為ROA提供了有利的土壤,使得ROA在企業(yè)架構(gòu)中的應(yīng)用變得多起來。從兩種架構(gòu)風(fēng)格的適用性角度看,一方面,SOA適合于企業(yè)級應(yīng)用自不必說,這么多年來SOA一直在企業(yè)范圍內(nèi)應(yīng)用;另一方面,到目前為止,ROA則更多地應(yīng)用于基于Web的前端應(yīng)用的數(shù)據(jù)聚合,所以ROA在企業(yè)內(nèi)的適用性要窄一些。

基于以上考慮,我認(rèn)為ROA可適用于企業(yè)內(nèi)的Web應(yīng)用之間的整合和協(xié)作。ROA通過RESTful Service的形式暴露服務(wù),這些服務(wù)可通過SOA架構(gòu)進(jìn)一步與企業(yè)的其他非Web應(yīng)用進(jìn)行整合;SOA則是更高層次的企業(yè)級架構(gòu)風(fēng)格,RESTful Service可作為描述服務(wù)的開放、標(biāo)準(zhǔn)的形式之一,但不是唯一形式。隨著企業(yè)級應(yīng)用越來越Web化,遺留系統(tǒng)正逐步淘汰,ROA可能會成為未來企業(yè)級解決方案的重要組成部分。

簡言之,SOA不會被替代,ROA的地位會越來越高;二者并非排他關(guān)系,而是相輔相成,共榮共贏的關(guān)系。

云計(jì)算沖擊下的SOA

云計(jì)算是新寵,就像當(dāng)年的SOA一樣。當(dāng)市場在大肆宣傳云計(jì)算時,SOA在一旁淡然地笑了。喜歡挑起爭端的人會說:“云計(jì)算來了,SOA該靠邊站。”這種說法只能當(dāng)作不負(fù)責(zé)任的市場噱頭,不能當(dāng)真。然而,二者并非同一層面的事物,不具有可比性,所以也就不存在誰替代誰的問題。相反,云計(jì)算和SOA還能彼此促進(jìn)對方的發(fā)展。表現(xiàn)在以下幾個方面。

一方面,如果一個企業(yè)成功地實(shí)施了SOA,當(dāng)云中某個服務(wù)能夠?yàn)槠髽I(yè)帶來更大價值時,其架構(gòu)就能很方便地?cái)U(kuò)展,將云中服務(wù)接入現(xiàn)有架構(gòu)之中。另一方面,由于業(yè)務(wù)擴(kuò)展造成現(xiàn)有服務(wù)無法支撐劇增的業(yè)務(wù)量時,在良好架構(gòu)的技術(shù)上,就能充分利用云計(jì)算帶來的彈性伸縮和按需功能等方面的優(yōu)勢。

云計(jì)算供應(yīng)商需要以SOA為基礎(chǔ)。云計(jì)算的核心也是服務(wù),計(jì)算、存儲、網(wǎng)絡(luò)、軟件等,一切皆服務(wù)。那么,如何將這些能力封裝成服務(wù),以良定義的接口為外界提供服務(wù)呢?這就需要SOA的支撐。所以,云計(jì)算的興起更加促進(jìn)了SOA的應(yīng)用,我看到過某些企業(yè)使用SOA架構(gòu)構(gòu)建SaaS、PaaS應(yīng)用并對外提供服務(wù)。

作者馬國耀,現(xiàn)就職于IBM北亞太戰(zhàn)略合作部,為合作伙伴提供產(chǎn)品培訓(xùn)、技術(shù)支持和架構(gòu)咨詢等服務(wù)。他曾獲得吉林大學(xué)學(xué)士學(xué)位和北京大學(xué)碩士學(xué)位。譯著有《云計(jì)算與SOA》。

分享到

wangyao

相關(guān)推薦