使用多重面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architectures,SOA)可以消除企業(yè)系統(tǒng)之間的差異。Judith M. Myerson 向您展示了四種場(chǎng)景,它們將 Web 服務(wù)結(jié)合到復(fù)合應(yīng)用程序中,該應(yīng)用程序由獨(dú)立 SOA、多重 SOA、具備多重 EAI 應(yīng)用程序的獨(dú)立 SOA 以及具備 EAI 應(yīng)用程序的多重 SOA 復(fù)合而成。然而仍舊要考慮各種權(quán)衡,確定系統(tǒng)可以攜帶的 SOA 的最大數(shù)目可以使您避免 SOA 的超載。
引言
在服務(wù)級(jí)協(xié)議(Service-Level Agreements,SLA)系列的第三篇文章(“在 Web 服務(wù)上下文中使用 SLA”,請(qǐng)見(jiàn)參考資料)中,我談?wù)摿?Web 服務(wù)是如何作為 EAI 限制來(lái)補(bǔ)充 Enterprise Application Integration(EAI)應(yīng)用程序的。我進(jìn)一步討論了使用 SOA 來(lái)消除企業(yè)系統(tǒng)之間的差異的場(chǎng)景,向您展示了如何執(zhí)行獲取 EAI 應(yīng)用程序所有權(quán)的 Web 服務(wù)的業(yè)務(wù)邏輯。我向您展示了如何復(fù)用以數(shù)據(jù)為中心的 Web 服務(wù)以及來(lái)源于一個(gè)或更多 SOA 的業(yè)務(wù)邏輯并將它們結(jié)合進(jìn)復(fù)合應(yīng)用程序中。
EAI 差異
我重在研究 EAI 解決方案的三個(gè)主要的局限:所有權(quán)、有限的集成以及缺少開(kāi)放行業(yè)標(biāo)準(zhǔn)。在公司的 EAI 應(yīng)用程序之間存在信息傳遞的差異,例如:
- 客戶(hù)關(guān)系管理(Customer relationship management,CRM)
- 投資關(guān)系管理(Investor relationship management,IRM)
- 供應(yīng)鏈管理(Supply-chain management,SCM)
- 企業(yè)資源規(guī)劃(Enterprise resource planning,ERP)
EAI 應(yīng)用程序的所有權(quán)性質(zhì)受到公司應(yīng)用于 EAI 應(yīng)用程序中的業(yè)務(wù)流程類(lèi)型和公司經(jīng)營(yíng)的業(yè)務(wù)類(lèi)型的限制。EAI 解決方案限制了使用外部應(yīng)用程序來(lái)集成 EAI 系統(tǒng)的范圍。對(duì)于在 EAI 系統(tǒng)及外部應(yīng)用程序之間映射業(yè)務(wù)邏輯的計(jì)劃的定制是浪費(fèi)時(shí)間并且代價(jià)昂貴的。
實(shí)現(xiàn) EAI 的標(biāo)準(zhǔn)事實(shí)上是不存在的。沒(méi)有標(biāo)準(zhǔn),在互聯(lián)網(wǎng)上整合多商家的 EAI 應(yīng)用程序是非常困難的。與 EAI 不同,Web 服務(wù)提供了廣泛的標(biāo)準(zhǔn),為應(yīng)用程序與外部的服務(wù)提供者之間搭建了橋梁。然而,EAI 比 Web 服務(wù)更加安全,IT 行業(yè)聯(lián)合起來(lái)創(chuàng)建并改善了現(xiàn)有的標(biāo)準(zhǔn)(WS-Security)為 Web 服務(wù)提供了更加安全的機(jī)制。
消除差異
各種窗體的中間件技術(shù)已經(jīng)被用于消除 EAI 差異。Web 服務(wù)是使得 EAI 應(yīng)用程序能夠互相傳遞信息的最好的中間件。它們提供了開(kāi)放的行業(yè)標(biāo)準(zhǔn),為獨(dú)立平臺(tái)的 EAI 系統(tǒng)搭建了橋梁。一些附加的 EAI 應(yīng)用程序承擔(dān)了開(kāi)放行業(yè)業(yè)務(wù)流程的提供者或客戶(hù)的職責(zé),EAI 應(yīng)用程序不能在封閉環(huán)境下采用該流程。
事實(shí)上,在獨(dú)立 SOA 中不是所有 Web 服務(wù)都可用。您可以將 Web 服務(wù)與基本功能相結(jié)合形成復(fù)合的 Web 服務(wù)應(yīng)用程序。相反,您可以將這些應(yīng)用程序同其它的 Web 服務(wù)或其它 SOA 中的復(fù)合業(yè)務(wù)相結(jié)合來(lái)建立新的或更高級(jí)的業(yè)務(wù)服務(wù)。這意味著您可以使用多重 SOA 來(lái)消除 EAI 應(yīng)用程序之間的或系統(tǒng)之間的差異。
編制 Web 服務(wù)
在 SOA 中,使用一系列高級(jí)業(yè)務(wù)服務(wù)的業(yè)務(wù)流程來(lái)編制多重 Web 服務(wù)的執(zhí)行。以數(shù)據(jù)為中心的 Web 服務(wù)很少自我執(zhí)行。編制的目標(biāo)是使得 Web 服務(wù)能夠消除 EAI 的差異,以便具有所有權(quán)的 EAI 應(yīng)用程序可以通過(guò)整合的集線(xiàn)器來(lái)互相交流。
在編制過(guò)程中,您可以擴(kuò)大或縮小編制的范圍和性質(zhì),通過(guò)復(fù)用代碼來(lái)改變復(fù)合應(yīng)用程序的業(yè)務(wù)流程邏輯。基于個(gè)人提出的功能,SOA 中的 Web 服務(wù)可被復(fù)用并結(jié)合到高級(jí)服務(wù)的復(fù)合應(yīng)用程序中來(lái)創(chuàng)建新的業(yè)務(wù)服務(wù),反之,該業(yè)務(wù)服務(wù)可被復(fù)用并結(jié)合到另一個(gè) SOA 的業(yè)務(wù)服務(wù)的高級(jí)復(fù)合應(yīng)用程序中。
避免錯(cuò)誤
我想到了當(dāng)開(kāi)發(fā) Web 服務(wù)或?qū)?Web 服務(wù)結(jié)合進(jìn)復(fù)合應(yīng)用程序時(shí)可能發(fā)生的四個(gè)錯(cuò)誤,您應(yīng)當(dāng)避免:
- 簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(Simple Object Access Protocol,SOAP)的開(kāi)銷(xiāo)
- SOAP 互用性問(wèn)題
- 緊密結(jié)合的業(yè)務(wù)服務(wù)
- 處理繁重事務(wù)的環(huán)境。
在每個(gè)地方都建立 Web 服務(wù)并且將它們結(jié)合到所有 Web 服務(wù)的應(yīng)用程序中是不太實(shí)際的,即使 Web 服務(wù)是基于日益擴(kuò)大的開(kāi)放行業(yè)標(biāo)準(zhǔn)的(EAI 應(yīng)用程序缺少這些標(biāo)準(zhǔn))。當(dāng)處理 Web 服務(wù)時(shí)企業(yè)可能會(huì)產(chǎn)生大量的 SOAP 開(kāi)銷(xiāo),這樣就減慢了完成業(yè)務(wù)流程的速度。
企業(yè)也可能遇到 Web 服務(wù)中的 SOAP 互用性的問(wèn)題。雖然已經(jīng)完成了大量的工作,使 SOAP 的互用性得到了提高,但是還沒(méi)有實(shí)現(xiàn)行業(yè)級(jí)的完全互用。
一些具備所有權(quán)的 EAI 應(yīng)用程序可以在緊耦合的環(huán)境下很好地執(zhí)行某些業(yè)務(wù)功能,在復(fù)合應(yīng)用程序中的 Web 服務(wù)不能在松耦合的環(huán)境下很好地執(zhí)行。一個(gè)緊耦合的業(yè)務(wù)服務(wù)的實(shí)例是客戶(hù)將卡插入讀卡機(jī)中,確認(rèn)卡的金額,指定取出的現(xiàn)金并收到自動(dòng)地從他的帳戶(hù)中取款的確認(rèn)。
在短時(shí)間內(nèi)一些 Web 服務(wù)連同其它的 Web 服務(wù)(包括長(zhǎng)期運(yùn)行的基于一套復(fù)合業(yè)務(wù)規(guī)則的應(yīng)用程序)一起完成了業(yè)務(wù)流程,在整合這樣的 Web 服務(wù)的過(guò)程中您可能會(huì)發(fā)現(xiàn)問(wèn)題。Web 服務(wù)非常適合于短時(shí)間運(yùn)行的應(yīng)用程序,而不適合于處理繁重事務(wù)的環(huán)境,因?yàn)樵谶@樣的環(huán)境下需要很長(zhǎng)時(shí)間才能完成業(yè)務(wù)流程。
獨(dú)立的 SOA 場(chǎng)景
現(xiàn)在我們來(lái)看一下您怎樣才能使 Web 服務(wù)同基本功能相結(jié)合來(lái)構(gòu)建復(fù)合的 Web 服務(wù)應(yīng)用程序,假設(shè)裝載的性能是令人滿(mǎn)意的。考慮下面的 Web 服務(wù),每個(gè)都來(lái)自于完全互用的系統(tǒng):
- 零售商的標(biāo)識(shí)符
- 零售商的名稱(chēng)
- 零售商的地址
- 定購(gòu)的數(shù)量
- 價(jià)格
- 稅務(wù)
如圖 1 所示,前四種 Web 服務(wù)僅包含基本功能的數(shù)據(jù),而最后兩個(gè)主要使用業(yè)務(wù)邏輯來(lái)達(dá)到向零售商發(fā)送帳單的目的。我將所有的都結(jié)合到復(fù)合的具備帳單功能的應(yīng)用程序中,也就是在結(jié)帳應(yīng)用程序中進(jìn)行處理。
圖 1. 獨(dú)立 SOA 的場(chǎng)景
我使用零售商標(biāo)識(shí)符的 Web 服務(wù)來(lái)啟動(dòng)流程,該服務(wù)向零售商名稱(chēng)的 Web 服務(wù)發(fā)出請(qǐng)求來(lái)獲得與零售商標(biāo)識(shí)符相匹配的名稱(chēng)。當(dāng)確認(rèn)信息的時(shí)候,零售商名稱(chēng)的 Web 服務(wù)與零售商地址的 Web 服務(wù)、定購(gòu)數(shù)量的 Web 服務(wù)、價(jià)格的 Web 服務(wù)和稅務(wù)的 Web 服務(wù)相結(jié)合來(lái)建立具備零售商帳單功能的復(fù)合應(yīng)用程序。隨后,在基于服務(wù)的業(yè)務(wù)邏輯的結(jié)帳應(yīng)用程序中處理了該復(fù)合應(yīng)用程序。
多重 SOA 的場(chǎng)景
我們假設(shè)小公司缺乏內(nèi)部的 Tax Service 部門(mén)。對(duì)于更新、維護(hù)的業(yè)務(wù)有外來(lái)的稅務(wù)服務(wù)并且管理外來(lái)稅務(wù)的 Web 服務(wù)。對(duì)于該公司,我將第一個(gè)場(chǎng)景中的前五種 Web 服務(wù)結(jié)合進(jìn)具有帳單功能的復(fù)合應(yīng)用程序中,同時(shí)假設(shè)裝載流程的性能是令人滿(mǎn)意的。
我們假設(shè) Web 服務(wù)發(fā)出了請(qǐng)求——將第二個(gè) SOA 中外來(lái)的 Web 服務(wù)與第一個(gè) SOA 中的復(fù)合應(yīng)用程序相結(jié)合。如果接受并實(shí)現(xiàn)了該請(qǐng)求,那么在基于價(jià)格和稅務(wù)服務(wù)的業(yè)務(wù)邏輯的結(jié)帳應(yīng)用程序中將處理高級(jí)的復(fù)合應(yīng)用程序。如圖 2 所示,第二個(gè) SOA 與第一個(gè) SOA 交疊,該交疊的部分可能包含 SOA 中普遍的 Web 服務(wù)和非 Web 服務(wù)。
圖 2. 多重 SOA 的場(chǎng)景
獨(dú)立 SOA 調(diào)用 EAI 應(yīng)用程序
重在關(guān)聯(lián)、鏈?zhǔn)焦芾恚Y源規(guī)劃的 Web 服務(wù)有不同的整合規(guī)則(或虛擬的整合集線(xiàn)器),即使它們?cè)谡掀髽I(yè)之間的應(yīng)用程序的過(guò)程中可以互相合作。相反,EAI 系統(tǒng)的組件可以通過(guò)中間件技術(shù)的整合集線(xiàn)器來(lái)互相傳遞信息使得 EAI 應(yīng)用程序能夠同遺留系統(tǒng)、數(shù)據(jù)庫(kù)、Web 服務(wù)及非 Web 服務(wù)進(jìn)行交互。
我們將 SOA 作為實(shí)現(xiàn)多重 EAI 應(yīng)用程序(在防火墻內(nèi)部及防火墻外部)的業(yè)務(wù)功能的主要的中間件技術(shù)。為了避免 SOAP 開(kāi)銷(xiāo),限制 Web 服務(wù)的數(shù)量。同時(shí),避免降低裝載由 Web 服務(wù)調(diào)用的 EAI 應(yīng)用程序的速度。
在獨(dú)立 SOA 調(diào)用多重 EAI 應(yīng)用程序的場(chǎng)景中,零售商標(biāo)識(shí)符的 Web 服務(wù)首先調(diào)用了 Retail Management System(請(qǐng)見(jiàn)圖 3)。在成功地裝載了所應(yīng)調(diào)用的應(yīng)用程序之后,Web 服務(wù)發(fā)出了將標(biāo)識(shí)符與名稱(chēng)及地址相鏈接的請(qǐng)求。
圖 3. 調(diào)用多重 EAI 應(yīng)用程序的獨(dú)立 SOA
然后 EAI 應(yīng)用程序在數(shù)據(jù)庫(kù)中搜索請(qǐng)求的項(xiàng)目。如果找到了名稱(chēng)及地址,那么它就向 SOA 發(fā)出信息來(lái)將定購(gòu)數(shù)量及價(jià)格的 Web 服務(wù)添加到復(fù)合應(yīng)用程序中。同時(shí)卸載 Retail Management System 來(lái)為今后調(diào)用其它 EAI 應(yīng)用程序提供空間。
接下來(lái),復(fù)合應(yīng)用程序調(diào)用了 Finance Management System,該系統(tǒng)維護(hù) Tax Service 流程規(guī)則的數(shù)據(jù)庫(kù)。在成功地裝載了該 EAI 應(yīng)用程序之后,定購(gòu)的數(shù)量及價(jià)格的應(yīng)用程序與其相連。高級(jí)復(fù)合帳單功能就形成了。同時(shí)卸載 Finance Management System。
多重 SOA 調(diào)用 EAI 應(yīng)用程序
現(xiàn)在,我們假設(shè)需要兩個(gè) SOA 連接兩個(gè) EAI 應(yīng)用程序。在該場(chǎng)景中,我將 Order Quantity 和 Order Description Web Services 結(jié)合到第一個(gè) SOA 中。我重復(fù)了第三個(gè)場(chǎng)景中的流程,調(diào)用并裝載了零售商標(biāo)識(shí)符的 Web 服務(wù),并且向 Retail Management System(請(qǐng)見(jiàn)圖 4)發(fā)出搜索請(qǐng)求。在成功搜索完之后,該 EAI 應(yīng)用程序向 SOA 發(fā)出信息來(lái)將其添加到復(fù)合應(yīng)用程序中。
圖 4. 多重 SOA 調(diào)用多重 EAI 應(yīng)用程序
接下來(lái),復(fù)合應(yīng)用程序調(diào)用并向 Order Management System 發(fā)出請(qǐng)求來(lái)搜索 Pricing Policies 數(shù)據(jù)庫(kù)。在成功搜索之后,Order Management System 將其本身與第二個(gè) SOA 中的稅務(wù) Web 服務(wù)相連接。然后,稅務(wù) Web 服務(wù)被并入了第一個(gè) SOA 的復(fù)合帳單功能中。所有裝載及卸載的流程都成功地完成了,沒(méi)有出現(xiàn) SOAP 開(kāi)銷(xiāo)問(wèn)題。
有多少 SOA?
您用于鏈接 EAI 應(yīng)用程序的可用的 SOA 的數(shù)量依賴(lài)于對(duì)項(xiàng)目的復(fù)雜性、互用性問(wèn)題、業(yè)務(wù)流程及裝載性能問(wèn)題的權(quán)衡。同您避免 SOAP 的開(kāi)銷(xiāo)一樣,您需確保在整個(gè)開(kāi)發(fā)周期中不會(huì)出現(xiàn) SOA 超載問(wèn)題。您應(yīng)當(dāng)在開(kāi)發(fā)的每個(gè)階段都進(jìn)行超載測(cè)試。
結(jié)束語(yǔ)
使用 SOA 來(lái)消除企業(yè)系統(tǒng)之間的差異需要提前規(guī)劃,設(shè)置需開(kāi)發(fā)的 SOA 的數(shù)量限制。您應(yīng)當(dāng)同業(yè)務(wù)分析師及 IT 專(zhuān)家小組對(duì)于各種性能問(wèn)題進(jìn)行交流。您會(huì)發(fā)現(xiàn)使用 SOA 來(lái)消除 EAI 差異這種方法使您開(kāi)發(fā)應(yīng)用程序的工作變得更加容易。您可以將來(lái)源于一個(gè)或更多 SOA 的 Web 服務(wù)的業(yè)務(wù)邏輯結(jié)合成一個(gè)或更多的復(fù)合應(yīng)用程序。分析師將會(huì)發(fā)現(xiàn)消除差異使得他們?cè)O(shè)計(jì)及分析 SOA 系統(tǒng)的工作變得更加容易。他們可以確定結(jié)合哪些 Web 服務(wù)能夠達(dá)到最佳的性能,并且不會(huì)發(fā)生 SOAP 超載的問(wèn)題。