什麼是ESB
企業服務總線(Enterprise Service Bus,ESB)的概念是從面向服務體系架構(Service Oriented Architecture, SOA)發展而來的。SOA描述了一種IT基礎設施的應用集成模型;其中的軟構件集是以一種定義清晰的層次化結構相互耦合。一個ESB是一個預先組裝的 SOA實現,它包含了實現SOA分層目標所必需的基礎功能部件。web
在企業計算領域,企業服務總線是指由中間件基礎設施產品技術實現的、 經過事件驅動和基於XML消息引擎,爲更復雜的面向服務的架構提供的軟件架構的構造物。企業服務總線一般在企業消息系統上提供一個抽象層,使得集成架構師可以不用編碼而是利用消息的價值完成集成工做。編程
企業服務總線提供可靠消息傳輸,服務接入,協議轉換,數據格式轉換,基於內容的路由等功能,屏蔽了服務的物理位置,協議和數據格式。安全
什麼是SOA
面向服務的體系結構(Service-Oriented Architecture,SOA)是一個組件模型,它將應用程序的不一樣功能單元(稱爲服務)經過這些服務之間定義良好的接口和契約聯繫起來。接口是採用 中立的方式進行定義的,它應該獨立於實現服務的硬件平臺、操做系統和編程語言。這使得構建在各類這樣的系統中的服務能夠一種統一和通用的方式進行交互。服務器
實現SOA的經常使用技術
實現SOA架構的經常使用技術有Web Services,JMS和BPEL等。網絡
- ESB技術。企業服務總線(Enterprise ServiceBus,ESB)是構建基於SOA解決方案時所使用基礎架構的關鍵部分,是由中間件技術實現並支持SOA的一組基礎架構功能。它是一種爲進 行鏈接服務提供的標準化的通訊基礎結構。基於開放的標準,爲應用提供了一個可靠的、可度量的和高度安全的環境,並可幫助企業對業務流程進行設計和模擬。對 每一個業務流程實施控制和跟蹤、分析並改進流程和性能。目前各大IT公司都推出了基於本身的平臺工具的ESB產品,如IBM的WebSphere ESB、BEA的AqusLogic Service Bus等。除此以外,也出現了衆多的開源ESB產品,如Mule、ServiceMix和Apache Synapse等。
- web Services技術。Web Services主要是爲了使原來各孤立的站點之間的信息可以相互通訊、共享而提出的一種接口。該接口隱藏了服務實現的細節,容許經過獨立於服務實現、獨 立於硬件或軟件平臺、獨立於編寫服務所使用的編程語言的方式使用該服務。Web Services能夠經過HTTP、SOAP(XML)、SMTP等協議的組合被訪問,利用標準網絡協議和XML數據進行通訊,具備良好的普適性和靈活 性,這使得基於web Services的應用程序具有鬆散耦合、面向組件和跨技術實現的特色例5。Web Services技術的主要目標是在各類異構平臺的基礎之上構建一個一樣的、與平臺與語言無關的技術層,各類應用均可以靠這個技術層來實施彼此的鏈接和集 成。
- JMS技 術。Java消息服務(Java Message Ser.vice,JMS)是訪問企業消息系統的標準API,是Sun公司提出的Java消息服務規範,是用於訪問消息系統的不依賴於某個具體廠商的 API,它提供給應用程序建立、發送、接受和瀆取消息的接口,具體實現能夠不一樣。JMS技術採用異步通訊模式,發送消息者將須要變動的數據消息提交到消息 平臺後,就完成了本身的任務,就能夠進行其餘的操做。不須要等待服務器端的消息處理結果。這時即便網絡出現故障甚至服務器崩潰也不會形成數據的丟失或不一 致,消息會保存在消息隊列中直到被最終接收。
SOA的環境
從下面的圖中來看SOA是實現架構:架構
圖:SOA部署環境圖負載均衡
咱們從下向上看:異步
- Business Systems:最下邊也就是咱們的業務系統,能夠是ERP,能夠是CRM也能夠是OA等咱們正在使用的業務系統。
- Low Level Services:低層次服務,就是咱們直接暴露出來並無通過加工處理的服務,好比說一個數據的抽取、一個業務模塊的管理,也就是比較細粒度的服務。
- Composite Services:綜合服務,能夠理解成更高層次的服務,由於接口暴露出來後並非直接給應用程序調用或者是給其它服務使用,固然那樣也是能夠的。咱們對 低層次的服務進行必要的封裝,造成高層次的服務,好處是顯而易見的,安全性、應用邏輯的封裝,必要的負載,也就是說,更高層次只須要關心他須要的接口,至 於如何實現,經過多少細粒度的服務完成這個不是它所關心的東西。
- Orchestrated Business Processes:業務流程,也就是咱們常說的BPM,有了上邊的解釋,這一部分就很清晰了,對於用戶來講,好比他經過互聯網交話費,他只須要確認本身 已經交成功就能夠了,也就是說,頁面上有了相應的提示,OK,他就能夠去作其它事情了,而下邊須要如何處理,怎樣走流程,就是按照BPM中設計好的流程執 行。
- ESB:從圖上看ESB放在了最左邊,也就是上面幾個應用的左邊,並且所有包含在內,那麼也就是說,ESB處理的就是各個層次之間的通訊,包括路由、協議轉換和消息傳遞等。
- Presentation Services:表示層服務,其實這個就很容易理解了,也就是咱們對外暴露的接口或者服務內容,能夠是一個jms、一個webservice調用、甚至是一個頁面。
ESB解決的問題
當你的應用像下面同樣時,這個時候就須要考慮使用ESB了,如圖:編程語言
圖:未使用ESB的應用架構工具
各個應用系統之間的調用造成了一張網,沒有邏輯,隨着業務的增長,維護簡直就是一場惡夢。
圖:使用ESB中介和代理以後
各個應用的邏輯很清晰,每一個應用都只須要關心如何暴露本身的服務,而調用的應用只須要知道如何調用服務,至於怎麼作,去找誰,則徹底交給ESB來完成。
開源ESB
如下是幾個比較流行且好用的開源的esb:
- Mule ESB:MuleSoft是Mule ESB建立者。Mule ESB是一種普遍的開源ESB下載。
- WSO2 ESB:WSO2 ESB旨在極端輕量型和可擴展性。它包括服務交互圖形編輯和XML支持。
- Apache ServiceMix ESB:Apache Service Mix ESB以Java業務集成爲標準爲基礎,支持Spring。
如何選擇ESB
全部的ESB產品都應該能夠構建和部署服務。包括對遺留系統的整理、消息的路由、消息格式的轉換、執行協議的調解等。
首先咱們要看ESB是否具備如下特性:
- 互通性
- 抽象化
- 資源位置的虛擬化
- 擴展能力和管理服務
- 是否具備平臺無關性,即跨平臺
- 鬆耦合
等。
上面列出的每每很評估,可是ESB自己具備的特性每每更容易識別和評估。
ESB所必須具有的功能:
擴展的功能有:
- 資源適配器
- 可靠的消息傳遞
- 事件處理
- 交易的完整性管理
- 消息格式調解
- 負載均衡
- 消息驗證
- 能力調解
等。
其實,對於如何選擇自己就是一個跟業務相關的問題,以肯定你是否選擇ESB以及選擇什麼樣的esb來知足你的應用需求。
- 你選要集成三個或者更多的應用或服務嗎?若是你須要在兩個應用間通訊,使用點對點集成更容易。
- 將來你真的須要插入更多的應用嗎?若是是須要的,那麼你能夠選擇使用ESB。
- 你是否須要使用不止一種類型的通訊協議?若是是多種協議,那麼能夠選擇使用ESB。
- 你須要象分叉和彙集消息流或者基於內容的路由的消息路由功能嗎?許多應用不須要這些擴展。
- 你須要經過其餘應用爲消費發佈服務嗎?若是須要能夠考慮選擇ESB。
- 你擁有多於10個的應用要集成嗎?若是須要能夠考慮選擇ESB。
- 你真的須要ESB的可擴展性嗎?若是須要能夠考慮選擇ESB。
以上僅僅是列出了想到的一些問題,具體的狀況還須要根據具體的需求進行分析和處理,若是簡單的業務其實沒必要「大炮打蚊子」,畢竟合適纔是最好的!