秦 偉
(長治職業(yè)技術(shù)學(xué)院,山西 長治 046000)
在全球范圍內(nèi),面向服務(wù)的架構(gòu)(SOA)正成為未來企業(yè)軟件架構(gòu)的趨勢。在國內(nèi),雖然近幾年來關(guān)于SOA的報道經(jīng)常見諸各種媒體,但對SOA的研究還處于起步階段。
《信息周刊》和埃森哲公司通過對中國上千家企業(yè)機(jī)構(gòu)的問卷調(diào)查,了解在商業(yè)科技推動企業(yè)競爭力及商業(yè)創(chuàng)新的背景下,中國企業(yè)部署SOA的現(xiàn)狀和未來的趨勢。調(diào)查的結(jié)果顯示[1]:擁有SOA應(yīng)用的企業(yè)占8.8%,在大中型企業(yè)中,這個比例是10%,四分之三的被調(diào)查企業(yè)未對SOA采取任何行動。然而在較早開始SOA部署的企業(yè)中,60%的大中型企業(yè)和超過一半的小型企業(yè)都表示他們將增加在SOA上的投入。數(shù)據(jù)表明,SOA在中國尚處于應(yīng)用啟蒙階,但企業(yè)在SOA上的投入?yún)s在快速增加。
面向服務(wù)構(gòu)架(Service-Oriented Architecture,SOA)是一種設(shè)計思想,它指導(dǎo)業(yè)務(wù)服務(wù)(business ser?vices)的創(chuàng)建和使用的各個方面,同時也定義和提供了一種具有一定特征的IT基礎(chǔ)設(shè)施。面向服務(wù)(SOA)與其說是一種技術(shù),倒不如說是一種思維方式,它是一項大膽的基礎(chǔ)架構(gòu)變革,通過技術(shù)和協(xié)同工作實(shí)現(xiàn)了文化變遷。如今,很多CIO都感受到了SOA的熱度,福布斯500強(qiáng)中的大部分企業(yè)也都在考慮實(shí)施SOA方案。
Web Services是SOA思想在改進(jìn)DCOM和CORBA缺點(diǎn)上的努力。今天應(yīng)用Web Services的面向服務(wù)架構(gòu)與過去不同的特點(diǎn)就在于它們是基于標(biāo)準(zhǔn)以及松散耦合的。廣泛接受的標(biāo)準(zhǔn)(如XML和SOAP)提供了在各不同廠商解決方案之間的交互性;而松散耦合將分布計算中的參與者隔離開來,交互兩邊某一方的改動并不會影響到另一方。
SOA的強(qiáng)大和靈活性將給企業(yè)帶來巨大的好處。如果某組織將其IT架構(gòu)抽象出來,將其功能以粗粒度的服務(wù)形式表示出來,每種服務(wù)都清晰地表示其業(yè)務(wù)價值,那么,這些服務(wù)的顧客(可能在公司內(nèi)部,也可能是公司的某個業(yè)務(wù)伙伴)就可以得到這些服務(wù),而不必考慮其后臺實(shí)現(xiàn)的具體技術(shù)。更進(jìn)一步,如果顧客能夠發(fā)現(xiàn)并綁定可用的服務(wù),那么在這些服務(wù)背后的IT系統(tǒng)能夠提供更大的靈活性。
集成所要解決的是不同系統(tǒng)在業(yè)務(wù)與集成需求上多個方面的差異,而且這些系統(tǒng)一般是由不同開發(fā)團(tuán)隊、采用不同技術(shù)、為解決不同業(yè)務(wù)問題而開發(fā)的。
2.1.1 導(dǎo)致集成問題的業(yè)務(wù)驅(qū)動
我們先來看一些常見的、導(dǎo)致集成問題的業(yè)務(wù)驅(qū)動,以及機(jī)構(gòu)為什么要在SOA與Web服務(wù)上進(jìn)行投入[2]:
1)兼并與收購。兼并與收購(Merger and Acquisi?tion,簡稱M&A)活動常常造成“有多個IT系統(tǒng)可以處理相似事務(wù)”的局面,而要體現(xiàn)M&A的商業(yè)價值,就必須對這些IT系統(tǒng)加以合并。
2)內(nèi)部重組。盡管內(nèi)部重組所產(chǎn)生的影響不如兼并與收購(M&A)那樣巨大,但也造成了許多相同的問題,而且出現(xiàn)頻率更高。
3)應(yīng)用/系統(tǒng)合并。如果相視的事務(wù)可被多個IT系統(tǒng)處理,那么需要通過合并或替換,以節(jié)省資金、減少人數(shù),使業(yè)務(wù)操作運(yùn)行更加流暢。
4)不一致/重復(fù)/零散的數(shù)據(jù)。有時,重要的業(yè)務(wù)數(shù)據(jù)被分布于多個系統(tǒng)上,必須將它們加以合并和過濾才能有助于決策。
5)新業(yè)務(wù)戰(zhàn)略。創(chuàng)新型公司經(jīng)營要根據(jù)變化的業(yè)務(wù)環(huán)境貫徹新的業(yè)務(wù)戰(zhàn)略,這就要求各個IT系統(tǒng)更高以嶄新的方式一同工作。最終,同行業(yè)的其他公司也必須做出同樣的改變才能保持競爭力。
6)使業(yè)務(wù)流程流暢。在過去的業(yè)務(wù)流程中,數(shù)據(jù)常常是手工錄入到不同系統(tǒng)中的。如今,這些系統(tǒng)往往都需要被新的支持“不需人工干預(yù)便可進(jìn)行多系統(tǒng)間事務(wù)處理”的系統(tǒng)所替代。
2.1.2 集成面臨的技術(shù)挑戰(zhàn)
下面列出了進(jìn)行集成時將面臨的部分難題[3]:協(xié)調(diào)由不同系統(tǒng)實(shí)現(xiàn)的、不兼容的業(yè)務(wù)流程;協(xié)調(diào)不同系統(tǒng)所使用的數(shù)據(jù)的差別(既包括數(shù)據(jù)語法,也包括信息語義);協(xié)調(diào)用以實(shí)現(xiàn)不同系統(tǒng)的、不兼容的技術(shù);協(xié)調(diào)不同系統(tǒng)所采用的事務(wù)處理的時間粒度(周期);協(xié)調(diào)不同系統(tǒng)所使用的交互模式(例如同步通信、異步通信、事件驅(qū)動的處理等)。
2.1.3 “理想的”集成方案應(yīng)滿足的要求
除上述技術(shù)挑戰(zhàn)以外,“理想”的集成方案還必須滿足下列要求:低成本、具有較快的投資回報(ROI);易于掌握和管理;不會影響現(xiàn)有系統(tǒng);具有可伸縮性、可靠性、高可用率、容錯性及安全性等等;靈活的易于對各項目的具體需求進(jìn)行定制。
在進(jìn)行項目集成的時候,有時戰(zhàn)術(shù)性與機(jī)會性的方法較好,有時戰(zhàn)略性與系統(tǒng)性方法更合適——這完全依賴于具體的業(yè)務(wù)需求。下面分別針對戰(zhàn)略性方法和戰(zhàn)術(shù)性方法列出了一些具體的業(yè)務(wù)目標(biāo),如表1所示。

