余 翼
[摘要]介紹一種新的軟件架構(gòu)方法——面向服務(wù)架構(gòu)(SOA)的理念及其特點,并對面向服務(wù)架構(gòu)的ERP和面向?qū)ο蠹軜?gòu)的ERP分別在體系結(jié)構(gòu)和開發(fā)方法上作比較,闡述SOA思想在ERP設(shè)計中的應(yīng)用特點和優(yōu)勢。
[關(guān)鍵詞]面向服務(wù)架構(gòu)(SOA)面向?qū)ο蠹軜?gòu)(OOA)軟件設(shè)計
中圖分類號:TP3文獻標(biāo)識碼:A文章編號:1671-7597(2009)1110094-01
一、面向服務(wù)架構(gòu)SOA
SOA——面向服務(wù)架構(gòu)是一個組件模型,它將應(yīng)用程序的不同功能單元——服務(wù),通過服務(wù)間定義良好的接口和契約聯(lián)系起來。接口采用中立的方式定義,獨立于具體實現(xiàn)服務(wù)的硬件平臺、操作系統(tǒng)和編程語言,使得構(gòu)建在這樣系統(tǒng)中的服務(wù)可以使用統(tǒng)一和標(biāo)準(zhǔn)的方式進行通信。其中服務(wù),是指僅基于兩個組件接口之間的契約,由一個組件提供其行為方法給另一個使用。
SOA中一般都包含三個角色:服務(wù)的提供者、服務(wù)的請求者、服務(wù)代理。三個角色是根據(jù)對服務(wù)提出不同的需求和行使的不同功能來劃分的。它們的關(guān)系可以簡單理解為:服務(wù)的提供者將它提供服務(wù)的具體描述發(fā)布在服務(wù)代理,以方便服務(wù)的請求者查詢;服務(wù)的請求者通過對服務(wù)代理搜索,查找到需要的服務(wù)及其提供者的地址;最后是服務(wù)的提供者與服務(wù)的請求者進行直接的綁定,完成服務(wù)。舉個最簡單的例子,我們?nèi)粢诰W(wǎng)上下載一首歌,先可以通過搜索引擎GOOGLE等,搜索可下載這首歌的網(wǎng)站,獲知這首歌的免費下載的地址,最后我們直接鏈接這個地址下載歌。在這個過程,網(wǎng)站即相當(dāng)于一個服務(wù)代理,我們是服務(wù)的請求者,而最后那個下載地址背后的服務(wù)器為服務(wù)的提供者。
SOA主要特征是將應(yīng)用程序功能包裝成服務(wù),服務(wù)間彼此獨立,可單獨作為組件使用。它具備松散耦合,提供粗粒度的服務(wù)和標(biāo)準(zhǔn)化的接口等。SOA旨在提供一個通用的,可互操作的和有彈性的行業(yè)標(biāo)準(zhǔn)架構(gòu),可以在軟件基礎(chǔ)架構(gòu)之上建立一系列可重復(fù)利用的服務(wù),實現(xiàn)企業(yè)適應(yīng)業(yè)務(wù)流程變化的需求。
二、SOA體系結(jié)構(gòu)的優(yōu)勢
面向服務(wù)的體系結(jié)構(gòu)可以基于現(xiàn)有的系統(tǒng)投資來發(fā)展,而不需要徹底重新創(chuàng)建系統(tǒng)。如果組織將研發(fā)力量集中在創(chuàng)建服務(wù)、利用現(xiàn)有的技術(shù)、結(jié)合基于組件的方法來開發(fā)軟件上,將獲得如下幾方面好處:
1.利用現(xiàn)有資產(chǎn),這是首要的需求。通過使用適當(dāng)?shù)腟OA框架并使其可用于整個企業(yè),可以將業(yè)務(wù)服務(wù)構(gòu)造成現(xiàn)有組件的集合。使用這種新的服務(wù)只需要知道它的接口和名稱。服務(wù)的內(nèi)部細節(jié)以及在組成服務(wù)的組件之間傳送的數(shù)據(jù)的復(fù)雜性都對外界隱藏了。這種組件的匿名性使組織能夠利用現(xiàn)有的投資,從而可以通過合并構(gòu)建在不同的機器上、運行在不同的操作系統(tǒng)中、用不同的編程語言開發(fā)的組件來創(chuàng)建服務(wù)。遺留系統(tǒng)可以通過Web服務(wù)接口來封裝和訪問。
2.商品化基礎(chǔ)架構(gòu)。在所有不同的企業(yè)應(yīng)用程序之間,基礎(chǔ)架構(gòu)的開發(fā)和部署將變得更加一致?,F(xiàn)有的組件、新開發(fā)的組件和從廠商購買的組件可以合并在一個定義良好的SOA框架內(nèi)。這樣的組件集合將被作為服務(wù)部署在現(xiàn)有的基礎(chǔ)構(gòu)架中,從而使得可以更多地將基礎(chǔ)架構(gòu)作為一種商品化元素來加以考慮。
3.更快的產(chǎn)品上市速度。組織的Web服務(wù)庫將成為采用SOA框架的組織的核心資產(chǎn)。使用這些Web服務(wù)庫來構(gòu)建和部署服務(wù)將顯著地加快產(chǎn)品的上市速度,因為對現(xiàn)有服務(wù)和組件的新的創(chuàng)造性重用縮短了設(shè)計、開發(fā)、測試和部署產(chǎn)品的時間。
4.減少成本。隨著業(yè)務(wù)需求的發(fā)展和新的需求的引入,通過采用SOA框架和服務(wù)庫,為現(xiàn)有的和新的應(yīng)用程序增強和創(chuàng)建新的服務(wù)的成本大大地減少了。同樣,開發(fā)團隊的學(xué)習(xí)難讀也降低了,因為他們可能已經(jīng)熟悉了現(xiàn)有的組件。
5.降低風(fēng)險。重用現(xiàn)有的組件降低了在增強或創(chuàng)建新的業(yè)務(wù)服務(wù)的過程中帶來的風(fēng)險。如前所述,這也減少了維護和管理支持服務(wù)的基礎(chǔ)架構(gòu)的風(fēng)險。
6.持續(xù)改進業(yè)務(wù)過程。SOA允許清晰地表示流程流,這些流程流通過在特定業(yè)務(wù)服務(wù)中使用的組件的順序來標(biāo)識。這給商業(yè)用戶提供了監(jiān)視業(yè)務(wù)操作的理想環(huán)境。業(yè)務(wù)建模反映在業(yè)務(wù)服務(wù)中。流程操縱是以一定的模式重組部件(構(gòu)成業(yè)務(wù)服務(wù)的組件)來實現(xiàn)的。這將進一步允許更改流程流,而同時監(jiān)視產(chǎn)生的結(jié)果,因此促進了持續(xù)改進。
7.以流程為中心的體系結(jié)構(gòu)。現(xiàn)有的體系結(jié)構(gòu)模型和實踐往往是以程序為中心的。應(yīng)用程序是為了程序員的便利而開發(fā)的。通常,流程信息在組件之間傳播。應(yīng)用程序很像一個黑匣子,沒有粒度可用于外部。重用需要復(fù)制代碼、合并共享庫或繼承對象。在以流程為中心的體系結(jié)構(gòu)中,應(yīng)用程序是為過程開發(fā)的。流程可以分解成一系列的步驟,每一個步驟表示一個業(yè)務(wù)服務(wù)。實際上,每個過程服務(wù)或組件功能都相當(dāng)于一個子應(yīng)用程序。將這些子應(yīng)用程序鏈接在一起可以創(chuàng)建能夠滿足業(yè)務(wù)需求的流程流。這種粒度允許利用和重用整個組織中的子應(yīng)用程序。
三、SOA的實現(xiàn)技術(shù)
遵循SOA自底向上劃分組件層和服務(wù)層的原則,構(gòu)建SOA系統(tǒng)的基本過程是:(1)進行系統(tǒng)業(yè)務(wù)功能邏輯的建模;(2)將其轉(zhuǎn)換為面向門戶組件的整合實現(xiàn);(3)進行Web服務(wù)裝配,完成服務(wù)的復(fù)用和消息傳遞。
下面結(jié)合企業(yè)門戶的特點,討論實現(xiàn)SOA的關(guān)鍵技術(shù)。
業(yè)務(wù)服務(wù)邏輯建模:沿用SOA的邏輯建模思路,SOA的業(yè)務(wù)服務(wù)邏輯模型應(yīng)是一組松散耦合的、基于消息可交互的服務(wù)模型?;谶@種高于對象層的分布式Web服務(wù)集成模式,業(yè)務(wù)邏輯功能被構(gòu)建為單獨的Web服務(wù)及其他服務(wù)組件,如資源整合服務(wù)、認證服務(wù)、核心業(yè)務(wù)服務(wù)及其他可復(fù)用服務(wù)等。本文架構(gòu)中,服務(wù)用于定義和支持業(yè)務(wù)流程,可以提供眾多功能,包括數(shù)據(jù)訪問、基礎(chǔ)架構(gòu)和業(yè)務(wù)功能。同時,定制服務(wù)的關(guān)鍵是理解業(yè)務(wù)流程。流程定義了與其他業(yè)務(wù)進行交互操作的邏輯和方法,可以通過工作流引擎實現(xiàn)這一定制和控制過程。此外,模型還包括構(gòu)建服務(wù)所需的開發(fā)建模工具、管理控制平臺、適配器以及底層支撐的開發(fā)包。
建模過程中,服務(wù)需要管理所有的資源,即將服務(wù)提供者作為管理器創(chuàng)建服務(wù)實例,同時需要考慮業(yè)務(wù)服務(wù)是同步的、異步的還是兩者兼顧。構(gòu)建一個Web服務(wù)并不是簡單呈現(xiàn)API或靜態(tài)組件,Web服務(wù)實現(xiàn)的功能可以是響應(yīng)用戶一個簡單的請求,也可以是完成復(fù)雜的業(yè)務(wù)流程,通信是無狀態(tài)的。利用WSDL文件可以動態(tài)描述Web服務(wù),這需要結(jié)合企業(yè)門戶的業(yè)務(wù)服務(wù)的邏輯和對外發(fā)布的應(yīng)用接口具體定義。服務(wù)描述重點包括服務(wù)、調(diào)用操作的消息、構(gòu)造消息的細節(jié)以及向何處發(fā)送處理細節(jié)的消息,使得API發(fā)生改變時,系統(tǒng)其他組件在運行時可以自動調(diào)整,要求表現(xiàn)與邏輯分離以實現(xiàn)這一動態(tài)任務(wù)。
EJB提供了對服務(wù)的安全訪問和并發(fā)處理事務(wù)的支持,可以基于EJB構(gòu)建SOA中的一些服務(wù),通過把Web服務(wù)模型化為EJB端點,使服務(wù)具有可伸縮性,并且可以增強可靠性。
參考文獻:
[1]王兵,基于面向服務(wù)架構(gòu)的應(yīng)用系統(tǒng)開發(fā)與集成研究[D].四川:四川大學(xué),2005.
[2]呂希艷,基于SOA的企業(yè)信息資源整合[J].中國科技論壇,2006(3).