SOA攜手開源軟件 IT行業(yè)的未來趨勢
目前最為前沿的IT行業(yè)趨勢,第一是面向服務(wù)的體系結(jié)構(gòu)(SOA),第二就是開源軟件。而把SOA與開源軟件的優(yōu)點相結(jié)合,不僅可以降低客戶的IT成本,同時還能敏捷地應(yīng)對不斷變化的業(yè)務(wù)需求。
在現(xiàn)有的軟件開發(fā)項目里面,一直存在一個沒有辦法解決的問題:業(yè)務(wù)功能的理解和技術(shù)功能的理解是由同一個人負(fù)責(zé)的,也就是讓同一個人或同一些人完成業(yè)務(wù)與技術(shù)領(lǐng)域的銜接。實際環(huán)境中想要找到一個這樣的人是非常不容易的,而如果沒有這個人,軟件開發(fā)項目基本就離失敗不遠了,這是IT領(lǐng)域的老問題,也是面向服務(wù)的體系結(jié)構(gòu)SOA(Service-Oriented Architecture)要解決的主要問題之一。
SOA限制IT部門考慮采用最佳的組織與能力的組合,從而獲得Web服務(wù)、SOA以及BPM技術(shù)的全部優(yōu)勢。就好象一個汽車公司一樣,它不一定有能力發(fā)明制造輪胎、發(fā)動機、音響等全套的汽車零件。它的音響可能是從A公司批量購買的,它的剎車系統(tǒng)可能是B公司提供的,汽車公司利用了其他零件供應(yīng)商的服務(wù),來為最終的汽車用戶服務(wù)。
在SOA架構(gòu)中也是這樣,技術(shù)人員必須能夠適應(yīng)從做全部工作到做部分工作,并與他人共同完成整個工作的轉(zhuǎn)變。與對象或者過程相比,服務(wù)的開發(fā)應(yīng)面向一個更為寬廣的環(huán)境,因為它被重用的機會更大。實際上,定義可重用的服務(wù)也許是SOA中最重要的方面,也是SOA現(xiàn)在如此流行的重要原因。
OSOA規(guī)范三架馬車
為了響應(yīng)客戶需求,IBM、BEA、Oracle、SAP、Primeton等公司正在合作制定用于構(gòu)建SOA系統(tǒng)的規(guī)范,為開發(fā)人員提供構(gòu)造基于SOA應(yīng)用程序的更簡單更強大方法。目前,制定規(guī)范的工作交由這些公司組成的OSOA(Open Service Oriented Architecture)協(xié)作組織負(fù)責(zé),另外OSOA還負(fù)責(zé)在Apache推出開源的SCA/SDO實現(xiàn),用來更快的催化市場的發(fā)展。
OSOA目前正在起草一系列的規(guī)范,并以免版稅的許可方式提供給業(yè)界使用。OSOA的業(yè)界伙伴們現(xiàn)在主要在兩個項目上協(xié)同工作,分別是SCA(Service Component Architecture,服務(wù)構(gòu)件架構(gòu))和SDO(Service Data Objects,服務(wù)數(shù)據(jù)對象),這兩個項目就象OSOA的兩架馬車一樣,為SOA架構(gòu)立下了汗馬功勞。根據(jù)筆者掌握的最新情報,OSOA正在準(zhǔn)備啟動第三架馬車:DAS(Service Data Objects,服務(wù)數(shù)據(jù)對象)。
1.SCA
早在2005年11月,OSOA就發(fā)布了SCA 0.9規(guī)范草稿。SCA是一種全新的、跟語言無關(guān)的編程模型,這種面向服務(wù)構(gòu)件的編程模型可以大大簡化客戶的編程,提高應(yīng)用的靈活性,將會對現(xiàn)有軟件開發(fā)方式產(chǎn)生顛覆性的影響。
2.SDO
SDO致力于為應(yīng)用系統(tǒng)中處理數(shù)據(jù)提供統(tǒng)一的方式,而不論數(shù)據(jù)的來源、格式是什么樣的。SCA和SDO都可以獨自使用,沒有規(guī)定說在同一個應(yīng)用程序中必須同時使用兩種技術(shù)。然而SCA和SDO可以結(jié)合起來一起使用,從而為采用面向服務(wù)的架構(gòu)搭建應(yīng)用系統(tǒng)提供一種強有力的、靈活的方式。
3.DAS
DAS是與SDO密切相關(guān)的。DAS提供了一種對數(shù)據(jù)庫和對服務(wù)來說統(tǒng)一的數(shù)據(jù)處理方式,它也提供了相應(yīng)的機制,用來實現(xiàn)當(dāng)數(shù)據(jù)同其來源分離時的處理。DAS設(shè)計用于簡化和統(tǒng)一應(yīng)用程序處理數(shù)據(jù)的方式。通過使用DAS,應(yīng)用程序編程人員可以采用統(tǒng)一的方式訪問和操作來自異類數(shù)據(jù)源的數(shù)據(jù),包括關(guān)系數(shù)據(jù)庫、XML數(shù)據(jù)源、Web服務(wù)以及企業(yè)信息系統(tǒng)。
開源SOA四將軍
SOA作為新生事物,它的開源實現(xiàn)并不多。就筆者在行業(yè)內(nèi)的了解,目前共有下面四個開源SOA項目,就如同戰(zhàn)場上的將軍一樣,為SOA陣營攻城略地,開拓了不少疆土。
1.大將軍Tuscany
Tuscany是Apache軟件基金會的孵化項目,由在Apache軟件基金會占有重要份量的IBM和BEA主導(dǎo)。Tuscany原本是意大利行政區(qū)名,一般中文翻譯為托斯卡納區(qū),這里被借用作為項目名稱。Tuscany的主要目標(biāo)是為用戶提供一組SOA基礎(chǔ)設(shè)施,其中包括Java和C++實現(xiàn)的SCA/SDO/DAS標(biāo)準(zhǔn)。
2.驃騎將軍STP
STP(SOA Tools Platform)項目是Eclipse基金會的重要項目。STP的目標(biāo)是為技術(shù)人員提供一個靈活可擴展的框架,技術(shù)人員能夠在這個框架的基礎(chǔ)之上圍繞SOA方便地進行設(shè)計、配置、組裝、布署、監(jiān)控和管理等工作。STP提供相關(guān)工具來支持開發(fā)人員使用面向服務(wù)的體系結(jié)構(gòu)進行解決方案構(gòu)建,而面向服務(wù)的體系結(jié)構(gòu)則使用服務(wù)組件體系結(jié)構(gòu)作為其核心模型。
3.左車騎將軍SOA PHP
PECL(PHP Extension Community Library)庫在PHP社區(qū)是無人不知無人不曉,不過知道PECL庫新納入的SOA PHP項目的人卻并不多見。SOA PHP項目的主要目標(biāo)是用PHP來實現(xiàn)SOA中的SCA/SDO標(biāo)準(zhǔn),這對PHP社區(qū)的同志們真是個莫大的福音。
4.右車騎將軍牛頓(Newton)
Newton是一個分布式的運行時框架,用來對企業(yè)級環(huán)境下復(fù)雜的SOA系統(tǒng)做動態(tài)的實例化和可持續(xù)管理。Newton利用SCA系統(tǒng)描述,對OSGi的組件做動態(tài)的布署,由此實現(xiàn)對分布式的異構(gòu)數(shù)據(jù)源的監(jiān)控和管理。
#p#
Tuscany開源架構(gòu)分析
從以上可以看出,世界上兩大開源軟件基金會(Apache軟件基金會和Eclipse基金會)還有其他的不同社區(qū)都已經(jīng)開始了SOA開源軟件的研發(fā)進程。下面將主要討論Tuscany開源項目架構(gòu)和它在SOA標(biāo)準(zhǔn)化進程中的影響。
1.Tuscany的問題域
問題域是一個軟件產(chǎn)品解決方案的首要目標(biāo)。BEA Systems CTO辦公室的Jim Marino告訴我們,Tuscany的問題域用一句話概括,就是解決怎么樣來構(gòu)造和組裝服務(wù)的問題。
服務(wù)是表示一個業(yè)務(wù)功能的代碼單元,它可以被客戶端在本地或者遠程定位并構(gòu)造。服務(wù)可以布署在不同的運行環(huán)境中,比如可以是J2EE Server,也可以是J2SE客戶端、可以是Servlet容器,也可以是OSGi容器等。
服務(wù)可以用不同的程序語言來編寫,然后在異構(gòu)環(huán)境中被組裝。這里的服務(wù)和Web Service中的服務(wù)有很大區(qū)別。Web Service中的服務(wù)是用低層級的協(xié)議來約束系統(tǒng)間的互操作,而Tuscany中的服務(wù)是從高層級的業(yè)務(wù)組合來屏蔽Web Service中的服務(wù)所考慮的問題。Tuscany可以使用Web Service中的技術(shù),但并不限制于它,應(yīng)該說Tuscany對外封裝了WS-*和RMI等服務(wù)調(diào)用細節(jié)。
用一句話概括就是Web Service描述了服務(wù)間的協(xié)議,但并沒有描述服務(wù)間的關(guān)系,而后者正是Tuscany所要做的主要工作之一。
2.Tuscany的Service Network架構(gòu)
以上面確定的問題域為中心,Tuscany為我們解決了很多現(xiàn)有的技術(shù)架構(gòu)問題。我們用現(xiàn)有的技術(shù)架構(gòu),在平常的開發(fā)中總會碰到如下一些問題:
◆大規(guī)模軟件系統(tǒng)的開發(fā)和配置的復(fù)雜性。
◆缺乏動態(tài)性,比如對目標(biāo)功能服務(wù)點的動態(tài)切換,這一直是軟件業(yè)的一大核心問題。
◆異構(gòu)環(huán)境下的模塊功能不能復(fù)制。
◆很難構(gòu)建一個可平滑地對用戶規(guī)模伸縮的系統(tǒng)。比如1999年,Ebay網(wǎng)絡(luò)在用戶數(shù)急增的情況下,曾經(jīng)宕機20小時,導(dǎo)致股價下跌9%,損失慘重。
在這樣的情況下,Tuscany在SOA基礎(chǔ)上設(shè)計為Service NetWork架構(gòu)。SCA用來組裝一個服務(wù)網(wǎng)絡(luò),而SDO表達了服務(wù)網(wǎng)絡(luò)內(nèi)流動的數(shù)據(jù),DAS則對這些流動的數(shù)據(jù)進行統(tǒng)一格式的存儲。
Tuscany的異構(gòu)Service NetWork架構(gòu)如圖1所示。從圖中可以看出,在Service NetWork中,業(yè)務(wù)邏輯是包含在Component(組件)中。Component對外提供服務(wù),一個Component可以引用其他Component提供的服務(wù),還可以依賴于其他Component提供的服務(wù)。Component之間的引用或者依賴關(guān)系,可以用一定的Policy(策略)表達,比如事務(wù)策略、可靠性策略等。
Tuscany的Service NetWork就好比一桌滿漢全席,而Service NetWork中的Component就好比滿漢全席中的108道菜。我們要自己去做一個好吃的菜是很難的,而如果有不同的廚師掌握了不同的菜的手藝,我們就可以自己來從108道菜中挑選我們自己愛吃的菜了。在SOA的軟件開發(fā)環(huán)境下,顯然“由一個廚師來決定消費者口味”的時代將很快結(jié)束。
Tuscany的Service NetWork中的Component是可大可小的,服務(wù)可以在本地也可以在遠端。對Java而言,服務(wù)實現(xiàn)可以在單個JVM中也可以在多JVM中。還有非常重要的一點,Component是自包含的,Component中還可以包括另外的Component,甚至可以包括本Component。實際上,Service NetWor本身也作為一個Component對待。
3.Tuscany的業(yè)務(wù)調(diào)用流程
在上面的架構(gòu)下,Tuscany的服務(wù)可以用各種各樣的語言來實現(xiàn),并分布在各種各樣的環(huán)境中。它的業(yè)務(wù)調(diào)用流程如下,我們用114撥號進行比對分析:
◆客戶向Tuscany服務(wù)發(fā)起調(diào)用。就好象我們撥打“號碼百事通”一樣,使用的是中國電信的統(tǒng)一服務(wù)。
◆Tuscany的綁定功能模塊負(fù)責(zé)把調(diào)用分發(fā)到不同的傳輸功能實現(xiàn)。比如“號碼百事通”的座席或者后臺程序會根據(jù)您的選擇,把您要問的問題轉(zhuǎn)發(fā)到不同的業(yè)務(wù)后端去。
◆對應(yīng)的傳輸功能實現(xiàn)把調(diào)用進行傳輸,傳輸方式可能是SOAP/HTTP、JMS、RMI或者AMQP等。比如“號碼百事通”和“攜程網(wǎng)”的通信方式,還有和“螞蟻搬家”的通信方式可能是不同的。
◆Tuscany綁定功能服務(wù)模塊收到調(diào)用請求,把它轉(zhuǎn)發(fā)給對應(yīng)的目標(biāo)服務(wù)。“攜程網(wǎng)”收到請求后,把客戶想訂什么酒店轉(zhuǎn)發(fā)到不同的酒店集團。
◆目標(biāo)服務(wù)執(zhí)行服務(wù)功能。不同的酒店集團確認(rèn)是否還有空房等。
看起來好象和Web Service等差別不大。不過要注意,這里的第五步不需要判斷是否需要返回信息。是否需要返回信息是不同的服務(wù)功能已經(jīng)確定好的,由Tuscany已經(jīng)實現(xiàn)。
4.Tuscany的內(nèi)核分析
Tuscany采用微內(nèi)核加擴展插件的結(jié)構(gòu)。它的工程本身加上全部依賴工程只有4M代碼,而它的可擴展插件都是一個獨立的SCA Component。實際上,它的內(nèi)核中的bootstrap就是由一系列的Component組成的。 Tuscany對外提供一個非侵入的編程模型,具有自動化配置功能,并且這些配置都是有缺省值的。就如同富捷軟件集團總裁周強說的一樣,Tuscany和射雕英雄傳中的周伯通一樣,已經(jīng)學(xué)會了“左右手互搏”的武功,它的內(nèi)核和插件就如同自己的左手和右手一樣,互相競爭功能,互相彌補缺憾,恰到好處。
Tuscany的內(nèi)核被控制在30K行代碼之內(nèi)。它提供擴展點來提供功能,而且這些功能都是在運行期動態(tài)加入的。Tuscany允許多樣化的技術(shù)選擇,比如它不會限制你用什么Web Service實現(xiàn)。
Tuscany的內(nèi)核組成如圖2所示,從圖中可以看出,Tuscany主要由五大部分組成:
◆一個Ioc(Inversion of Control)的單JVM的織入引擎;
◆組件狀態(tài)管理容器;
◆策略布署框架;
◆數(shù)據(jù)訪問服務(wù);
◆依賴管理和SPI管理容器。
5.Tuscany與其他項目的異同
從上面的內(nèi)核分析可以看出,Tuscany與我們平常知道的項目是完全不同的。Tuscany是基于SCA而實現(xiàn)的,它通過組裝的方法來表達自己的Service NetWork架構(gòu)概念。它可以用各種各樣的語言比如Java、C++、BPEL來構(gòu)造組件,并能和已經(jīng)存在的各種編程模型進行集成,它還提供了一個用來表達服務(wù)關(guān)聯(lián)關(guān)系的策略模型。
Tuscany可以布署在J2EE Server上,也可以使用J2EE中的很多技術(shù),Tuscany中的Components也可以用J2EE中的EJB或者JAX-WS實現(xiàn)。不過,Tuscany提供的功能和J2EE是不相同的。Tuscany可以用多種語言實現(xiàn),包括C++、BPEL和PHP等。和J2EE相比,Tuscany對業(yè)務(wù)子系統(tǒng)間的通信做了更好的抽象,在J2EE中,必須確定系統(tǒng)哪里需要一個Web Service或EJB;但Tuscany可以容許你在后面才決定這里是一個Web Service或者是一個POJO。Tuscany中的服務(wù)還可以是輕量級的實現(xiàn)。
Tuscany所做的事情和JBI(Java Business Integration)也不相同。對于中間件供應(yīng)商而言,JBI是在NMR(Normalized Message Router)的基礎(chǔ)上,把SPI(Server Provider Interface)標(biāo)準(zhǔn)化了。Tuscany沒有NMR的概念,而是使用點對點的織入模型,用來起到“服務(wù)交換機”的作用。和SPI一樣,Tuscany也有一個擴展模型,但它主要是針對服務(wù)開發(fā)者和服務(wù)組裝者而設(shè)置。
Tuscany目前已經(jīng)發(fā)展成為了SOA的試金石,在OSOA等開放組織的帶領(lǐng)下,它將為我們發(fā)現(xiàn)更多的金礦,相信隨著OSOA的不斷發(fā)展,Tuscany這樣的開源SOA產(chǎn)品將取得更輝煌的成功。
【編輯推薦】