ESB - 企業(yè)服務(wù)總線
ESB全稱為Enterprise Service Bus,即企業(yè)服務(wù)總線。它是傳統(tǒng)中間件技術(shù)與XML、Web服務(wù)等技術(shù)結(jié)合的產(chǎn)物。ESB提供了網(wǎng)絡(luò)中最基本的連接中樞,是構(gòu)筑企業(yè)神經(jīng)系統(tǒng)的必要元素。ESB的出現(xiàn)改變了傳統(tǒng)的軟件架構(gòu),可以提供比傳統(tǒng)中間件產(chǎn)品更為廉價(jià)的解決方案,同時(shí)它還可以消除不同應(yīng)用之間的技術(shù)差異,讓不同的應(yīng)用服務(wù)器協(xié)調(diào)運(yùn)作,實(shí)現(xiàn)了不同服務(wù)之間的通信與整合。從功能上看,ESB提供了事件驅(qū)動(dòng)和文檔導(dǎo)向的處理模式,以及分布式的運(yùn)行管理機(jī)制,它支持基于內(nèi)容的路由和過濾,具備了復(fù)雜數(shù)據(jù)的傳輸能力,并可以提供一系列的標(biāo)準(zhǔn)接口。

定義
面向服務(wù)的體系結(jié)構(gòu)已經(jīng)逐漸成為IT集成的主流技術(shù)。面向服務(wù)的體系結(jié)構(gòu) - service-oriented?architecture,SOA是一種軟件系統(tǒng)設(shè)計(jì)方法,通過已經(jīng)發(fā)布的和可發(fā)現(xiàn)的接口為終端用戶應(yīng)用程序或其它服務(wù)提供服務(wù)。
SOA把IT架構(gòu)分為組件層、Web服務(wù)層、業(yè)務(wù)流程層等。組件層包括各種應(yīng)用組件,它們通常是技術(shù)相關(guān)的具體實(shí)現(xiàn),各種具體的分布式組件技術(shù) - CORBA、COM/DCOM、J2EE都可以用于實(shí)現(xiàn)組件層的應(yīng)用組件。通常復(fù)雜的IT環(huán)境中的組件層都同時(shí)使用了多種分布式組件技術(shù),而不同實(shí)現(xiàn)技術(shù)之間的互聯(lián)性障礙給應(yīng)用集成帶來了極大的困難,進(jìn)而形成了一個(gè)個(gè)信息孤島。SOA引入了Web服務(wù)層來解決此種情況下的應(yīng)用集成問題。Web服務(wù)是獨(dú)立于各種分布式組件技術(shù)的,它使用標(biāo)準(zhǔn)的基于XML的服務(wù)描述語言 - Web?Service?Description?Language,WSDL來定義和封裝離散的業(yè)務(wù)功能,各種支持Web服務(wù)的分布式組件技術(shù)能夠?qū)⑵渖系臉I(yè)務(wù)組件發(fā)布成Web服務(wù)并產(chǎn)生相應(yīng)的WSDL文檔,并且只需要依據(jù)WSDL描述的信息就能夠調(diào)用Web服務(wù),即WSDL所描述的業(yè)務(wù)功能。Web服務(wù)在系統(tǒng)集成方面得到了廣泛的應(yīng)用。在SOA中,需要進(jìn)入系統(tǒng)集成環(huán)節(jié)的業(yè)務(wù)組件都被映射為Web服務(wù),形成了Web服務(wù)層。業(yè)務(wù)流程層則處于Web服務(wù)層之上,通過對Web服務(wù)的流程編排來實(shí)現(xiàn)商業(yè)流程。業(yè)務(wù)流程層通過Web服務(wù)層能夠調(diào)用到基于各種分布式組件技術(shù)實(shí)現(xiàn)的業(yè)務(wù)組件,實(shí)現(xiàn)了復(fù)雜IT系統(tǒng)環(huán)境的應(yīng)用集成。
在SOA的組件層、Web服務(wù)層、業(yè)務(wù)流程層三層模型中,組件層使用具體的分布式組件技術(shù)實(shí)現(xiàn)業(yè)務(wù)功能,Web服務(wù)層則為組件層提供了一種技術(shù)無關(guān)的通用訪問方式,屏蔽組件層具體技術(shù)之間的差異,突出業(yè)務(wù)邏輯的封裝性。組件層中的業(yè)務(wù)組件和Web服務(wù)層的Web服務(wù)構(gòu)成了企業(yè)IT架構(gòu)的主要可重用部件,它們應(yīng)該保持相對的穩(wěn)定,業(yè)務(wù)流程層則通過對服務(wù)進(jìn)行編排,來適應(yīng)業(yè)務(wù)需求的變化。將組件層的業(yè)務(wù)組件映射為Web服務(wù)層的服務(wù)是成功實(shí)現(xiàn)SOA的關(guān)鍵步驟,目前對于特定的業(yè)務(wù)組件,業(yè)界廣泛使用具體于分布式組件技術(shù)內(nèi)建的支持Web服務(wù)的功能來實(shí)現(xiàn)組件與服務(wù)的映射。這種映射方法高度依賴于具體分布式組件技術(shù)本身,并且在使用和定制的過程中缺乏靈活性,當(dāng)某個(gè)Web服務(wù)的實(shí)現(xiàn)需要多個(gè)分布式組件技術(shù)中的業(yè)務(wù)組件實(shí)現(xiàn)時(shí),這種映射方法就會無法支持。
總線
企業(yè)服務(wù)總線 - EnterpriseServiceBus,ESB是構(gòu)建基于面向服務(wù)體系結(jié)構(gòu) - SOA解決方案時(shí)所使用基礎(chǔ)架構(gòu)的關(guān)鍵部分,是由中間件技術(shù)實(shí)現(xiàn)并支持SOA的一組基礎(chǔ)架構(gòu)功能。ESB支持異構(gòu)環(huán)境中的服務(wù)、消息,以及基于事件的交互,并且具有適當(dāng)?shù)姆?wù)級別和可管理性。簡而言之,ESB提供了連接企業(yè)內(nèi)部及跨企業(yè)間新的和現(xiàn)有軟件應(yīng)用程序的功能,以一組豐富的功能啟用管理和監(jiān)控應(yīng)用程序之間的交互。在SOA分層模型中,ESB用于組件層以及服務(wù)層之間,它能夠通過多種通信協(xié)議連接并集成不同平臺上的組件將其映射成服務(wù)層的服務(wù)。
作為SOA基礎(chǔ)架構(gòu)的關(guān)鍵部分,ESB的功能主要體現(xiàn)在通信、服務(wù)交互、應(yīng)用集成、服務(wù)質(zhì)量、安全性以及管理和監(jiān)控等方面。在通信方面,ESB能夠支持消息路由/尋址,支持多種通信技術(shù)、通信協(xié)議 - 如JMS、HTTP,支持發(fā)布/訂閱的通信模式,能夠處理請求/響應(yīng)、同步以及異步的消息傳遞方式,并且要求以可靠的方式傳遞消息。服務(wù)交互方面,ESB上所發(fā)布的服務(wù)是以當(dāng)前標(biāo)準(zhǔn)的Web服務(wù)描述語言 - WebServicesDescriptionLanguage來定義Web服務(wù)的,并且ESB上通常配備有服務(wù)目錄和發(fā)現(xiàn)機(jī)制。ESB的重要功能就是集成不同的系統(tǒng),必須能夠支持多種接入ESB的方式 - 例如將ESB、WebService、CORBA以及使用Socket等方式訪問的遺留系統(tǒng)接入到ESB系統(tǒng),將接入的系統(tǒng)映射成Web服務(wù)。在集成不同系統(tǒng)的同時(shí),必須考慮服務(wù)質(zhì)量方面的問題,如事務(wù)性和消息傳遞的可靠性。對于關(guān)鍵的Web服務(wù),ESB需要以加密的方式進(jìn)行消息傳遞,并且必須驗(yàn)證訪問者的權(quán)限。ESB軟件作為SOA基礎(chǔ)架構(gòu)的一個(gè)復(fù)雜子系統(tǒng),還必須配有相應(yīng)的管理和監(jiān)控功能,用于ESB軟件自身的系統(tǒng)管理、日志記錄、測量和監(jiān)控等。目前國內(nèi)外對企業(yè)服務(wù)總線的研究都比較積極,IBM的ISV、BEA的AquaLogicServiceBus、開源的Mule、Sun領(lǐng)導(dǎo)的JBI規(guī)范草案等,都是企業(yè)服務(wù)總線的具體實(shí)現(xiàn)。但是這些公司的ESB實(shí)現(xiàn)都更關(guān)注于對自有品牌產(chǎn)品的支持,對如何集成更多分布式組件技術(shù)考慮得不夠。
連接框架
綜述
企業(yè)連接框架是企業(yè)服務(wù)總線的一種具體實(shí)現(xiàn)。該框架的首要目標(biāo)是使用標(biāo)準(zhǔn)的開放的協(xié)議以及經(jīng)過驗(yàn)證的企業(yè)應(yīng)用集成模式,將不同的應(yīng)用程序系統(tǒng)集成起來。ESB連接框架定義了一系列構(gòu)建,用于處理在集成不同系統(tǒng)時(shí)所涉及的通信、路由、服務(wù)交互等方面的任務(wù)。企業(yè)連接框架體系展示了使用該框架集成2個(gè)端對端的應(yīng)用程序的連接方式。企業(yè)連接框架包含以下幾個(gè)部分:適配器,前置路由器,后置路由器,應(yīng)用組件等。
適配器
適配器等價(jià)于EIP中的ChannelAdapter - 通道銜接器,用于連接應(yīng)用組建與外部應(yīng)用程序。適配器包括連接器、消息接收器/消息發(fā)送器、消息轉(zhuǎn)換器3個(gè)部分。消息接收器/消息發(fā)送器用于接收和發(fā)送消息,消息轉(zhuǎn)換器用于消息與組件所識別數(shù)據(jù)類型之間的數(shù)據(jù)轉(zhuǎn)換,連接器則用于維護(hù)外部應(yīng)用程序與應(yīng)用組件之間通信的會話。連接器是適配器的核心,用于管理消息接收器/消息發(fā)送器以及消息轉(zhuǎn)換器。對于消息接收器和消息發(fā)送器,連接器可以在其上定義接收端點(diǎn)和發(fā)送端點(diǎn),用于指定該消息從哪兒接收或者發(fā)送到何處,如JMS的隊(duì)列名稱、HTTP的URL地址、pop3/smtp協(xié)議的郵件地址。同時(shí),連接器使用消息轉(zhuǎn)換器將接收來的消息或者即將發(fā)送的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。企業(yè)連接框架對不同的通信協(xié)議提供相應(yīng)的適配器,如HTTP適配器、JMS適配器、郵件服務(wù)適配器、TCP/IPsocket適配器,CORBA適配器、EJB適配器、COM/DCOM適配器、HTTP/SOAP - Web服務(wù)適配器等。種類豐富的適配器確保企業(yè)連接框架能夠集成基于不同分布式組件技術(shù)的業(yè)務(wù)組件。
路由器
路由器分為前置路由器以及后置路由器2種,分別用于應(yīng)用組件處理消息前的接收路由和應(yīng)用組件處理消息后的發(fā)送路由。通過前置路由器,應(yīng)用組件可以接收來自不同適配器或者同一適配器不同接收端點(diǎn)的消息;通過后置路由器,應(yīng)用組件可以將其處理結(jié)果發(fā)送到不同適配器或者同一適配器的不同端點(diǎn)上。路由器可以實(shí)現(xiàn)動(dòng)態(tài)的、聲明性的、基于內(nèi)容的以及基于規(guī)則的消息路由。通過消息路由,可以順序、選擇或者串聯(lián)地調(diào)用應(yīng)用組件,實(shí)現(xiàn)EnterpriseIntegrationPattern中的消息路由模式。
應(yīng)用組件
應(yīng)用組件是基于某種具體分布式技術(shù)實(shí)現(xiàn)的業(yè)務(wù)邏輯模塊。通過路由器和適配器的連接,應(yīng)用組件可以與其它應(yīng)用組件或者外部應(yīng)用程序交互。
外部應(yīng)用程序
外部應(yīng)用程序可以是任何類型的應(yīng)用程序,如Web應(yīng)用程序、辦公自動(dòng)化系統(tǒng)、應(yīng)用程序服務(wù)器、業(yè)務(wù)流程執(zhí)行引擎等。
服務(wù)映射
綜述
使用企業(yè)連接框架能夠輕易地實(shí)現(xiàn)應(yīng)用系統(tǒng)的集成,并可以將已有應(yīng)用系統(tǒng)的功能作為應(yīng)用組件,通過消息適配器和消息路由將應(yīng)用組件自由組合形成Web服務(wù),從而實(shí)現(xiàn)組件與Web服務(wù)的映射。使用企業(yè)連接框架進(jìn)行組件與服務(wù)的映射可以加快開發(fā)速度,更好地重用已有系統(tǒng)的功能,同時(shí)能夠獲得更好的靈活性,降低系統(tǒng)維護(hù)的復(fù)雜度。根據(jù)業(yè)務(wù)需要,應(yīng)用組件可以通過如下方式映射成Web服務(wù):簡單映射,路由映射,復(fù)雜映射和鏡像映射等。
簡單映射
將一個(gè)組件映射成對應(yīng)的Web服務(wù):這是實(shí)現(xiàn)組件與Web服務(wù)之間映射的最簡單的一種方式。業(yè)務(wù)組件的接口正好與Web服務(wù)的接口相一致,直接為此組件配置HTTP/SOAP - Web服務(wù)適配器,將其映射為Web服務(wù) - 如圖1所示。
路由映射
通過路由機(jī)制,將多個(gè)組件通過路由組合成一個(gè)Web服務(wù)。對于某些Web服務(wù),其業(yè)務(wù)功能的實(shí)現(xiàn)可能需要多個(gè)應(yīng)用組件協(xié)作完成,如圖2所示。適配器使服務(wù)總線具備連接不同技術(shù)標(biāo)準(zhǔn)組件的能力,路由器則增強(qiáng)了這種連接的靈活性。通過路由器,各種應(yīng)用組件可以靈活地組合起來,協(xié)同完成某項(xiàng)業(yè)務(wù)功能。路由器有前置路由器及后置路由器2類。前置路由器有:
冪等路由器,對于帶有uniqueID的消息,冪等路由器確保組件不會接收到ID重復(fù)的消息。
條件路由器,一個(gè)條件路由器可以同時(shí)作為多個(gè)組件的前置路由器,它為每個(gè)組件配置各自的過濾器,符合過濾器所設(shè)置條件的消息將被轉(zhuǎn)發(fā)到相應(yīng)的組件上。條件路由器的作用類似于編程語言中的switch語句。
聚合路由器,將接收到的2條或者更多條消息合并成一條消息進(jìn)行處理。
排序路由器,緩存一組接收到的消息,并將它們重新排序,然后再轉(zhuǎn)發(fā)給目標(biāo)組件。
轉(zhuǎn)發(fā)路由器,不對消息進(jìn)行任何處理,直接將接收到的消息轉(zhuǎn)發(fā)給后置路由器。
后置路由器有:
過濾路由器,為一個(gè)組件配置多個(gè)過濾路由器,各路由器根據(jù)自己的過濾規(guī)則,判斷消息內(nèi)容是否通過本路由器轉(zhuǎn)發(fā)。
多播路由器,將組件發(fā)出的消息轉(zhuǎn)發(fā)到多個(gè)不同的目標(biāo)藏地址。
鏈路由器,將消息通過鏈表傳遞,傳遞過程中,前一個(gè)組件的輸出消息作為后一個(gè)組件的輸入消息。
消息分割路由器,將組件發(fā)出的消息切分成小塊,轉(zhuǎn)發(fā)到不同的目標(biāo)地址。
多選一路由器,從多個(gè)目標(biāo)地址中,選擇一個(gè)運(yùn)行正常的目標(biāo)地址,并將消息轉(zhuǎn)發(fā)。
功能
1、總線基礎(chǔ)服務(wù)框架:提供系統(tǒng)一致性、安全性、可靠性,以及性能和擴(kuò)展能力保障的基礎(chǔ)技術(shù)手段。
2、集成服務(wù):提供基礎(chǔ)的集成服務(wù)與用戶定制的應(yīng)用服務(wù);支持多種集成服務(wù)模式;支持服務(wù)的封裝、重用、服務(wù)組合、服務(wù)調(diào)度。
3、公用服務(wù):提供內(nèi)置的各種公用服務(wù)。例如,渠道認(rèn)證服務(wù),日志服務(wù)等公用服務(wù)。
4、服務(wù)管理和服務(wù)標(biāo)準(zhǔn):提供服務(wù)配置管理的前臺工具集合,并提供行業(yè)的服務(wù)規(guī)約標(biāo)準(zhǔn)。
5、系統(tǒng)監(jiān)控:提供多角度的系統(tǒng)實(shí)時(shí)監(jiān)控與交易報(bào)表,提供用戶定制的告警。
6、安全體系:提供多種安全機(jī)制并支持和第三方安全系統(tǒng)的有效集成,提供有效的安全監(jiān)控機(jī)制。
優(yōu)勢
1、可用性和可靠性
支持群集物理部署來保證系統(tǒng)的高可用性,支持系統(tǒng)的長期穩(wěn)定運(yùn)行。
2、性能和可伸縮性
支持在達(dá)到系統(tǒng)性能指標(biāo)峰值要求的同時(shí),系統(tǒng)處理能力還能夠留有足夠的余量。
3、擴(kuò)展性和靈活性
支持系統(tǒng)擴(kuò)展部署和多個(gè)邏輯單元的分離部署。提供對系統(tǒng)的維護(hù)與參數(shù)配置的管理功能。
4、安全性
提供安全認(rèn)證和授權(quán)機(jī)制,提供不可否認(rèn)和機(jī)密性,支持安全標(biāo)準(zhǔn)。
