??????現(xiàn)今的業(yè)務(wù)應(yīng)用程序很少完全獨立運行。它們需要彼此連接,以便創(chuàng)建集成解決方案,從而為組織帶來價值。面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)和事件驅(qū)動的體系結(jié)構(gòu)(Event-Driven Architecture,EDA)是處理復(fù)雜集成挑戰(zhàn)的兩個不同范例。組織如何選擇更好的方法來滿足其需求呢?實際上他們并不必選擇:企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)允許同時實現(xiàn) SOA 和 EDA 概念。
引言
??????為了適應(yīng)市場變化,各個組織都傾向于將重點放在靈活性和響應(yīng)能力上。IT 挑戰(zhàn)實際上通常使用恰當(dāng)?shù)捏w系結(jié)構(gòu)和技術(shù)來支持此業(yè)務(wù)遠(yuǎn)景。早期的活動是為了將獨立應(yīng)用程序拆分為可調(diào)用的子例程,但遠(yuǎn)程對象調(diào)用和消息傳遞處理的發(fā)展改變了這一點。
??????而在最近,增加對組織中現(xiàn)有資產(chǎn)的重用(可反過來提高投資回報)和集成異類應(yīng)用程序以形成一致業(yè)務(wù)解決方案開始變得非常關(guān)鍵了。而這促進(jìn)了 SOA 和 EDA 的廣泛采用。這兩個不同的設(shè)計范例均以最大化獨立于應(yīng)用程序的服務(wù)(可提供 IT 適應(yīng)能力和效率)的重用為目標(biāo)。但構(gòu)建和部署大型集成解決方案始終是一項比較困難的任務(wù)。而這正是 ESB 的用武之地,因為它簡化了任務(wù)關(guān)鍵型應(yīng)用程序的靈活而可靠的體系結(jié)構(gòu)(SOA 和 EDA)的實現(xiàn)。
面向服務(wù)的體系結(jié)構(gòu)
??????SOA 是一個體系結(jié)構(gòu)概念,其中所有的功能或服務(wù)都使用描述語言加以定義,且各自的接口均可通過網(wǎng)絡(luò)進(jìn)行發(fā)現(xiàn)。此類接口采用獨立方式定義,不受服務(wù)實現(xiàn)所在的硬件平臺、操作系統(tǒng)和采用的編程語言的影響。
??????SOA 的最重要優(yōu)勢之一是,它可以脫離軟件開發(fā)中的孤立方式(在此方式中,每個部門構(gòu)建自己的系統(tǒng),而完全不考慮組織中的其他人已完成了哪些東西)。這種“豎井 (Silo)”方法將會導(dǎo)致低效且開銷巨大的情況出現(xiàn),可能會多次開發(fā)、部署和維護(hù)相同的功能。SOA 基于在整個組織范圍內(nèi)共享的服務(wù)組合,并提供了對現(xiàn)有資產(chǎn)的有效重用和集成,如圖 1 中所示:
圖 1:“豎井”方法與 SOA 方法的對比
??????SOA 基于方便的請求/應(yīng)答機(jī)制,如圖 2 中所示。服務(wù)使用者將通過網(wǎng)絡(luò)調(diào)用服務(wù)提供者,且必須等待,直到提供者一端的操作完成。
圖 2:SOA 中的請求/應(yīng)答機(jī)制
表 1 對 SOA 解決方案的基本特征進(jìn)行了總結(jié):
功能
|
描述
|
松散耦合的交互
|
服務(wù)的調(diào)用獨立于其技術(shù)和位置。
|
一對一通信
|
一個特定服務(wù)一次由一個用戶調(diào)用。通信是雙向的。
|
基于用戶進(jìn)行觸發(fā)
|
控制流由客戶機(jī)(服務(wù)使用者)發(fā)起。
|
同步
|
應(yīng)答將以同步方式發(fā)回給使用者。
|
表 1:基本 SOA 特征
事件驅(qū)動的體系結(jié)構(gòu)
?????????在 2003 年,Gartner引入了一個新術(shù)語,用以描述基于事件的設(shè)計范例:事件驅(qū)動的體系結(jié)構(gòu) (EDA)。EDA 定義了一種用于進(jìn)行設(shè)計和實現(xiàn)應(yīng)用程序和系統(tǒng)的方法,其中的事件在各個分解的軟件組件和服務(wù)間進(jìn)行傳遞。EDA 并不會替代 SOA,而只是對 SOA 形成補(bǔ)充。雖然 SOA 通常更適合請求/響應(yīng)交換環(huán)境,但 EDA 引入了一些長時間運行的異步進(jìn)程功能。而且,EDA 節(jié)點可發(fā)布事件,且并不依賴于所發(fā)布的服務(wù)的可用性。它真正地實現(xiàn)了同其他節(jié)點的分離。EDA 有時也稱為“事件驅(qū)動的 SOA”。
?????????EDA 使用消息傳遞來在兩個或多個應(yīng)用程序進(jìn)程間進(jìn)行通信。此類通信是由“事件”發(fā)起的。觸發(fā)器通常與某種業(yè)務(wù)情況對應(yīng)。該事件的所有訂閱者將隨后得到通知,從而激活,如圖 3 中所示:
圖 3. 事件驅(qū)動的體系結(jié)構(gòu)中的發(fā)布/訂閱機(jī)制
表 2 對 EDA 的基本特征進(jìn)行了總結(jié):
功能 |
描述 |
分離的交互 |
事件發(fā)布者并不會意識到事件訂閱者的存在。 |
多對多通信 |
采用發(fā)布/訂閱消息傳遞,一個特定事件可以影響多個訂閱者。 |
基于事件的觸發(fā)器 |
控制流由接收者確定(基于發(fā)布的事件)。 |
異步 |
通過事件消息傳遞支持異步操作。 |
表 2:基本 EDA 特征
?
企業(yè)服務(wù)總線
定義
??????企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)將事件驅(qū)動的方法和面向服務(wù)的方法結(jié)合使用,以簡化業(yè)務(wù)單元的集成,從而在異類平臺和環(huán)境間建立聯(lián)系。ESB 充當(dāng)允許不同應(yīng)用程序進(jìn)程之間進(jìn)行通信的中間層。部署到企業(yè)服務(wù)總線的服務(wù)可以由使用者或事件觸發(fā)。它同時支持同步方式和異步方式,可促進(jìn)一個或多個參與者之間的交互(一對一和多對多通信)。因此 ESB 可提供 SOA 和 EDA 范例的所有功能。
??????企業(yè)服務(wù)總線是一種體系結(jié)構(gòu)模式,可以采用許多不同的產(chǎn)品在組織內(nèi)實現(xiàn),并組裝起來作為聯(lián)合總線。現(xiàn)在有越來越多的供應(yīng)商開始提供完整的產(chǎn)品來滿足企業(yè)集成需求。例如 IBM WebSphere? Enterprise Service Bus就提供了集成總線功能,可以有效地連接應(yīng)用程序(利用 Web 服務(wù)和 J2EE 等標(biāo)準(zhǔn))。
ESB 服務(wù)
??????目前并沒有定義 ESB 的正式標(biāo)準(zhǔn),但通常都認(rèn)為 ESB 至少必須提供傳輸、事件 和中介 服務(wù),以幫助集成大型異類應(yīng)用程序。
傳輸服務(wù)?
??????必須確保通過企業(yè)總線互連的業(yè)務(wù)流程間的消息正確交付。傳輸還包括基于內(nèi)容的路由功能。這意味著可以將消息定向到不同的目的地。作為任務(wù)關(guān)鍵型環(huán)境的一部分,這些服務(wù)采用事務(wù)處理方式,得到了相應(yīng)的安全保證,并會對其進(jìn)行監(jiān)視。
事件服務(wù)?
??????提供事件檢測、觸發(fā)和分發(fā)功能。這些功能與事件處理概念相關(guān),事件處理是一種用于分析和控制事件驅(qū)動的體系結(jié)構(gòu) (EDA) 中相互關(guān)聯(lián)事件組成的復(fù)雜系列。事件驅(qū)動的范例并不是新概念。不過,它們促進(jìn)了行業(yè)的發(fā)展,代表著復(fù)雜事件處理 (Complex Event Processing) 的核心概念。
中介服務(wù)?
??????
??????用于滿足兩個目的。首先,中介可確保提供必要協(xié)議,以滿足集成異類系統(tǒng)的需求。由于兩個不同的服務(wù)并不一定使用相同的傳輸協(xié)議,而中介服務(wù)可負(fù)責(zé)從一個協(xié)議到另一個協(xié)議的轉(zhuǎn)換,因此可以進(jìn)行此類通信。協(xié)議轉(zhuǎn)換對于業(yè)務(wù)事務(wù)的所有參與服務(wù)是透明的。
圖 4:協(xié)議中介——由 ESB 進(jìn)行協(xié)議轉(zhuǎn)換
??????其次,中介提供了轉(zhuǎn)換任何消息內(nèi)容的可能性。這是業(yè)務(wù)集成的關(guān)鍵服務(wù)。它可確保任何進(jìn)程都能理解通過總線傳輸?shù)臄?shù)據(jù)。而且,中介允許對內(nèi)容進(jìn)行擴(kuò)展,以使用附加信息豐富消息內(nèi)容。內(nèi)容轉(zhuǎn)換由總線負(fù)責(zé)進(jìn)行管理:此過程對于任何參與服務(wù)都是透明的。
圖 5:內(nèi)容中介——消息內(nèi)容由 ESB 進(jìn)行轉(zhuǎn)換和擴(kuò)展
??????讓我們舉個例子來說明內(nèi)容中介的好處。假定有一個名為 Yummy Inc. 的公司提供在線訂餐服務(wù)。為了對其向客戶提供的菜單進(jìn)行計劃,他們需要驗證其供應(yīng)商提供的食品的可用性和價格。為了獲得此信息而發(fā)送的消息的典型結(jié)構(gòu)包括:產(chǎn)品標(biāo)識、數(shù)量和目標(biāo)配送日期。
圖 6:可用性消息的結(jié)構(gòu)
??????當(dāng)然,Yummy Inc. 及其供應(yīng)商并未采用相同的方式來表示這些信息。例如,兩個系統(tǒng)上的日期格式就不相同。而且,供應(yīng)商需要使用配送位置信息,因為 Yummy Inc. 并不是其唯一的客戶。ESB 中介服務(wù)可以將所傳輸消息的信息進(jìn)行轉(zhuǎn)換和擴(kuò)展,以便目標(biāo)服務(wù)接收到其所需的所有信息,如圖 7 中所示:
圖 7:ESB 中介的內(nèi)容轉(zhuǎn)換和擴(kuò)展
??????通過利用之前定義的關(guān)鍵技術(shù)服務(wù),ESB 可提供靈活的連接基礎(chǔ)設(shè)施,用于集成松散耦合的應(yīng)用程序。它同時支持 SOA 和 EDA 范例。
圖 8:使用企業(yè)服務(wù)總線連接各個服務(wù)
ESB 的好處
??????通過利用其內(nèi)部服務(wù),ESB 解決方案可帶來各種好處。就本質(zhì)而言,它簡化了連接各種相異應(yīng)用程序的任務(wù),從而最終提高了業(yè)務(wù)的靈活性,并提供了以下功能:
基于標(biāo)準(zhǔn)的連接
?????????作為很多異類應(yīng)用程序間的集成中樞,ESB 必須提供很多不同的集成技術(shù),并對大量供選擇的標(biāo)準(zhǔn)技術(shù)加以利用。
?????????消息傳遞集成通常支持 Java? Message Service (JMS) API,而企業(yè)信息系統(tǒng)的連接則是由 J2EE Connector Architecture (JCA) 提供的。為了確保 Web 服務(wù)互操作性,ESB 支持 JAX-RPC 編程模型。不同的 ESB 組件間的集成可以通過 Java Business Integration (JBI) 規(guī)范進(jìn)行標(biāo)準(zhǔn)化。
滲透性集成
?????????ESB 具有滲透性本質(zhì),因為它可以跨不同的部門、業(yè)務(wù)單元甚至業(yè)務(wù)合作伙伴進(jìn)行應(yīng)用程序集成。而且,它的核心體系結(jié)構(gòu)原則還可以促進(jìn)構(gòu)建于異類開發(fā)環(huán)境上的應(yīng)用程序之間的通信。例如,ESB 解決方案可以在不同的編程語言(J2EE、C++ 或 .Net)之間起到橋梁作用。
可靠集成
?????????ESB 體系結(jié)構(gòu)模式可提供系統(tǒng)安全性、可伸縮性或可用性。企業(yè)服務(wù)總線使用 SOA 和 EDA,可同時提供同步和異步功能。傳輸服務(wù)可確保可靠交付和事務(wù)完整性。因此,ESB 的每個特征都對其穩(wěn)健性進(jìn)行了增強(qiáng),可盡可能減少集成或聯(lián)合解決方案失敗的風(fēng)險。
結(jié)束語
?????????企業(yè)服務(wù)總線是一種體系結(jié)構(gòu)模式,可通過傳輸、事件和中介服務(wù)促進(jìn)和簡化業(yè)務(wù)集成。它可連接各個異類節(jié)點并作為中介傳遞其間的所有通信和交互,這些節(jié)點可分散在面向服務(wù)的體系結(jié)構(gòu)(同步一對一方法)和事件驅(qū)動的體系結(jié)構(gòu)(異步多對多方法)中。ESB 是目前處理集成挑戰(zhàn)的最有效方法,是可提供最大業(yè)務(wù)靈活性和不同應(yīng)用程序間的高效連接技術(shù)解決方案。