ESB:
在實踐中,要使得SOA得以運轉(zhuǎn),你必須有調(diào)用服務(wù)的方法,這個基礎(chǔ)設(shè)施就是SOA的技術(shù)支柱。注意,ESB也可以是異質(zhì)的,即使是Web Service這樣的標準,其多個實現(xiàn)之間也會有差異。
ESB的職責(zé)是,使得消費者能夠調(diào)用供應(yīng)者相應(yīng)的服務(wù)。它包括了如下任務(wù):
n 提供可連續(xù)性
n 數(shù)據(jù)格式轉(zhuǎn)換
n (智能)路由
n 處理安全
n 處理可靠性
n 服務(wù)管理
n 監(jiān)測和日志
ESB的主要角色是提供互操作性。因為ESB集成了不同平臺和編程語言,所以該角色的基礎(chǔ)職能就是數(shù)據(jù)格式轉(zhuǎn)換,TB目前僅僅是對java來說的,因為需要引入jar包,后來開發(fā)了個Implement,據(jù)說可以直接調(diào)用,囧,其實本來就不該依賴jar包。數(shù)據(jù)轉(zhuǎn)換并不是一項輕松地任務(wù),尤其是把性能問題結(jié)合起來考慮的時候。通常做法是引入一個特定的格式,所有單平臺和API都映射到該格式上。對Web Sservice來說,這種格式通常是SOAP,另外現(xiàn)在有了hessian。
另一項基本任務(wù)就是路由。一定要有某種方法從消費者向供應(yīng)者發(fā)起服務(wù)調(diào)用,然后從供應(yīng)者向消費者把答復(fù)傳遞過來,TB有一個基于mina的超強網(wǎng)絡(luò)框架,據(jù)說這個東西很好用。
ESB的其他職責(zé)都是對“提供互操作性”這個核心任務(wù)的擴展。
ESB職責(zé)詳述
數(shù)據(jù)映射
松耦合的ESB通常要求:只有少數(shù)基礎(chǔ)的,穩(wěn)定的數(shù)據(jù)類型被定義為公共數(shù)據(jù)類型。對所有其他信息類型來說,供應(yīng)者都要定義自己的數(shù)據(jù)類型。另外,數(shù)據(jù)類型的版本劃分會導(dǎo)致如下情形:在同樣的供應(yīng)者提供的服務(wù)中,對同樣的數(shù)據(jù)使用不同數(shù)據(jù)類型。
智能路由
路由,可能也會包括負載均衡和實效備援等方面,下面會有討論。另外,我們可能還需要路由信息的不同方法,例如,消息可以被賦予不同的優(yōu)先級,或者,甚至根據(jù)西歐阿西內(nèi)容的不同給予不同處理。后者被稱為“基于內(nèi)容的路由”(CBR)。
要處理基于內(nèi)容的路由,要求ESB至少對部分服務(wù)有語義方面的理解。換句話說,不光供應(yīng)者和消費者在依賴某個服務(wù)的確切接口??梢酝ㄟ^給ESB加上些能處理的公共屬性。但是,為了伸縮性,這些屬性必須是消息頭的一部分。比如SOAP的請求頭。
處理安全
處理可靠性
不同協(xié)議提供了不同形式的可靠性。協(xié)議并不能保證消息傳遞“有一次且只有一次”。實際上,Web Services 的HTTP協(xié)議內(nèi)生就是無法保證消息的傳遞。
ESB應(yīng)該自己定義處理可靠性問題。ESB本身也能添加一些機制來改變協(xié)議的行為。(參考《ESB的消息交換模式》)。
服務(wù)管理
當SOA范圍擴展時候,遲早會碰到管理所有服務(wù)的問題。如果分析師和設(shè)計師在尋求找到既存服務(wù)并且在新的業(yè)務(wù)流程中重用它們的方法,該問題由業(yè)務(wù)驅(qū)動;或者,該問題由技術(shù)驅(qū)動,可能有一個技術(shù)需求,要求能夠部署和運行一個服務(wù)基礎(chǔ)設(shè)施。(UDDI),貌似和ESB關(guān)系不大,其實是服務(wù)的管理。
監(jiān)測和日志
ESB是運轉(zhuǎn)業(yè)務(wù)流程和技術(shù)心臟,實施、調(diào)試和維護本地過程的方法,現(xiàn)在都分布到了許多系統(tǒng)上。所以,為ESB開發(fā)日志和監(jiān)測功能是必須的、至少應(yīng)該建立諸如關(guān)聯(lián)ID之類的概念,以及在分布式系統(tǒng)上支持監(jiān)測和調(diào)試的工具。
監(jiān)測和日志應(yīng)該包括哪個消費者調(diào)用了哪個服務(wù),以及一個具體的服務(wù)調(diào)用進行了多長時間,這些對于撤銷服務(wù)和監(jiān)控服務(wù)非常重要。
業(yè)務(wù)活動監(jiān)測(BAM)
ESB使得“業(yè)務(wù)活動監(jiān)測“稱為成為可能。ESB使你可以監(jiān)測消息,即時了解業(yè)務(wù)的狀態(tài),從而非常迅速的作出反應(yīng)。比如login的某些服務(wù)調(diào)用時間,調(diào)用次數(shù)等,這對于我們的環(huán)境更多的是監(jiān)控的作用,不過有些監(jiān)控可以轉(zhuǎn)換為商業(yè)行為。
ESB之間的差異
點對點與中介
區(qū)分ESB技術(shù)的一個重要方法是看它們?yōu)槲锢磉B接提供的耦合度。消費者必須知道服務(wù)提供者的確切地址嗎?或者,ESB提供了某種機制,使得消費者可以送達正確的供應(yīng)者嗎?
參考《松耦合》中的物理連接方式
協(xié)議驅(qū)動對比API驅(qū)動的ESB
使用前者,ESB定義一個協(xié)議,供應(yīng)者消費者根據(jù)這個協(xié)議發(fā)送和接收消息。比如,Web Services的SOAP協(xié)議。
使用后者,ESB定義平臺相關(guān)的API,供應(yīng)者消費者使用這些API來進行服務(wù)實現(xiàn)和服務(wù)調(diào)用。
這兩者有很大的不同。
當采取協(xié)議時,ESB的責(zé)任只需要定義協(xié)議,而相應(yīng)的轉(zhuǎn)換工具(也許已經(jīng)有標準工具,也有可能要消費者和供應(yīng)者自己實現(xiàn))需要自己選擇。而且,協(xié)議變化了,需要重新映射。通常,協(xié)議驅(qū)動的方法帶來分布式通信模型的第三個層次。在模型的底層,有一個相對穩(wěn)定的協(xié)議;在頂層,有一個調(diào)用和實現(xiàn)服務(wù)的API;在中間,有一個層負責(zé)將API映射到協(xié)議。(在互聯(lián)網(wǎng)上可以找到相同的層級結(jié)構(gòu)。傳輸層包含了穩(wěn)定的HTTP(S)。要通過這個協(xié)議發(fā)送數(shù)據(jù),不同的供應(yīng)商提供了消費客戶端(瀏覽器)或?qū)崿F(xiàn)工具,所有這些提供了針對諸如Java、HTML等平臺相關(guān)接口的映射)。協(xié)議驅(qū)動的ESB可能導(dǎo)致這么一個情形:
每個消費者和供應(yīng)者都將ESB規(guī)定的協(xié)議映射到平臺特定的業(yè)務(wù)接口上,java中我們使用一些代碼把java接口轉(zhuǎn)換為web service協(xié)議,一般都已經(jīng)有些成熟的開源框架,比如.NET就可能使用WCF,一般,沒必要一個業(yè)務(wù)系統(tǒng)去完全實現(xiàn),這相當于是一個協(xié)議到API的映射。
當ESB負責(zé)API時,ESB團隊需要將服務(wù)調(diào)用和服務(wù)實現(xiàn)映射成格式良好的參與者可以通過ESB發(fā)出的消息。供應(yīng)者和消費者能集中精力在業(yè)務(wù)上。
。。。。。。。。。。。。。
Web Services內(nèi)生是協(xié)議驅(qū)動的,所有的協(xié)議都會隨著時間而變化,所以協(xié)議更改會產(chǎn)生缺乏互操作性的問題(超過50個的不同規(guī)范)。所以,使用Web Services的公司遲早都要考慮采用作為ESB一部分的映射層。讓一個中央團隊提供在業(yè)務(wù)API和協(xié)議API之間進行映射的解決方案,不過這些API也可能會變得非常不同。
API驅(qū)動的典型例子就是tair。
總結(jié)
l ESB是SOA的基礎(chǔ)設(shè)施
l ESB的目的是提供互操作性(連接性、數(shù)據(jù)映射和路由),以及其他一些附加服務(wù),如安全、監(jiān)測等。
l ESB是異質(zhì)的
l ESB是協(xié)議驅(qū)動還是API驅(qū)動,這是個基本決策
l 協(xié)議驅(qū)動的ESB定義供應(yīng)者和消費者必須遵守的協(xié)議,但是,如何遵守協(xié)議由供應(yīng)者和消費者決定。ESB和被連接系統(tǒng)之間的解耦方式使得他們不共享任何代碼,所以ESB不必為各個系統(tǒng)部署程序可。缺點是,協(xié)議的任何變化都迫使供應(yīng)者和消費者作出相應(yīng)更新
l API驅(qū)動的ESB為供應(yīng)者和消費者提供API,它被用來實現(xiàn)調(diào)用服務(wù)。這使得協(xié)議的細節(jié)透明,但要求ESB按某種方式向供應(yīng)商和消費者部署代碼
l ESB可以提供各種增值服務(wù),其中,最重要的是分布式調(diào)試能力
l 業(yè)務(wù)活動監(jiān)測(BAM)使你能監(jiān)測ESB,這樣你就能實現(xiàn)了解自己的業(yè)務(wù),相應(yīng)作出反應(yīng)。這樣可以創(chuàng)造一些商業(yè)機會和市場優(yōu)勢。