企业服务总线(ESB)
思考:
1.ESB的定義到底是什么?是一款產(chǎn)品還是一種架構(gòu)模式?
2.ESB有何實際用處?
定義ESB
對于企業(yè)服務(wù)總線(Enterprise Service Bus),目前還沒有公認的定義,根據(jù)供應(yīng)商和來源的不同,有很多種不同的定義,其中包含如下定義:
一種集成架構(gòu)樣式,支持提供者和服務(wù)用戶之間通過由各種點對點連接構(gòu)成的公共通信總線進行通信”
“企業(yè)用來集成應(yīng)用程序環(huán)境中服務(wù)的基礎(chǔ)架構(gòu)。”
“一種架構(gòu)模式,使用面向服務(wù)支持異構(gòu)環(huán)境之間的互操作性。”(圖 1)
圖 1:ESB 架構(gòu)模式分成這幾個主要系統(tǒng)架構(gòu)
ESB 用于服務(wù)虛擬化,通常管理更大的服務(wù)集且位于內(nèi)聯(lián)網(wǎng)內(nèi)部。
何時使用ESB?
有沒有確定何時應(yīng)使用ESB實現(xiàn)的最佳實踐,需要集成三個或更多的應(yīng)用程序或服務(wù)時,可以考慮使用ESB。連接兩個應(yīng)用程序時,點對點集成非常簡單而且更經(jīng)濟劃算。如果要從企業(yè)無法控制的外部服務(wù)提供者獲取服務(wù),也可以考慮使用ESB。然后,可以使用ESB監(jiān)視外部提供者保證的服務(wù)級別協(xié)議。可進一步將服務(wù)合同調(diào)整的影響控制到最小,因為ESB對消息進行必要更改的同時將繼續(xù)提供一個穩(wěn)定的接口。
如果使用多種不同協(xié)議(如果:http、SQAP和FTP)并將它們標準化成一個協(xié)議(如SOAP),ESB可以執(zhí)行必要的協(xié)議轉(zhuǎn)換。如果始終需要將服務(wù)合并成一個架構(gòu)才能接收、處理和生成消息,那么使用ESB也比較合適。如果需要訪問一組預(yù)定義的組件和適配器,ESB也同樣使用,這將支持以標準化方式集成各種協(xié)議和原有應(yīng)用程序。如果需要安全、可靠地處理消息,ESB可以簡化兩個異構(gòu)事務(wù)性數(shù)據(jù)源之間事務(wù)性消息流的實現(xiàn)。
如果需要通過總線將大量數(shù)據(jù)作為大量獨立消息進行發(fā)送,那么使用 ESB 可能存在一些問題。ESB 絕不應(yīng)取代傳統(tǒng)數(shù)據(jù)集成,比如 ETC 工具。將數(shù)據(jù)從一個數(shù)據(jù)庫復(fù)制到另一個數(shù)據(jù)時,使用數(shù)據(jù)集成可能更高效,因為該操作只會不必要地增加 ESB 的負擔(dān)。
如果需要實現(xiàn)長期業(yè)務(wù)流程,ESB 應(yīng)支持無狀態(tài)的消息流。長期運行的業(yè)務(wù)流程是有狀態(tài)的,最好使用 BPEL 和/或 BPMN 實現(xiàn)。這些流程通常無法通過 ESB 實現(xiàn),但可以通過業(yè)務(wù)流程管理系統(tǒng) (BPMS) 實現(xiàn)。
ESB 藍圖
由于缺乏標準化,ESB 市場相當(dāng)混亂。很多產(chǎn)品自稱是 ESB,但是提供的解決方案卻大相徑庭,而且基于不同的架構(gòu)。為了更有效地評估 ESB 產(chǎn)品,我們將分配給 ESB 的各種功能組織成了一個藍圖(圖 2)。
圖 2:企業(yè)服務(wù)總線藍圖
ESB 藍圖不包括“編排”或“流程編排”組件,因為這被視作 BPMS
類別的一部分。它們?yōu)殚L期運行的、有狀態(tài)的業(yè)務(wù)流程提供專用的運行時環(huán)境,這些流程為此進行了優(yōu)化,支持 BPMN 或 BPEL 之類的語言。ESB
應(yīng)該是無狀態(tài)的,并且應(yīng)配置為盡可能高效地處理消息。
操作和管理模塊
該模塊中的以下功能組件支持可靠的企業(yè)服務(wù)總線操作和管理。統(tǒng)計信息與狀態(tài) 提供服務(wù)的 ESB 統(tǒng)計信息,如錯誤數(shù)量、最小和最大響應(yīng)時間以及處理的消息數(shù)。警報 提供一個發(fā)送警報消息的機制,可通過各種通道發(fā)送,因此也可以集成到現(xiàn)有監(jiān)視環(huán)境中。SLA 規(guī)則 是在統(tǒng)計信息與狀態(tài) 功能組件的信息基礎(chǔ)上定義的規(guī)則。支持度量和監(jiān)視 SLA。可以使用警報 組件通知任何 SLA 侵權(quán)。
消息跟蹤 可以在 ESB 中輕松跟蹤消息,應(yīng)在需要時激活,以便將相關(guān)開銷降至最低。消息重新傳遞 確保在預(yù)定義時間后自動重新發(fā)送未及時處理的消息。可以配置嘗試次數(shù)以及它們之間的時間間隔。該組件主要適用于僅持續(xù)一段時間的技術(shù)錯誤,如臨時網(wǎng)絡(luò)中斷。端點故障切換 可以指定一個備用服務(wù)提供者,在主服務(wù)提供者不可用時自動調(diào)用。
負載平衡 可以列出一個邏輯服務(wù)提供者端點的幾個服務(wù)端點。它使用冗余服務(wù)實現(xiàn),根據(jù)定義的策略交替調(diào)用每個請求,可以循環(huán)調(diào)用,也可根據(jù)消息優(yōu)先級和負載依賴關(guān)系進行調(diào)用。
消息限制 可以定義應(yīng)被發(fā)送到服務(wù)提供者的服務(wù)端點的每單元時間內(nèi)的最大消息數(shù)。它通過緩沖 ESB 隊列中超過閾值范圍的消息來防止服務(wù)提供者在高峰時段重載。消息限制 還支持消息優(yōu)先級,這樣可以確保始終先處理高優(yōu)先級的消息。記錄與報告 支持記錄消息,方便以后顯示。它還提供功能審計。
配置管理 支持在操作系統(tǒng)上安全地調(diào)整 ESB 配置,同時始終維護配置的完整性。可在操作過程中調(diào)整和替換構(gòu)件和屬性。還可以保存變更歷史記錄,這樣 ESB 服務(wù)可以隨時回滾到早期狀態(tài)。服務(wù)注冊表 可以在 ESB 上注冊和管理服務(wù)。高可用性 確保 ESB 提供的服務(wù)是故障安全的,與運行這些服務(wù)的服務(wù)器的狀態(tài)無關(guān)。
錯誤醫(yī)院 是那些經(jīng)過多次重新傳遞嘗試仍無法處理的消息的目的地,可以在這里查看、更正(如果需要的話)以及重新處理這些消息。部署 可在 ESB 上自動安裝服務(wù)。特定于環(huán)境的參數(shù)(如端點 URI)通常是由該組件重寫的。服務(wù)使用情況 支持記錄服務(wù)使用情況并向用戶收取費用。
調(diào)節(jié)模塊
調(diào)節(jié)模塊包含用于實現(xiàn) ESB 服務(wù)消息流的功能組件。消息路由 支持根據(jù)消息的內(nèi)容將消息其轉(zhuǎn)發(fā)至特定服務(wù)端點。如果使用的協(xié)議或消息格式支持與消息正文無關(guān)的消息頭區(qū)域,轉(zhuǎn)發(fā)標準可能源于消息正文或消息頭。
根據(jù)消息頭進行路由可能是一個極具吸引力的選擇,可提高服務(wù)性能和可擴展性,因為直接訪問消息頭比解析來自消息正文的路由信息更高效。這對于大型消息來說尤其重要。
消息轉(zhuǎn)換 支持從一種消息格式轉(zhuǎn)換為另一種適用于文本和二進制消息的格式以及 XML 格式。此外,還可以從文本(如 CSV
格式)轉(zhuǎn)換為 XML,或者從 XML 轉(zhuǎn)換為文本(如 CSV 格式)。XML 轉(zhuǎn)換使用著名的 XSLT 標準,XSLT
支持對轉(zhuǎn)換進行聲明性描述,并且擁有帶拖放功能的圖形資源以實現(xiàn)創(chuàng)建目的。
XSLT 轉(zhuǎn)換的主要缺點是,如果處理大型文檔,內(nèi)存使用量過高,這可能會限制解決方案的可擴展性。如果 ESB 提供支持 XML 流轉(zhuǎn)換的選項(比如,通過 XQuery),那就更好了。
服務(wù)調(diào)出 可以在 ESB 中訪問消息流中的其他服務(wù),比如增強一條消息。服務(wù)可能是一個 Web 服務(wù),但 ESB 可以如您所愿地支持直接調(diào)用 ESB 中本地安裝的程序代碼(如 Java 類方法)。可靠的消息傳遞 支持使用隊列或 WS* 標準(如 WS-ReliableMessaging)可靠地傳遞消息。
協(xié)議轉(zhuǎn)換 意味著無需任何編程工作即可從某個通信協(xié)議切換到另一個協(xié)議,比如,從 TCP/IP 切換到 HTTP。消息驗證 確保消息是有效的。在 XML 中,這意味著消息包含規(guī)范定義的 XML 并對應(yīng)于特定的 XML 模式或 WSDL。不過,ESB 還提供了其他驗證方法,如 Schematron 或規(guī)則引擎。
消息交換模式 (MEP) 支持消息交換模式,如同步和異步請求/應(yīng)答、單向調(diào)用以及發(fā)布/訂閱。結(jié)果緩存 可以在緩存中保存服務(wù)調(diào)用結(jié)果,這樣返回同樣結(jié)果的后續(xù)調(diào)用可從緩存獲得應(yīng)答,無需再次調(diào)用服務(wù)。如果數(shù)據(jù)是靜態(tài)的或者需要零星或少許的改動,此功能尤為適合。可大大減少像訪問原有系統(tǒng)這樣的開銷可能較大的操作。
事務(wù) 支持 ESB 通過消息處理提供事務(wù)完整性。ESB 用于支持可靠消息傳遞 的持久隊列通常作為事務(wù)數(shù)據(jù)源,因此可參與異構(gòu)事務(wù)。此外,ESB 還提供了一個分布式事務(wù)管理器,可使用兩階段提交協(xié)議通過異構(gòu)數(shù)據(jù)源協(xié)調(diào)分布式事務(wù)。
消息重新排序 使屬于一個整體但順序不對的消息流可以重新排序。在并行處理消息的面向消息的解決方案中,消息進入 ESB 的順序可能會丟失。如果順序?qū)τ诜?wù)提供者很重要,消息重新排序 可以合并到消息流中。重新排序器包含一個內(nèi)部緩沖區(qū),緩沖區(qū)對消息進行處理,直至排序完成且可發(fā)送。
直通式消息傳遞 可以令 ESB 高效轉(zhuǎn)發(fā) ESB 消息。如果要將 ESB 用于服務(wù)虛擬化,并且將消息從服務(wù)使用者原樣轉(zhuǎn)發(fā)至服務(wù)提供者,這將非常有用。在這種情況下,如果 ESB 不接觸消息,只是簡單地按原樣傳遞,該功能非常適用。
安全模塊
該模塊使用大量組件支持傳輸級和消息級安全性。當(dāng)服務(wù)使用者訪問 ESB 中的服務(wù)時,身份驗證 驗證其身份,并驗證針對服務(wù)提供者的 ESB 身份驗證。授權(quán) 為服務(wù)提供了一個授權(quán)系統(tǒng),通常可通過 XACML 對這些服務(wù)進行配置,以便分配給用戶或角色。
安全調(diào)節(jié) 支持交互,通過將一個域的憑證轉(zhuǎn)換成另一個域的相應(yīng)憑證在安全域之外進行通信。加密/解密 支持消息內(nèi)容的加密和解密。
適配器/傳輸模塊
該模塊包括的適配器可通過服務(wù)托管模塊連接 ESB 提供的服務(wù)。假設(shè) ESB 從無到有提供一組適配器,客戶或第三方開發(fā)人員還可以開發(fā)其他適配器以滿足具體的用戶需求。
服務(wù)托管模塊
該模塊支持在 ESB 上直接安裝和操作服務(wù),如果 ESB 基于應(yīng)用服務(wù)器,該模塊通常是必需的。服務(wù)容器 提供一個或多個容器,在其中安裝服務(wù)和管理生命周期。它提供可訪問技術(shù)橫截面功能(如事務(wù)和安全性)的服務(wù)。
組件模型 提供了一個抽象的組件模型(如 Java EJB、Java Spring Framework 或 Microsoft COM+),在此基礎(chǔ)上創(chuàng)建服務(wù)。
ESB 的實際應(yīng)用場景
圖 3 所示的符號用于以圖形化方式描述各種場景,無需參考產(chǎn)品或工具。這些符號來自于 [1],根據(jù) ESB 功能不斷添加。
圖 3:ESB 符號
場景 1 — 服務(wù)虛擬化
服務(wù)使用者往往更喜歡硬連接實際服務(wù)端點,特別是在 BPEL
流程中,因為使用提供的工具可輕松執(zhí)行。然而,在運行時對服務(wù)器地址的改動絕對不能產(chǎn)生需要在服務(wù)客戶端進行重新部署的改動。這個問題的一個非常好的解決
方案是使用 ESB 虛擬化端點。圖 4 展示了這個場景,服務(wù)提供者提供的 Web 服務(wù)接口不再由服使用者直接使用,而是通過 ESB
來使用。ESB 可以完全按照為潛在的服務(wù)使用者提供接口那樣提供接口。
圖 4:使用額外的監(jiān)視攔截器虛擬化服務(wù)
在 ESB 配置過程中可以輕松實現(xiàn)需要對端點地址進行的任何改動,因此服務(wù)使用者可以像以前一樣繼續(xù)運行。然而,ESB
需要能夠合并到現(xiàn)有消息流中。服務(wù)虛擬化還支持使用擴展到服務(wù)統(tǒng)計信息的 ESB 監(jiān)視功能,以便檢查 SLA
合規(guī)性,如果不合規(guī)的話,則配置適當(dāng)?shù)牟僮鳌H绻?wù)提供者對服務(wù)合同進行了更改但不想影響服務(wù)使用者,可以執(zhí)行服務(wù)虛擬化。在這種情況下,對交換的消息
進行簡單的轉(zhuǎn)換即可解決此問題。
場景 2 — 服務(wù)支持
當(dāng)納入具有功能接口的服務(wù)時,通常會出現(xiàn)的情況是,服務(wù)使用者和服務(wù)提供者在協(xié)議級別使用不同的語言。圖 5
介紹了兩個服務(wù)提供者,從技術(shù)上來說它們提供的是相同的服務(wù),一個提供的是 SQL 接口,另一個提供的是 FTP
接口。可以將企業(yè)服務(wù)總線用作協(xié)議轉(zhuǎn)換器以保持接口不變,因為它提供的方法可確保使用定義的接口。
圖 5:服務(wù)支持
與場景 1 類似,如果通信協(xié)議將來發(fā)生變化,ESB 可確保服務(wù)使用者或服務(wù)提供者端無需后續(xù)更改。
場景 3 — 安全的消息處理
ESB 還能支持傳統(tǒng)集成場景,主要目的是將消息從一個系統(tǒng)轉(zhuǎn)發(fā)到另一個系統(tǒng)。在圖 6 所示的場景中,ESB 使用來自外部隊列的消息,使用對一個 Web 服務(wù)的服務(wù)調(diào)出來豐富這些消息,然后通過數(shù)據(jù)庫適配器將消息發(fā)送到目標系統(tǒng)。
圖 6:安全的消息處理
ESB 中的處理是事務(wù)性的,意味著將消息流配置為像其他參與者一樣參與分布式 XA 事務(wù)。使用隊列中的消息時將啟動事務(wù),事務(wù)還包含數(shù)據(jù)庫適配器執(zhí)行的數(shù)據(jù)庫操作。如果消息流成功完成,緊接著會提交分布式事務(wù)。
場景 4 — 服務(wù)版本控制
服務(wù)往往隨著時間而改變,通常需要引入一個新的不兼容版本。在這些情況下,可以使用 ESB 執(zhí)行從“舊”接口到“新”接口的轉(zhuǎn)換。在圖 7
所示的場景中,服務(wù)提供者引入了服務(wù)的 2.0 版本,服務(wù)使用者 B 立即安裝了該版本。服務(wù)使用者 A 一直使用接口 1.0,不想切換到 2.0
版本,因為不會給業(yè)務(wù)帶來任何附加值。然而,服務(wù)提供者不想讓這兩個版本并行運行。同時運行兩個接口可能比較困難,甚至在技術(shù)上不可行,而且會導(dǎo)致不必要
的資源消耗。
圖 7:服務(wù)版本控制
如果 ESB 通過直通式傳遞(類似于場景 1)直接提供 2.0 版本,情況可能比較簡單。同時,在適應(yīng)現(xiàn)有消息流的同時必須提供接口 1.0
版本,這樣將不再從服務(wù)提供者處調(diào)用 1.0 版本。相反,消息是從 1.0 版本轉(zhuǎn)換到
2.0,然后發(fā)送給新服務(wù)。這種轉(zhuǎn)換可能相對比較復(fù)雜,具體取決于兩個版本之間的差異有多大。為了提供調(diào)用 2.0
版本所需的所有信息,可能需要額外豐富 1.0 版本消息。
需要維護 ESB 中的轉(zhuǎn)換和接口 1.0,直至沒有服務(wù)使用者使用舊接口。之所以在 ESB 中執(zhí)行這種轉(zhuǎn)換而不是在服務(wù)提供者中從版本 1.0 映射到 2.0,具體原因如下:
映射是技術(shù)問題,與業(yè)務(wù)相關(guān)問題無關(guān)
不會影響外部服務(wù)提供者。
ESB 使舊接口的使用透明。
當(dāng)所有服務(wù)使用者都改用接口 2.0 后,無需更改服務(wù)提供者。
總結(jié)
ESB 是一個中間件解決方案,使用面向服務(wù)的模型來促進和支持異構(gòu)環(huán)境之間的互操作性。沒有規(guī)范準確定義了什么是 ESB
或者它應(yīng)該提供什么功能。雖然 ESB 主要與“調(diào)節(jié)”和“集成”這類概念相關(guān),但它還適合作為一個平臺以類似于應(yīng)用服務(wù)器的方式提供服務(wù)。ESB
代表被稱作“集成”和“應(yīng)用服務(wù)器”的產(chǎn)品類別的整合。
ESB 的一個關(guān)鍵特性是服務(wù)虛擬化。本文提出的 ESB 藍圖提供了各種功能的有序排列,構(gòu)成了評估 ESB 產(chǎn)品的基礎(chǔ)。
要點
企業(yè)服務(wù)總線應(yīng)被視為一個架構(gòu)樣式或模式,而不是一款產(chǎn)品。
ESB 沒有定義或規(guī)范,因此也沒有標準。
ESB 可幫助實現(xiàn)系統(tǒng)間的松散耦合。
ESB 上的服務(wù)是無狀態(tài)的。長期運行的流程不屬于 ESB,但是在使用 BPEL 和 BPMN 之類語言的 BPM 系統(tǒng)中受支持。
“誤用”ESB 來執(zhí)行批處理時應(yīng)小心謹慎,因為可能會對性能產(chǎn)生負面影響。
參考資料
[REF-1] http://www.oracle.com/technetwork/cn/articles/soa/ind-soa-esb-1967705-zhs.html
總結(jié)
以上是生活随笔為你收集整理的企业服务总线(ESB)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字图像处理之位图在计算机中的存储结构
- 下一篇: 【无线电】摩尔斯电码的快速记忆法