由于試圖快速進(jìn)入成長中的 ESB 范疇的廠商的慌亂,以及大量行業(yè)分析師和記者在分析報(bào)告中分別展示他們各自的觀點(diǎn),可以理解,這其中對于ESB 到底是什么還具有很多混淆。這一節(jié)將概略說明 ESB 的主要特性。
如第 1 章所示, ESB 能形成普遍的網(wǎng)格的核心。它能夠跨越和超過擴(kuò)展企業(yè),并且橫跨部門組織、業(yè)務(wù)單位和貿(mào)易伙伴形成全局的范圍。ESB 也能很好地適合于局部的集成項(xiàng)目,并且對促進(jìn)它們采用任何類型的集成環(huán)境提供柔性的支撐。
圖表 1?2 ESB 形成一個(gè)能跨越了一個(gè)全球企業(yè)網(wǎng)絡(luò)的普遍網(wǎng)格
應(yīng)用可以按需插入總線,并且具有可視性,以及能夠與其它已經(jīng)插入到總線中的任何其他應(yīng)用和服務(wù)共享數(shù)據(jù)。雖然Web Services是 ESB 架構(gòu)的一個(gè)有機(jī)組成部份,但是所有的應(yīng)用并不是一定要被修改成為真正的Web Services才能參與到 ESB。連接性是通過多種協(xié)議、客戶端API 技術(shù)、遺留消息環(huán)境、以及第三方應(yīng)用適配器來達(dá)到的。
基于標(biāo)準(zhǔn)的集成是 ESB 的基本概念。對于連接性,ESB 可以使用J2EE組件,比如使用Java Message Service (JMS)來進(jìn)行MOM連接,使用J2EE 連接器結(jié)構(gòu) (JCA 或 J2CA) 來連接應(yīng)用適配器。ESB 也能夠非常漂亮地與使用.Net、COM、C#、C/C++構(gòu)建的應(yīng)用進(jìn)行集成。除此之外,ESB 也能集成支持SOAP和Web Services API的任何組件,這其中包括事實(shí)上的標(biāo)準(zhǔn)Web Services工具箱的實(shí)現(xiàn),比如Apache Axis。為了處理數(shù)據(jù)操縱, ESB 可以使用XML標(biāo)準(zhǔn),比如XSLT、XPath 和 XQuery 來提供數(shù)據(jù)變換、智能路由、以及在數(shù)據(jù)流過總線的時(shí)候提供“空中”查詢。為了處理 SOA 和業(yè)務(wù)流程路由, ESB 可以使用 Web Services描述語言 (WSDL) 來描述抽象的服務(wù)接口,使用針對Web Services的業(yè)務(wù)流程運(yùn)行語言(BPEL4WS)、WS- Choreography或者一些其他基于XML的詞匯表,如 ebXML BPSS,來描述抽象的業(yè)務(wù)流程。
如果你還不懂這些深?yuàn)W的詞匯的含義,也不要擔(dān)心。雖然本書并不想作為是這些各個(gè)技術(shù)的詳細(xì)參考或個(gè)別指導(dǎo),我們也會(huì)在他們?nèi)绾闻c ESB 有關(guān)的語境中足夠詳細(xì)地解釋它們。
這些基于標(biāo)準(zhǔn)的接口和組件被整合到一個(gè)意義非凡的包含開放端點(diǎn)的可插入架構(gòu)之中。ESB提供了一種基礎(chǔ)設(shè)置來同時(shí)支持基于工業(yè)標(biāo)準(zhǔn)接口集成組件和使用標(biāo)準(zhǔn)化接口來實(shí)現(xiàn)的專有元素。下圖展示了一個(gè)使用JMS和JCA集成一個(gè) J2EE 應(yīng)用、使用JCA應(yīng)用適配器集成第三方打包軟件、使用C#客戶端程序集成一個(gè).NET應(yīng)用、使用Web Services集成兩個(gè)外部應(yīng)用的案例的高階視圖。
圖表 1?3 ESB 整合多種不同的技術(shù)
ESB 在其中借鑒了傳統(tǒng)EAI Broker的許多功能,比如從它提供集成服務(wù) , 像是業(yè)務(wù)流程編排、數(shù)據(jù)路由、數(shù)據(jù)變換、以及應(yīng)用適配器。然而,集成中介者通常是高度集中和單一的形態(tài)。ESB 將這些集成能力提供為獨(dú)立的服務(wù),能夠以一種高度分布的形態(tài)一起工作,并且能夠彼此間獨(dú)立伸縮。在第 6 章中,你將會(huì)學(xué)習(xí)更多有關(guān) ESB“服務(wù)容器”,ESB 的一項(xiàng)核心概念的內(nèi)容,它允許對集成服務(wù)進(jìn)行選擇部署。
任何集成策略的一個(gè)關(guān)鍵部分就是能夠輕易地在應(yīng)用之間轉(zhuǎn)換數(shù)據(jù)格式的能力。許多應(yīng)用對描述相似的數(shù)據(jù)并不共享相同的數(shù)據(jù)格式。
數(shù)據(jù)變換是一個(gè) ESB部署的一個(gè)固有部份。變換服務(wù)特別針對那些被插入總線的個(gè)別應(yīng)用能夠在總線的任何地方被定位和訪問的需要。因?yàn)閿?shù)據(jù)變換是ESB 本身的一個(gè)有機(jī)組成部份,解決應(yīng)用之間的阻抗失配問題便可以想到ESB。
ESB 能夠?yàn)槟闾峁┍举|(zhì)上針對任何集成項(xiàng)目所必需的核心能力,并且可以通過使用分層的服務(wù)來處理特定的用途來增加。例如,特殊的能力,比如業(yè)務(wù)流程管理 (BPM) 軟件能處理工作流相關(guān)的業(yè)務(wù)流程,而協(xié)作服務(wù)器能夠提供對伙伴業(yè)務(wù)流程管理的特殊服務(wù)。專門的第三方翻譯器能夠?qū)⑼獠繑?shù)據(jù),比如EDI,轉(zhuǎn)換到能進(jìn)入目標(biāo)企業(yè)資源規(guī)劃 (ERP) 系統(tǒng)之內(nèi)的格式,或者在通用總線之上的規(guī)范XML表現(xiàn)。
在 ESB驅(qū)動(dòng)的、事件驅(qū)動(dòng)的 SOA中,應(yīng)用和服務(wù)被當(dāng)做抽象服務(wù)端點(diǎn),能夠輕易地對異步事件做出響應(yīng)。SOA 對其底層的連接性和管線細(xì)節(jié)提供了一個(gè)抽象的方式。服務(wù)的實(shí)現(xiàn)不需要理解協(xié)議。服務(wù)也不需要了解消息是如何路由到其它服務(wù)的。他們只是簡單地將接收自 ESB 的一個(gè)消息作為一個(gè)事件,然后處理該消息。ESB 可以把消息發(fā)送到它想要去的其他任何地方。
在 ESB SOA 中,用戶定制服務(wù)可以被創(chuàng)建、擴(kuò)展,并且被重用為ESB 功能。被暴露為服務(wù)的應(yīng)用端點(diǎn),可以同特殊的集成功能一起構(gòu)造成復(fù)合業(yè)務(wù)服務(wù)和業(yè)務(wù)流程,并且它們可以根據(jù)不同目的重新組合,其目標(biāo)是在一個(gè)即時(shí)企業(yè)中提供自動(dòng)化的業(yè)務(wù)功能。
第 7 章將會(huì)更詳細(xì)地討論 ESB 中的 SOA 。
ESB的處理流從簡單的優(yōu)先步驟序列到使用條件分支和聯(lián)合來并行執(zhí)行的綜合業(yè)務(wù)流程編排。這些特征可以使用簡單的消息元數(shù)據(jù)或者通過使用諸如BPEL4WS 之類的業(yè)務(wù)編排語言來控制。
ESB 的處理流能力使得定義屬于某個(gè)部門或者業(yè)務(wù)單位局部的,或者共存于一個(gè)較大的集成網(wǎng)絡(luò)中的業(yè)務(wù)流程成為可能。這點(diǎn)卻是一個(gè)集線器-插頭中介者或一個(gè) BPM 工具自己所不能很好地自己解決的問題。第 7 章將會(huì)詳細(xì)討論分布式的流程能力,它能提供高度分布的流程編排能力而不需要中心化的流程和規(guī)則引擎。
ESB的業(yè)務(wù)流能力也涉及到基于內(nèi)容的消息的智能路由的特殊集成服務(wù)。
因?yàn)镋SB 的業(yè)務(wù)流能力構(gòu)建于分布式的SOA之上,它也能夠跨越高度分布的物理部署拓?fù)洌ㄉ踔翑U(kuò)越大洋)而不用痛苦地忍受總線上各種應(yīng)用和服務(wù)之間的物理邊界和多協(xié)議的鴻溝。
圖表 1?4 跨越物理和邏輯邊界之上的部署拓?fù)涞木幣藕蜆I(yè)務(wù)流
在 ESB 上的節(jié)點(diǎn)之間的連結(jié)是具有防火墻能力的。應(yīng)用和 ESB之間的安全性,甚至在 ESB 節(jié)點(diǎn)自身之間的安全性,能夠建立和維護(hù)最高強(qiáng)度的認(rèn)證、憑證管理、和訪問控制。
可靠性是通過處于ESB核心的企業(yè)級MOM來達(dá)到的。MOM核心提供異步通信能力、業(yè)務(wù)數(shù)據(jù)的可靠傳輸、以及事務(wù)的完整性。你們將在第 5 章中學(xué)到,這已經(jīng)不是十年以前的傳統(tǒng)MOM技術(shù)了。需求從那時(shí)以后開始進(jìn)展,并且已經(jīng)成熟,而 作為ESB 的核心的MOM必須符合今天的需求。
傳統(tǒng)的集線器-插頭中介者方式往往具有組織性的邊界問題,這主要是因?yàn)镋AI Broker對跨越防火墻和網(wǎng)絡(luò)域的無能的實(shí)際限制所引起。更重要的是,即使一個(gè)集線器-插頭架構(gòu)能夠被伸展而跨過組織的交界,它仍然不允許各個(gè)業(yè)務(wù)單位彼此半獨(dú)立地運(yùn)行所需要的局部自治。與不斷擴(kuò)展的集成范圍延伸超過部門層次所相關(guān)的最大問題之一是自治和集中控制之間的問題。
作為大多數(shù)大型公司環(huán)境的業(yè)務(wù)文化的一部分,每個(gè)部門或業(yè)務(wù)單位需要彼此獨(dú)立地運(yùn)作。 然而,他們?nèi)匀灰蕾囉诠蚕碣Y源,以及輸入到通用業(yè)務(wù)功能之中的報(bào)告和帳戶信息。
在這樣一個(gè)環(huán)境中,需要所有的消息流量都流過位于總部的一個(gè)集中的消息Broker的集成策略是不合理的。 這不只是一個(gè)技術(shù)上的障礙;它也是公司文化的問題。在一個(gè)松散耦合的業(yè)務(wù)單元環(huán)境中,諸如本地應(yīng)用之間的業(yè)務(wù)流程,或者安全域,被一個(gè)集中化的公司IT功能管理簡直沒有一點(diǎn)道理。組織中的松散耦合業(yè)務(wù)單元需要彼此獨(dú)立地運(yùn)作。他們每一個(gè)都應(yīng)該有其自己的IT功能,而不必須路由所有的消息流量,或代表它的業(yè)務(wù)規(guī)則和安全域的控制, 經(jīng)過一個(gè)集中的集成經(jīng)紀(jì)人在一個(gè)位置或另一個(gè)(第 1 章)。
圖表 1?5 如果使用一個(gè)集中的集線器,分開業(yè)務(wù)單位缺乏必需的自治-和-了集成經(jīng)紀(jì)人
本地業(yè)務(wù)單位和部門需要有對他們自己的局部IT資源的控制,比如在其站點(diǎn)運(yùn)行的應(yīng)用。集成基礎(chǔ)設(shè)施應(yīng)該支持部署拓?fù)鋪碇С志哂袑?shí)用性的業(yè)務(wù)模型。ESB 也提供這種部署模型, 允許本地流量、集成組件以及適配器能夠被本地安裝、配置、加固和管理,并且仍然能夠以一種集成的安全模型一起將本地集成域插入到一個(gè)更大的聯(lián)邦集成網(wǎng)絡(luò)之中。
圖表 1?6 自治的而且公布聯(lián)邦制,ESB 允許橫過組織的交界對合作地同盟的運(yùn)算組織
ESB 的分布式特征是通過從實(shí)際的部署細(xì)節(jié)和底層的連接協(xié)議中抽象出來的將端點(diǎn)定義,以及在那些端點(diǎn)之間的數(shù)據(jù)的編排和路由來達(dá)到的。聯(lián)邦特征則是通過 ESB 能夠隔離和選擇地橫過應(yīng)用域和安全邊界的能力來達(dá)到的。
在一些業(yè)務(wù)模型中,在每一個(gè)遠(yuǎn)程地點(diǎn)都安排有本地的IT職員是不大可能的,雖然仍然需要松散耦合的、自治的聯(lián)邦的集成網(wǎng)絡(luò)。舉例來說明這一個(gè)點(diǎn),我們來想象一下部署在零售行業(yè)中的ESB 的案例。一個(gè)視頻租借鏈可能有數(shù)百或數(shù)千個(gè)包含相同應(yīng)用的地點(diǎn),所有以相同的形態(tài)運(yùn)行的操作涉及到目錄管理、會(huì)計(jì)和報(bào)表等。
圖表 1?7 和數(shù)以千計(jì)遙遠(yuǎn)的儲(chǔ)存一個(gè)視像零售鏈,所有的包含應(yīng)用程序的相同組
使用 ESB,可以建立一個(gè)集成藍(lán)圖來處理遠(yuǎn)程店鋪中的局部應(yīng)用之間的通信。這包括店內(nèi)應(yīng)用的接口定義、消息流量的路由、消息通道的管理、以及安全許可。它還可能包括集成組件,比如應(yīng)用適配器、協(xié)議適配器或者數(shù)據(jù)變換器。這個(gè)集成藍(lán)圖,或稱模板,可以在所有地點(diǎn)進(jìn)行部署和定制,并且獨(dú)立地扮演所有其他店鋪。
圖表 1?8 ESB 配置藍(lán)圖在每個(gè)遙遠(yuǎn)的位置和很遠(yuǎn)地展開配置而且處理
這個(gè)遠(yuǎn)程部署藍(lán)圖的能力并不單針對零售行業(yè),它也可以擴(kuò)展到所有其他行業(yè)的應(yīng)用。聯(lián)邦的集成域的遠(yuǎn)程管理對于在一個(gè)高度分布的環(huán)境中的任何ESB的成功部署都是非常關(guān)鍵的。
安全、可靠的消息聯(lián)結(jié)
除了在每個(gè)店鋪的本地應(yīng)用之間共享數(shù)據(jù)之外,這些遠(yuǎn)程店鋪還需要同總部共享信息以便進(jìn)行帳務(wù)處理和報(bào)表、信用管理以及職員數(shù)據(jù)的追蹤。遠(yuǎn)程店鋪還需要彼此之間共享信息。舉例來說,一個(gè)大型的音像連鎖店可能會(huì)提供這樣的服務(wù),顧客可以選擇從離家近的店租賃影碟,然后在離辦公室近的另一個(gè)店歸還。因此,在同一個(gè)地理區(qū)域內(nèi)的店鋪之間可能會(huì)需要以近乎實(shí)時(shí)的狀態(tài)共享有關(guān)租賃的數(shù)據(jù)。因?yàn)樵谶h(yuǎn)程店鋪和總部之間的衛(wèi)星網(wǎng)絡(luò)通信連接存在較大的反應(yīng)期和彈性,要在總部維護(hù)一個(gè)有關(guān)所有租賃信息的實(shí)時(shí)集中訪問點(diǎn)是不現(xiàn)實(shí)的。那些有關(guān)你只是在兩個(gè)小時(shí)之租借的數(shù)據(jù)需要共享,或者通過遠(yuǎn)程店鋪之間的一個(gè)集成的數(shù)據(jù)共享連接來進(jìn)行訪問。
因?yàn)榭偛亢瓦h(yuǎn)程店鋪之間的連接是通過可靠的消息來達(dá)到的,因此由于不可靠的衛(wèi)星電路所造成的網(wǎng)絡(luò)服務(wù)終端可以從消息層得到補(bǔ)償。也應(yīng)該注意到,對于遠(yuǎn)程店鋪之間來說,通過Internet來建立一個(gè)安全和可靠的消息通道也是可以的。
1.6.11 作為ESB的“原生”數(shù)據(jù)類型的XML
當(dāng)數(shù)據(jù)通過ESB 在應(yīng)用之間流動(dòng)的時(shí)候,XML是一個(gè)表現(xiàn)它們的理想基礎(chǔ)。被應(yīng)用程序的一個(gè)巨大的行列生產(chǎn)而且耗盡的數(shù)據(jù)能以多種的格式存在和包裝方案。有大量的應(yīng)用產(chǎn)生和消費(fèi)的數(shù)據(jù),可以以各種格式或者打包的Schema存在。對ESB來說雖然的確可以依你喜歡的打包形式或者封裝方案來承載數(shù)據(jù),但將途中數(shù)據(jù)表現(xiàn)為XML具有莫大的好處,包括使用能夠結(jié)合來自于不同的源數(shù)據(jù)以創(chuàng)建一個(gè)新的數(shù)據(jù)視圖的產(chǎn)生數(shù)據(jù)的特殊 ESB 服務(wù), 以及針對應(yīng)用間高級數(shù)據(jù)共享的濃縮和重定目標(biāo)。第 4 章將會(huì)探究使用XML功能本好處—將避免一個(gè)組織的應(yīng)用間同步升級的需要—并且更詳細(xì)地討論分布式XML變換之后的基本原理。
ESB通過為途中數(shù)據(jù)在總線之上的應(yīng)用間傳輸?shù)臅r(shí)候提供實(shí)時(shí)吞吐消除了潛伏反應(yīng)問題。目前,最流行的集成方法之一是每夜進(jìn)行批處理。 然而,打包的成批處理集成策略,不管是每夜還是其它,都具有較高的邊際錯(cuò)誤率,并且造成信息獲取的延遲。其結(jié)果是高反應(yīng)期產(chǎn)生獲取了過時(shí)數(shù)據(jù)將使代價(jià)高昂的。第 9 章將詳細(xì)討論這個(gè)問題,并且研究 ESB 可以如何用來將你的業(yè)務(wù)數(shù)據(jù)從每夜批處理模式重構(gòu)為實(shí)時(shí)吞吐模式。
運(yùn)行感知意思是業(yè)務(wù)分析師能夠獲得對業(yè)務(wù)運(yùn)行的狀態(tài)和健康情況的洞察能力。 一個(gè)允許對數(shù)據(jù)在其以某個(gè)業(yè)務(wù)流程中的某個(gè)消息形式在組織中流動(dòng)時(shí)進(jìn)行實(shí)時(shí)跟蹤和報(bào)告的基礎(chǔ)設(shè)施,對于幫助建立運(yùn)行感知是一個(gè)無價(jià)的工具。一個(gè)稱為是業(yè)務(wù)活動(dòng)監(jiān)控 (BAM)的產(chǎn)品門類已經(jīng)出現(xiàn)來解決運(yùn)行感知的這些問題。
使用XML作為ESB的原生數(shù)據(jù)格式的好處之一就是消息沒有被處理為不透明的數(shù)據(jù)塊。如果應(yīng)用和服務(wù)之間的所有數(shù)據(jù)都被格式化為XML文檔,ESB提供的基礎(chǔ)支撐便允許你在ESB之上再構(gòu)建一層高級能力,以獲得對流過你的企業(yè)的業(yè)務(wù)數(shù)據(jù)的實(shí)時(shí)洞察能力。這些能力,不管是否是ESB的固有組成部分,還是有一個(gè)擴(kuò)展來驅(qū)動(dòng),都表現(xiàn)為包括了路由、處理流、以及下層的管線,并且不需要再在其上鎖定一個(gè)第三方的BAM產(chǎn)品的一個(gè)通用基礎(chǔ)設(shè)施的一個(gè)有機(jī)組成部分。
作為ESB的一個(gè)基礎(chǔ)部分的審計(jì)和跟蹤能力允許對在SOA中的所有流動(dòng)的業(yè)務(wù)流程和消息流的健康狀況進(jìn)行監(jiān)控和跟蹤。諸如數(shù)據(jù)緩存、數(shù)據(jù)收集和聚集、以及XML數(shù)據(jù)的可視化表現(xiàn)之類的增值服務(wù),可以用來創(chuàng)建一個(gè)基礎(chǔ)服務(wù),該基礎(chǔ)服務(wù)可以在數(shù)據(jù)在企業(yè)中流動(dòng)時(shí),產(chǎn)生對業(yè)務(wù)流程的狀況洞察的警告、提醒和報(bào)表能力。
圖表 1?9 增值型服務(wù)促成操作的覺察提供對活的業(yè)務(wù)數(shù)據(jù)的即時(shí)洞察
對ESB中的數(shù)據(jù)的根蹤和報(bào)表是通過在業(yè)務(wù)流中定義審計(jì)點(diǎn)來達(dá)到的,然后再對從業(yè)務(wù)消息中收集的重要內(nèi)容在ESB中流動(dòng)時(shí)提供插入點(diǎn)。可追蹤數(shù)據(jù)例子是業(yè)務(wù)消息自身,以及指示某業(yè)務(wù)消息是否通過了某個(gè)特定的業(yè)務(wù)處理步驟的業(yè)務(wù)事件。
高級的增值服務(wù)可以提供數(shù)據(jù)收集服務(wù)、查詢機(jī)制以及報(bào)表能力,它們能夠講所有數(shù)據(jù)進(jìn)行收集、進(jìn)而表現(xiàn)為各種具有意義的形式。XML持久性服務(wù)可以提供緩存和聚集點(diǎn),這樣可以收集將要轉(zhuǎn)換的數(shù)據(jù)從而向其他應(yīng)用提供數(shù)據(jù)輸入,或進(jìn)入到可以被業(yè)務(wù)分析師使用的人可讀的報(bào)表機(jī)制之內(nèi)。這意味著流經(jīng)ESB的數(shù)據(jù)可以進(jìn)行實(shí)時(shí)分析,以提供有關(guān)你的業(yè)務(wù)狀態(tài)的實(shí)時(shí)信息—比如,可以隨時(shí)提供有關(guān)你的供應(yīng)鏈中的存貨的狀態(tài)快照。
區(qū)別是否真正是 ESB 的一個(gè)主要方面是看其是否具有逐漸采用的能力,相對于另一個(gè)“全有-或-全無”的論斷。在 Y2K 之后的開支削減中,數(shù)百萬美元預(yù)算的項(xiàng)目數(shù)目已經(jīng)今非昔比。有一些跡象表明,預(yù)算資金籌備正在開始釋放以解決短期的戰(zhàn)術(shù)性集成需要,但是預(yù)算仍然謹(jǐn)慎地處于一個(gè)執(zhí)行層面。,然而,同時(shí)仍然有一些期望實(shí)現(xiàn)較大的公司范圍集成策略計(jì)劃—這些計(jì)劃嚴(yán)重依賴于集成和現(xiàn)有IT資產(chǎn)的重用。
圖1-10說明了 ESB 可以如何用于小項(xiàng)目中,然后它們都可以進(jìn)入到一個(gè)更大的集成網(wǎng)絡(luò)之內(nèi)。 當(dāng)我們深入閱讀本書的時(shí)候,我們會(huì)詳細(xì)研究這是如何實(shí)現(xiàn)的。
圖表 1?10 ESB 支持逐漸采用的集成,同時(shí)向著一個(gè)策略目標(biāo)工作
ESB 的聯(lián)邦/自治能力也對一次一個(gè)項(xiàng)目采用 ESB的能力有助益。ESB 集成項(xiàng)目漸進(jìn)式的分布部署能夠在朝著一個(gè)更廣的企業(yè)層面的計(jì)劃目標(biāo)的前提下得到立即價(jià)值。
逐漸采用的觀念將進(jìn)一步通過橋接到一個(gè)已有的集成Broker集線機(jī)器和遺留系統(tǒng)Broker來得到進(jìn)一步支持。集成Broker集線器和他們的特點(diǎn)將在第 2 章中詳細(xì)研究。