在我們繼續前進并且犧牲我們的先前努力,丟掉前面的每個技術,并且向失敗舉起我們的雙手之前,還有一條路能夠讓我們能夠利用從學來的寶貴經驗,并且仍然遠離偶然架構—那就是采用ESB。 集成的最佳實踐,已經經過對集成Broker的經驗被精煉,如今還可以結合建立于XML、Web Services、可靠的異步消息、以及分布式的ESB集成組件之上的基于標準的架構來一起使用。 他們一起形成一個高度分布的、松散耦合的集成架構,以提供集成Broker的所有主要功能,卻沒有其所有的障壁。
遠離偶然架構并且使用 ESB重構到的一個統一的和一致的集成骨干,涉及到下面小結描述的步驟。
雖然ESB 確實能夠傳送許多類型的數據格式,但是采用XML作為應用間交換數據的手段 (圖 2-2),如同已經被用在一些傳統的 EAI 方式中一樣,可以由很多好處。我們將會在第 4 章中看到,使用XML可以一勞永逸地隔絕全局的數據格式和接口的變更和偶然架構本身。ESB可以進一步通過檢查XML消息的內容,并且控制其向何處提交,有時候還可以改變提交路徑來包括可能會修改和增加數據的附加服務,一次來促進業務處理。
圖表 2?2 ESB 使用XML來作為應用間共享數據的方式
2.3.2 采用Web ervices并實現 SOA
以 SOA 的方式來思考和規劃在向 ESB重構的一個基本步驟。如圖 2-3 所示,服務級接口的引入在提供了一個公共抽象層來創建接口和實現之間的分離。這樣就通過使用一種通用的接口定義機制,比如Web Services描述語言(WSDL),來減輕了由細粒度服務接口組成的復合業務流程定義的構造的難度。
圖表 2?3 Web 服務和 SOA 提供了一個隔離接口和實現的通用抽象層
雖然服務級接口的抽象是正確方向上的一步,結果仍然是一個路由邏輯密合于應用之內的硬連接 ( 注意在圖 2-3 中,“流程邏輯”仍然黏附于應用)。Web Services中的傳統智慧已經模仿了客戶/服務器模式。甚至在一個Web Services分布式網絡中,一個應用總是另一個 “客戶”。范例用法仍然需要抽象層也包括膠水代碼,比如說“調用服務X上的方法a,然后調用服務Y上的方法 b()….”諸如此類。。
Web Services實現中所確實的東西是將流程路由邏輯從接口定義和應用邏輯中分離出來觀念。如圖 2-4所示,ESB 就提供了那種隔離,并且仍然完全利用SOA。
圖表 2?4 ESB 將業務流程的路由邏輯從接口定義和應用實現中分離出來
通過分離接口定義和流程路由邏輯,我們已經開始看到ESB 形式的總線層(圖 2-5)。通過將流程業務路由邏輯和接口定義放入總線層之內,應用能夠繼續自己集中于實現邏輯。 我們在第 1 章中看到過,ESB 被實際上區分為多個功能層。它為應用間的可靠的、異步的、基于消息的通信提供了一種堅固的底板。也是在這里,流程路由通過基于檢查消息中的XML內容來附加的條件決策點,從而變得具具智能。這個智能路由是被可管理地定義的、可以被修改、并且可以加上增值服務,比如補充數據變換功能。ESB 提供了一個可擴展的集成服務網絡,并且可以無限伸展,同時仍然可以以逐漸增加的方式進行構建
圖表 2?5 ESB 可靠地連接和協調SOA 的服務之間的交互