表1 戰(zhàn)略性方法與戰(zhàn)術(shù)性方法的比較
業(yè)務(wù)人員與技術(shù)人員常常會奇怪,哪一種集成方法更好?是戰(zhàn)略性方法還是戰(zhàn)術(shù)性方法?這沒有嚴(yán)格的規(guī)律。不過,在眾多專用的戰(zhàn)術(shù)集成上花去的成本,很快就會超過一個更具戰(zhàn)略性的方法的成本。
2.1.4 集成可在不同技術(shù)層次上進(jìn)行
集成可在許多不同的IT技術(shù)層次上進(jìn)行[4]。
1)數(shù)據(jù)集成。關(guān)注數(shù)據(jù)級的集成,常常通過同步各種不同數(shù)據(jù)庫中的內(nèi)容來實(shí)現(xiàn)的。存在的關(guān)鍵涉及協(xié)調(diào)不同數(shù)據(jù)庫的數(shù)據(jù)模式、協(xié)調(diào)數(shù)據(jù)元素的含義等。
2)消息集成。關(guān)注于通過“在應(yīng)用間交換消息”來構(gòu)建集成,這些消息通常代表了一個在應(yīng)用中發(fā)生的事務(wù),需要將它們可靠的傳遞到其他應(yīng)用。存在的關(guān)鍵問題涉及在應(yīng)用數(shù)據(jù)和消息間做相互轉(zhuǎn)換,轉(zhuǎn)換不同應(yīng)用所采用的不同消息格式。
3)組件集成。關(guān)注于用組件技術(shù)(如DCOM、CORBA、.NET或J2EE等)來包裝傳統(tǒng)系統(tǒng),以及用它們的組件接口來連接組件。存在的關(guān)鍵問題是組件模型之間的集成(比如集成CORBA與DCOM、或J2EE與.NET將是一個難題)。
4)應(yīng)用集成。關(guān)注利用各種應(yīng)用發(fā)布的APIS、對象模型、消息格式、數(shù)據(jù)庫模式等來集成。存在的關(guān)鍵問題涉及協(xié)調(diào)不同應(yīng)用的數(shù)據(jù)模型,以及解決“目前大多數(shù)套裝應(yīng)用僅提供了初步的集成設(shè)施”的問題。這種形式的集成,一般都是指集成套裝應(yīng)用系統(tǒng)。
5)服務(wù)集成。關(guān)注于創(chuàng)建抽象的,不與某一數(shù)據(jù)庫、組件模型或套裝應(yīng)用相關(guān)的服務(wù),并在集成系統(tǒng)時將這些服務(wù)作為構(gòu)建。存在的關(guān)鍵問題是通常需要一種成熟的集成構(gòu)架(即一種面向服務(wù)的架構(gòu)),以實(shí)現(xiàn)服務(wù)接口與下層實(shí)現(xiàn)的明確分離。
6)流程集成。關(guān)注于通過集成現(xiàn)成的IT資產(chǎn)(比如數(shù)據(jù)、組件、應(yīng)用和服務(wù)等)來創(chuàng)建新的業(yè)務(wù)流程。這種形式的集成,將業(yè)務(wù)流程的定義和管理,顯示的與特定的應(yīng)用分離開。存在的關(guān)鍵問題是通常需要各個機(jī)構(gòu)在業(yè)務(wù)流程上達(dá)成一致,而且需要一個成熟的集成基礎(chǔ)設(shè)施,以便對現(xiàn)有IT資產(chǎn)進(jìn)行良好的集成。
7)用戶界面集成。通常指在桌面或表示層進(jìn)行集成(例如portal產(chǎn)品)。關(guān)鍵問題是Portals僅解決了集成難題中與用戶互動的部分。
8)B2B集成。關(guān)注于多個機(jī)構(gòu)間的關(guān)鍵業(yè)務(wù)流程與關(guān)鍵服務(wù)的自動化。如果只涉及兩個機(jī)構(gòu)間的集成,那么只需要將兩個系統(tǒng)用VPN和文件傳輸對接起來即可。如果很多機(jī)構(gòu)都想基于Internet將供應(yīng)鏈上的各個流程自動化,那么復(fù)雜性將呈指數(shù)增長。
目前,用XML和Web服務(wù)進(jìn)行集成與互操作有兩種方法[5-8]:
1)Web服務(wù)集成(Web Services Integration,WSI):戰(zhàn)術(shù)性與機(jī)會性的“應(yīng)用Web服務(wù)來解決集成與互操作問題”的方法。
2)面向服務(wù)的集成(Service-Oriented Integration,SOI)。在SOA的環(huán)境下用Web服務(wù)進(jìn)行集成,即一種戰(zhàn)略性的系統(tǒng)的“應(yīng)用Web服務(wù)來解決集成與互操作問題”的方法。
這兩種方法都是以XML、SOAP和WSDL為基礎(chǔ)的,它們都使用由Web服務(wù)平臺定義的相同技術(shù),但只有SOI基于SOA的原則(包括定義一個SOA治理框架、定義各種SOA流程以及最佳實(shí)現(xiàn)方式等),以戰(zhàn)略的和系統(tǒng)的方式來應(yīng)用這些技術(shù)。而WSI是讓各個集成團(tuán)隊在UDDI注冊庫中分別編制目錄,沒有或者很少關(guān)注各個項目間的一致性。
實(shí)際上,這兩種方法,不存在哪個更好,雖然它們會導(dǎo)致不同結(jié)果,但是哪個更好取決于項目的目標(biāo)。下面分別詳述WSI和SOI。
2.2.1 Web服務(wù)集成(WSI)
如果只追求立即見效與短期投資回報而不考慮長期成本的話,用Web服務(wù)集成(WSI)開展戰(zhàn)術(shù)性與機(jī)會性的集成項目是比較湊效的。
通常,一個WSI項目要涉及許多(2個~4個)需要彼此交換數(shù)據(jù)的系統(tǒng)。項目團(tuán)隊將根據(jù)下列信息來定義SOAP消息:要在各系統(tǒng)間交換的數(shù)據(jù);各系統(tǒng)已經(jīng)能夠理解的各種傳統(tǒng)消息格式;可用于訪問各系統(tǒng)的傳統(tǒng)API或方法。然后,項目團(tuán)隊將定義WSDL契約(包括接口、操作、消息交換模式)。企業(yè)級服務(wù)質(zhì)量(比如安全性、可靠的消息傳遞、事務(wù)管理、故障轉(zhuǎn)移等)是根據(jù)實(shí)際需要實(shí)現(xiàn)的,可以用相應(yīng)的策略信息定義它在完成一系列WSI項目之后,機(jī)構(gòu)實(shí)際上已經(jīng)創(chuàng)建了一系列點(diǎn)對點(diǎn)集成。當(dāng)然,這里所謂的點(diǎn)對點(diǎn)集成不是老式的點(diǎn)對點(diǎn)(比如一個使用文件傳輸(FTP),另一個使用TCP/IP,還有一個使用數(shù)據(jù)庫同步)。這里的點(diǎn)對點(diǎn)指的是它們不必使用相同的數(shù)據(jù)模型,不必使用相同的安全架構(gòu),也不需支持相同程度的可重用性。
2.2.2 面向服務(wù)的集成(SOI)
SOI是在SOA的環(huán)境下用Web服務(wù)進(jìn)行的集成。SOI是戰(zhàn)略性的、系統(tǒng)的應(yīng)用Web服務(wù)來解決集成與互操作問題。如果希望在某一集成架構(gòu)上作巨大投入,并獲得最佳的長期效果,那么SOI將是不錯的選擇[9,10]。
與WSI不同的是,實(shí)現(xiàn)SOI應(yīng)從第一個集成項目之前開始,在啟動SOI階段應(yīng)完成如下工作:
1)定義SOA治理框架、過程、準(zhǔn)則、模型和工具等。
2)對服務(wù)領(lǐng)域進(jìn)行形式化建模。
3)定義一個服務(wù)分類層次,以便各個集成項目可對服務(wù)進(jìn)行一致的分類與編目,以促進(jìn)將來重用。
4)如果Web服務(wù)平臺為完成相似任務(wù)提供了多種選擇,應(yīng)選擇一種一致的方法應(yīng)用于各個項目。
圖1顯示了一個SOI如何隨著時間而逐步發(fā)展。用建模工具創(chuàng)建服務(wù)領(lǐng)域的初始數(shù)據(jù)、服務(wù)與流程模型,然后將它們保存在一個元數(shù)據(jù)倉庫中。各個集成項目都是從使用和改進(jìn)同樣的模型開始,因此在該服務(wù)領(lǐng)域內(nèi)的系統(tǒng)間交換信息時,使用的“客戶”與“賬戶”的定義是一致的(盡管它們在各個傳統(tǒng)系統(tǒng)內(nèi)部的表示可能會有所不同)。IT系統(tǒng)在運(yùn)行時通過服務(wù)注冊庫(比如UDDI)查找服務(wù),然后直接調(diào)用服務(wù)。
這種既集中有分散的SOI架構(gòu),使各個集成團(tuán)隊可以獨(dú)立實(shí)現(xiàn)和注冊各自的服務(wù)提供者(或者編寫一個全新的服務(wù),或者用SOI對傳統(tǒng)系統(tǒng)進(jìn)行包裝),同時可以確保各個集成團(tuán)隊所完成的服務(wù)可以相互訪問和使用。
[1] 中國科永聯(lián)高級技術(shù)培訓(xùn)中心.軟件體系結(jié)構(gòu)[DB/oL].http://www.itisedu.com/phrase/[2006-03-31]-358465.html.
[2]Sommerville.軟件工程[M].程成,陳霞,譯.北京:機(jī)械工業(yè)出版社,2007.
[3] 毛新生.SOA原理、方法、實(shí)踐[M].北京:電子工業(yè)出版社,2007.
[4] 國家SOA應(yīng)用中心.中國SOA應(yīng)用調(diào)查[EB/oL].http://se.csai.cn/Monograph/20061116-0855151952.htm.
[5] 國家SOA應(yīng)用中心.中國SOA應(yīng)用現(xiàn)狀分析報告[EB/oL].http://news.csdn.net/n/2007-0313/101948.html.
[6] 郭海林.淺談:SOA實(shí)施現(xiàn)狀及面臨的挑戰(zhàn)[EB/oL].http://www.enet.com.cn/article/2007/0315/A20070315485059.shtml.
[7] Eric NewComer Greg Lomow.Understanding SOA with Web Services[M].徐涵,譯.北京:電子工業(yè)出版社,2006.
[8] 崔曉波.SOA概述[EB/oL].http://se.csai.cn2006-11-14./Monograph/200611141-116331889.htm.
[9] Jeff Hanson Event-driven services in SOA[EB/oL].[2005-01-31]http://www.javaworld.com/javaworld/jw-01-2005/jw-0131-soa.html 2005-1.
[10]亦海義.面向服務(wù)的體系結(jié)構(gòu)SOA簡介[EB/oL].[2006-01-16].http://tech.51cto.com/art/200601/16185.htm.