企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)體系結(jié)構(gòu)模式支持在面向服務(wù)的體系結(jié)構(gòu) (SOA) 中虛擬化服務(wù)交互并對其進(jìn)行管理。它使得交互可以在服務(wù)提供者和服務(wù)請求者之間進(jìn)行,并且可以使用各種中間件技術(shù)和編程模型加以實(shí)現(xiàn)。它對本系列的前一篇文章中介紹的 SOA 編程模型進(jìn)行了擴(kuò)展。
引言
SOA 提供了一種靈活的、可擴(kuò)展且可組合的方法來重用和擴(kuò)展現(xiàn)有應(yīng)用程序以及構(gòu)造新的應(yīng)用程序。服務(wù)聲明它們實(shí)現(xiàn)的或期望其他服務(wù)實(shí)現(xiàn)的接口,并且聲明控制潛在伙伴交互的策略,從而公布各種功能(包括提供的和請求的)。Web 服務(wù)描述語言(Web Services Description Language,WSDL)和其他 Web 服務(wù)標(biāo)準(zhǔn)(如 WS-Policy)提供了用于這些聲明的詞匯。(請參閱參考資料,以獲得指向 WSDL Version 2.0 Part 0: Primer 的鏈接。)
業(yè)務(wù)功能的虛擬化(SOA 的一個主要目標(biāo))是通過將服務(wù)的定義和使用與服務(wù)的實(shí)現(xiàn)分離開來而實(shí)現(xiàn)的。我們可以使用各種技術(shù)實(shí)現(xiàn)服務(wù),這些技術(shù)包括 IBM WebSphere? MQ、IBM CICS? 或 IBM IMS?、Java? 2 Platform Enterprise Edition (J2EE) Enterprise JavaBeans (EJB)、Java 類、IBM DB2? 查詢、Java 消息服務(wù) (JMS) 或 Microsoft? .NET。服務(wù)請求者將請求發(fā)送到提供其所需功能的服務(wù)提供者,而不必考慮它如何實(shí)現(xiàn)。
ESB 是一種體系結(jié)構(gòu)模式,支持虛擬化通信參與方之間的服務(wù)交互并對其進(jìn)行管理。它提供服務(wù)提供者和請求者之間的連接,即使它們并非完全匹配,也能夠使它們進(jìn)行交互。此模式可以使用各種中間件技術(shù)和編程模型實(shí)現(xiàn)。
本文將定義 ESB 模式和它在 SOA 內(nèi)的角色。后續(xù)文章將詳細(xì)描述其使用場景、使用目前的技術(shù)實(shí)現(xiàn) ESB 模式的方法,以及 ESB 技術(shù)未來的發(fā)展方向。
什么是 ESB?
在 ESB 模式中,服務(wù)交互的參與方并不直接交互,而是通過一個總線交互,該總線提供虛擬化和管理功能來實(shí)現(xiàn)和擴(kuò)展 SOA 的核心定義。IBM ESB 模式提供以下幾方面的虛擬化:
-
位置和標(biāo)識:參與方不需要知道其他參與方的位置或標(biāo)識。例如,請求者不需要知道請求是否可以由某個提供者提供服務(wù)。您可以隨意添加或刪除服務(wù)提供者,而不會帶來任何干擾。
-
交互協(xié)議:參與方不需要采用相同的通信協(xié)議或交互方式。表達(dá)為 SOAP/HTTP 的請求可能由僅理解 Java 遠(yuǎn)程方法調(diào)用 (RMI) 的提供者提供服務(wù)。
-
接口:請求者和提供者不需要就公共接口達(dá)成協(xié)議。ESB 可以通過將請求消息轉(zhuǎn)換為提供者所期望的格式來處理此類差異。
-
(交互)服務(wù)質(zhì)量 (QoS):參與方聲明其 QoS 要求,包括性能和可靠性、請求的授權(quán)、消息內(nèi)容的加密/解密、服務(wù)交互的自動審核以及如何對請求進(jìn)行路由(如根據(jù)工作負(fù)載分布標(biāo)準(zhǔn)將請求路由到可用的實(shí)現(xiàn))。描述請求者和提供者的 QoS 要求和功能的策略可以由服務(wù)自己實(shí)現(xiàn)或者由進(jìn)行不匹配補(bǔ)償?shù)?ESB 實(shí)現(xiàn)。
因此 ESB 模式使請求者不用了解服務(wù)提供者的物理實(shí)現(xiàn)——從應(yīng)用程序開發(fā)人員和部署人員的角度來看均是如此??偩€負(fù)責(zé)將請求交付給提供所需功能和 QoS 的服務(wù)提供者。提供者接收他們要響應(yīng)的請求,而不知道消息的來源。ESB 本身對使用它的服務(wù)請求者和提供者均不可見。應(yīng)用程序邏輯可以使用各種編程模型和技術(shù)調(diào)用或交付服務(wù),而無需考慮是直接連接還是通過 ESB 傳遞的。連接到 ESB 是部署決策;應(yīng)用程序源代碼不會受到影響。
ESB 支持許多交互類型,包括單向、請求/響應(yīng)、異步、同步和發(fā)布/訂閱。它還支持復(fù)雜事件處理(在復(fù)雜事件處理中,可能會觀測到一系列事件),以產(chǎn)生一個事件作為該系列中的關(guān)系的結(jié)果。
圖 1
對基本 ESB 模式進(jìn)行了描述。消息流過將各個通信參與方相互連接在一起的總線。某些參與方會調(diào)用其他參與方提供的服務(wù);而其他參與方則會向感興趣的使用者發(fā)布信息。端點(diǎn)與 ESB 交互的位置稱為服務(wù)交互點(diǎn) (SIP)。例如,SIP 可以是 Web 服務(wù)端點(diǎn)、WebSphere MQ 隊列或 RMI 遠(yuǎn)程對象的代理。服務(wù)注冊表將捕獲描述以下內(nèi)容的元數(shù)據(jù):SIP 的要求和功能(例如,提供或需要的接口)、它們希望與其他 SIP 的交互方式(例如,同步或異步,通過 HTTP 或 JMS)、它們的 QoS 要求(例如,首選的安全、可靠交互)以及支持與其他 SIP 交互的其他信息(例如,語義注釋)。
圖 1. 基本 ESB 模式
將總線插入?yún)⑴c方之間,提供了將它們的交互通過稱為中介 的構(gòu)造進(jìn)行協(xié)調(diào)的機(jī)會。中介對請求者和提供者之間動態(tài)傳遞的消息進(jìn)行操作。對于復(fù)雜的交互,可以按順序?qū)⒅薪檫B在一起。中介模式部分討論了實(shí)現(xiàn)這些虛擬化、QoS 和管理概念的常用中介模式。
ESB 模式為 SOA 實(shí)現(xiàn)提供了靈活且易于管理的方法??偩€透明地插入端點(diǎn)之間,可以提高服務(wù)質(zhì)量,可以促進(jìn)請求者和提供者間的交互(而不受協(xié)議、交互模式或服務(wù)功能不匹配的影響),還可以支持監(jiān)視和管理。
SOA 用戶角色及其任務(wù)
通過研究創(chuàng)建和管理 SOA 解決方案的用戶的角色及任務(wù),可以進(jìn)一步深入了解 ESB 模式。ESB 工具和運(yùn)行時將 SOA 解決方案的生命周期劃分為四個階段:
-
發(fā)現(xiàn)與描述:對可以在整個 ESB 中進(jìn)行互連的 SIP 進(jìn)行標(biāo)識和描述。這包括創(chuàng)建新的服務(wù)、發(fā)現(xiàn)現(xiàn)有服務(wù)、以及描述其接口、要求和功能。
-
建模與構(gòu)建:通過新建的或現(xiàn)有的中介進(jìn)行 SIP 互連,以描述解決方案的端到端交互。
-
配置與部署:針對特定的運(yùn)行時拓?fù)渑渲媒鉀Q方案的抽象聲明,并對其進(jìn)行部署,同時創(chuàng)建必要的運(yùn)行時構(gòu)件。
-
監(jiān)視與管理:通過 SIP 和中介的行為監(jiān)視和管理解決方案。此階段將使用 ESB 運(yùn)行時中的檢測和控制點(diǎn)、以及觀測和響應(yīng)消息流的中介。
對于 ESB 中間件,最重要的 SOA 解決方案開發(fā)角色是集成開發(fā)人員和解決方案管理員,但其中也涉及到業(yè)務(wù)分析人員、解決方案架構(gòu)師、實(shí)現(xiàn)人員、適配器開發(fā)人員和操作人員。(這些角色都是概念性的;一個人可以擔(dān)任其中的多個角色。)圖 2 顯示了這些角色交互的方式。
業(yè)務(wù)分析人員確定業(yè)務(wù)需求,并檢查業(yè)務(wù)流程。他們將概括出解決方案的目標(biāo)、涉及的業(yè)務(wù)流程、監(jiān)視解決方案的運(yùn)行狀況和狀態(tài)的關(guān)鍵指標(biāo),以及 IT 系統(tǒng)需要提供的業(yè)務(wù)服務(wù)的類型。
解決方案架構(gòu)師確定哪些業(yè)務(wù)需求可以通過對現(xiàn)有 IT 資產(chǎn)進(jìn)行重用、修改或組合得到滿足,哪些需要編寫或購買新的 IT 資產(chǎn)。他們定義 IT 資產(chǎn)間的交互,包括消息交換的內(nèi)容。
開發(fā)工作在三個角色中分配。實(shí)現(xiàn)人員編寫新的應(yīng)用程序代碼,這些代碼將通過服務(wù)接口調(diào)用。適配器開發(fā)人員構(gòu)建包裝現(xiàn)有或新采購的應(yīng)用程序和軟件包的服務(wù),從而為其他服務(wù)提供可訪問性。集成開發(fā)人員使用 ESB 的相關(guān)工具和技術(shù)構(gòu)建邏輯,以控制請求在這些服務(wù)間路由的方式。
圖 2. 用戶角色
解決方案管理員部署新的 IT 資產(chǎn)并將其服務(wù)定義導(dǎo)入到服務(wù)注冊表中,從而使新的 IT 資產(chǎn)可用。當(dāng)解決方案就緒后,操作人員將監(jiān)視其執(zhí)行,根據(jù)需要啟動和停止 IT 系統(tǒng),并給解決方案管理員提供建議(后者可能將據(jù)此調(diào)整解決方案配置)。
ESB 模式
集成開發(fā)人員和解決方案管理員會使用一組模式對 SOA 解決方案進(jìn)行設(shè)計和部署。
圖 3. 基本 ESB 模式的元素
基本 ESB 模式將應(yīng)用程序組件抽象為一個服務(wù)集,這些服務(wù)通過總線進(jìn)行交互(而不是通過直接的點(diǎn)到點(diǎn)通信交互)。某個給定的服務(wù)既可以是提供者,也可以是請求者,或者同時兼有兩個角色。任何 SOA 實(shí)現(xiàn)都會支持基本虛擬化,允許在不影響依賴請求者的情況下替換等效提供者實(shí)現(xiàn)。ESB 模式通過其對請求者/提供者交互的顯式管理提高了此基本 SOA 功能。只要能提供與請求者所需的功能相似的功能,且 ESB 能對其進(jìn)行協(xié)調(diào),任何提供者都可以由另一個提供者替代。
ESB 提供了交互點(diǎn),服務(wù)可以在此將消息放到總線上或從總線取走。它會對動態(tài)消息應(yīng)用中介,并保證這些托管交互的 QoS。
從 ESB 的角度來看,所有的服務(wù)交互端點(diǎn)都是類似的,因?yàn)樗鼈兌及l(fā)送或處理請求/事件;它們都要求特定的 QoS;它們可能都需要交互協(xié)助。ESB 模式允許集成開發(fā)人員以與處理新業(yè)務(wù)邏輯、流程編排組件或外部 Web 服務(wù)同樣(面向服務(wù))的方式對待與用戶交互的請求者或提供者。
用于構(gòu)建基于 ESB 的解決方案的模式分為以下幾類:
-
交互模式:允許服務(wù)交互點(diǎn)將消息發(fā)送到總線或從總線接收消息。
-
中介模式:允許對消息交換進(jìn)行操作。
-
部署模式:支持將解決方案部署到聯(lián)合基礎(chǔ)設(shè)施中。
交互模式
ESB 允許端點(diǎn)通過總線以其本機(jī)交互模式進(jìn)行交互。它支持各種端點(diǎn)協(xié)議和交互方式。交互模式的例子包括:
-
請求/響應(yīng):處理端點(diǎn)間的請求/響應(yīng)方式的交互。此 ESB 基于消息傳遞模型,因此由兩個相關(guān)的單向消息流對請求/響應(yīng)交互進(jìn)行處理,一個用于請求,一個用于響應(yīng)。
-
請求/多響應(yīng):上述類型的變體,可以發(fā)送多個響應(yīng)。
-
事件傳播:事件可以匿名分發(fā)到由 ESB 管理的相關(guān)方列表。服務(wù)可以將自身添加到該列表中。
圖 4. 交互模式
中介模式
中介模式處理總線上的動態(tài)消息(請求或事件)。由請求者發(fā)出的消息會轉(zhuǎn)換為稍微有些不兼容的提供者(從潛在的端點(diǎn)集中選擇)能夠理解的消息。
這些中介操作單向消息而不是請求/響應(yīng)對,因?yàn)?ESB 將交互模式放在中介模式上。
圖 5. 中介模式
中介有多種基本模式;更為復(fù)雜的模式可以通過組合簡單模式構(gòu)建:
-
協(xié)議變換:允許服務(wù)請求者使用各種交互協(xié)議或 API(如 SOAP/HTTP、JMS 和 MQ Integrator——MQI)發(fā)送其消息。將請求代碼轉(zhuǎn)換為目標(biāo)服務(wù)提供者的格式。可以應(yīng)用到交互的請求者端或提供者端,或同時應(yīng)用到兩端或兩者之間的任何位置。
-
轉(zhuǎn)換:將消息的有效負(fù)載(內(nèi)容)從請求者的模式轉(zhuǎn)換為提供者的模式??梢园?、反包封或加密。
-
充實(shí):通過添加來自外部數(shù)據(jù)源的信息(如由中介定義的自定義參數(shù)或者來自數(shù)據(jù)庫查詢的自定義參數(shù))來增加消息的有效負(fù)載。
-
路由:更改消息的路由,可從支持請求者的意圖的服務(wù)提供者中選擇。選擇標(biāo)準(zhǔn)中可以包含消息內(nèi)容和上下文、以及目標(biāo)服務(wù)提供者的功能。
-
分發(fā):將消息分發(fā)到一組相關(guān)方,通常由訂閱者的相關(guān)概要驅(qū)動。
-
監(jiān)視:在信息通過中介時觀測其是否發(fā)生改變??梢杂糜诒O(jiān)視服務(wù)水平;幫助確定問題或?qū)τ脩暨M(jìn)行后續(xù)支付使用的貨幣單位;或記錄企業(yè)級事件(如價值超過一定數(shù)額的購買行為)。還可以用于將消息記入日志,以供審核和后續(xù)數(shù)據(jù)挖掘之用。
-
相關(guān):從消息或事件流中派生復(fù)雜事件。包括模式標(biāo)識規(guī)則和響應(yīng)模式發(fā)現(xiàn)的規(guī)則(例如,通過生成派生自觸發(fā)事件流的內(nèi)容的復(fù)雜事件)。
可以在解決方案中顯式地配置中介。例如,集成開發(fā)人員可以配置一個 enrich 中介來修改消息內(nèi)容。解決方案管理員可以配置一個 route 中介來允許其將某個服務(wù)提供者切換到脫機(jī)狀態(tài)。
其他中介由 ESB 設(shè)置,以滿足服務(wù)請求者和服務(wù)提供者的 QoS 要求。例如,如果服務(wù)提供者的安全策略聲明要求使用加密消息,則 ESB 可以自動配置一個 encryption 中介。
策略同樣也是服務(wù)的屬性,解決方案管理員可以為交互(或交互集)設(shè)置策略。例如,為了將要發(fā)送到特定外部提供者或交易值超過 1 百萬美元的所有消息記錄到日志中。ESB 將通過配置中介(在本例中為monitor 中介)來實(shí)現(xiàn)策略。
復(fù)雜模式
圖 6. 復(fù)雜模式
中介模式和交互模式可以進(jìn)行組合,以實(shí)現(xiàn)更為復(fù)雜的模式。
例如,在協(xié)議變換后轉(zhuǎn)換格式可以實(shí)現(xiàn)規(guī)范化適配器 模式,在這種模式中,所有相關(guān)方使用的消息和業(yè)務(wù)對象集都標(biāo)準(zhǔn)化為規(guī)范的格式。規(guī)范化適配器模式將端點(diǎn)的本機(jī)總線附加協(xié)議轉(zhuǎn)換為標(biāo)準(zhǔn)協(xié)議,實(shí)現(xiàn)有效負(fù)載規(guī)范化,并在交付時進(jìn)行這些轉(zhuǎn)換的反向轉(zhuǎn)換。
另一種常見的復(fù)雜中介是轉(zhuǎn)換、記錄和路由 模式。
網(wǎng)關(guān) 模式是一個復(fù)雜的協(xié)議變換變體。它可以合并轉(zhuǎn)換和監(jiān)視中介,以提供加密、日志記錄或?qū)徍说裙δ堋K€可以對一對多關(guān)系中的消息進(jìn)行聚合和反聚合。服務(wù)門戶是此類模式的代表,它為多個服務(wù)提供單一聯(lián)系點(diǎn),并隱藏內(nèi)部服務(wù)的細(xì)節(jié)。
部署模式
解決方案管理可以選擇多種 ESB 拓?fù)洹O旅媸且恍┏R姷睦樱?/p>
-
全局 ESB:所有服務(wù)共享一個名稱空間,每個服務(wù)提供者對環(huán)境(異構(gòu)、集中管理但分布在多個地理位置)中所有服務(wù)請求者均可見。供部門或小型企業(yè)使用,其中,所有服務(wù)都可能在整個組織中應(yīng)用。
-
直接連接的 ESB:公共服務(wù)注冊中心使幾個獨(dú)立的 ESB 安裝中的所有服務(wù)均可見。用于由業(yè)務(wù)部門提供和管理服務(wù)但整個企業(yè)中均可使用這些服務(wù)的場合。
-
代理 ESB:橋接服務(wù)有選擇地將請求者或提供者公開給其他域中的合作伙伴,從而控制多個 ESB 安裝(每個安裝都管理自己的名稱空間)間的共享。ESB 間的服務(wù)交互通過實(shí)現(xiàn)橋接服務(wù)的公共代理進(jìn)行。供各個部門使用,這些部門開發(fā)和管理自己的服務(wù),但共享其中部分服務(wù)或者有選擇地訪問企業(yè)提供的服務(wù)。
-
聯(lián)合 ESB:將多個依賴 ESB 聯(lián)合到其中的主 ESB。服務(wù)使用者和提供者連接到主 ESB 或某個依賴 ESB,以訪問整個網(wǎng)絡(luò)中的服務(wù)。供希望在一個監(jiān)管部門的保護(hù)下聯(lián)合有適度自治權(quán)的部門的組織使用。
圖 7. ESB 部署模式
結(jié)束語
ESB 模式擴(kuò)展了 SOA 的虛擬化功能。可以由標(biāo)準(zhǔn)功能單元組成中介,然后進(jìn)行部署,以幫助不匹配的請求者和提供者進(jìn)行交互。ESB 還提供了用于部署和管理服務(wù)的通用模型。ESB 概念允許根據(jù)用戶角色單獨(dú)進(jìn)行考慮,從而減少了單個工作人員的概念上的負(fù)擔(dān),并改進(jìn)了體系結(jié)構(gòu)的可用性。ESB 的綜合編程模型、組件化工具以及基礎(chǔ)設(shè)施極大地支持了 SOA 原則的提前實(shí)現(xiàn)。