面向服務體系
SOA (面向服務體系)是近期推動應用和業務集成領域產生巨大飛躍的新技術之一。 SOA 定義了一系列詳盡的體系規范、范例和實現應用程序間進行松散耦合交互的最佳准則。
SOA 基於定義明確的接口,促進多個應用程序間的松散耦合交互。服務的實現是獨立的,且不依賴上下文信息以及其他服務的狀態。服務間數據交換主要基於文本類型的格式,使用基於標准的消息模型。服務自身並不知道服務提供者和服務消費者之間傳輸級的通訊交互。
盡管不是強制要求,當今大部分流行的基於 SOA 的系統都利用了 Web 服務以及近似技術為服務間交互提供必要的管道管理。 WSDL ( Web 服務定義語言)扮演了主要的通訊模型角色; SOAP 扮演了消息承載協議、 HTTP 扮演了網絡傳輸協議。當然,這並不意味著你必須利用上述技術實現基於 SOA 的系統。另外,有些術語之前就已經存在了,所以很多企業已利用類似的體系實現了系統的松散耦合交互。不管怎樣,主要的不同點在於我們現在已經有標准協議、工具集和軟件了,使面向服務體系更健全。
SOA 原則與面向對象范式、原則有著顯著不同。主要不同在於服務間交互的接口被定義了更多面向數據的行為。一個孤立的服務也許會采用面向對象原則和技術,但是,服務之間的交互很少采用這些手段。相反,這些接口更適合於基於文檔的交換。面向對象的行為是綁定數據,而面向服務從行為中分離數據。
企業服務總線
ESB (企業服務總線)為面向服務體系提供了基礎架構。通過設計工具定義服務間交互和規則, ESB 為部署和發現服務提供了運行時環境。
在 ESB 的世界中,服務不會直接彼此交互。“ ESB 運行時”作為一個仲裁者在服務間松散的耦合它們。“ ESB 運行時”將實現協議綁定、消息傳輸、消息處理,等等。
一個服務總線將包括下列關鍵項:
·為服務提供傳輸綁定
·定義和發現已部署服務
·在服務間基於規則的路由和編排消息
·包括文檔傳遞在內的增值服務等
大部分的 ESB 提供商基於自己的 SOA 提議來開放標准和技術,包括多種 Web 服務標准和協議。他們提供多種調用服務的傳輸綁定,包括 HTTP 、 FTP 以及 JMS 等等。大部分 ESB 用戶利用 WS-BPEL ( Web 服務的業務流程執行語言)來了解已部署服務之間是如何實現業務流程的。 ESB 提供商同時也提供服務質量特性,包括容錯、故障轉移、負載平衡、消息緩沖等等。
Java 業務集成
JBI ( Java 業務集成)的提出是基於面向服務體系提倡的方法和原則,為了解決 EAI 和 B2B 若干問題的 Java 標准。當前版本( 1.0 )是 2005 年 8 月通過的 JSR ( Java 規范需求) 208 定案。商業和開源界都歡迎 JBI 成為他們 ESB 產品的集成標准。
基於仲裁者體系
JBI 定義了基於插件方式的架構,以便服務能融入“ JBI 運行時”環境。 JBI 提供了詳細的接口,使服務能與“ JBI 運行時”環境交互。這些服務要為“ JBI 運行時”環境暴露接口,以便“ JBI 運行時”環境為服務路由消息。“ JBI 運行時”環境在部署在 SOA 環境中的服務間扮演仲裁者的角色。
在同一 JVM 中,“ JBI 運行時”核心主要包括如下組件:
·組件框架:組件框架把不同類型的組件部署到“ JBI 運行時”。
·歸一化消息路由器:歸一化消息路由器利用標准機制實現服務間消息交換。
·管理框架:管理框架基於 JMX 進行部署、管理以及監控“ JBI 運行時”中的組件。
組件模型
JBI 在“ JBI 運行時”環境中定義了兩種組件:
服務引擎組件:該組件負責實現業務邏輯和其他服務。服務引擎組件在其內部可使用多種技術和設計模式。服務引擎組件可提供數據傳輸和轉換這種簡單的基礎服務,也可實現像 WS-BPEL 實例一樣復雜的業務處理。
綁定組件:綁定組件主要為已部署服務提供傳輸級綁定。綁定組件有多種類型:
·利用標准傳輸協議與外部系統進行遠程通訊。
·使已部署服務能在同一個 JVM 內部相互調用。
·服務間可使用標准的 WS-I ( Web 服務協同工作組織)規范通訊。
JBI 的關鍵是分離服務引擎和綁定組件,以便業務邏輯不被下面的具體細節所干擾。這種方式促進了體系的靈活性和可擴展性。綁定組件和服務引擎組件在 JBI 內部都可以是服務提供者和 / 或服務消費者。
綁定組件和服務引擎組件為“ JBI 運行時”提供接口以便從“ JBI 運行時”接收消息。同樣的,它們也利用 JBI 提供的接口來和“ JBI 運行時”通訊。
消息傳輸模型
JBI 利用消息傳輸模型分離服務提供者和服務消費者之間的耦合。消息傳輸模型利用了 WSDL 。 WSDL 用於描述暴露的服務引擎組件和綁定組件的業務處理。另外, WSDL 也用於定義抽象服務處理的傳輸級綁定。
JBI 架構中一個關鍵組件是 NMR (歸一化消息路由器,也譯作“正規消息路由器”)。 NMR 基於 WSDL 提供了主要的消息傳輸中樞, NMR 為部署在“ JBI 運行時”中的服務引擎組件和綁定組件間的消息傳遞提供松散耦合。服務需要有聚合業務處理的接口,每個業務處理由零個或多個消息組成。而一個接口有一個或多個傳輸級綁定。
“ JBI 運行時”利用歸一化格式描述消息。一個歸一化消息由以下部分組成:
·消息屬性
·消息有效載荷
·消息附件
利用 NMR , JBI 規范為服務提供者和消費者的消息交換提供標准接口。 NMR 支持服務生產者和消費者之間單向模式和服務響應模式的調用。
管理
JBI 利用 JMX 實現運行時的服務安裝、配置和監控。服務必須實現 JBI 接口集,以便這些服務在 JBI 環境中是可管理的。 JBI 環境必須提供一套 JMX MBeans 實現“ JBI 運行時”的管理。
“ JBI 運行時”環境允許服務引擎組件和綁定組件的相關操作如下:
·安裝組件:使組件接口可使用歸一化消息路由器。
·安裝 artefact 組件:這將允許已部署的 artefacts 組件獲得與已安裝組件同樣的機能。例如,可以部署一個“連接服務”來提供具體的數據庫連接。
啟動、停止服務以及進行相關服務分組。
JBI 為組件及 artefact 組件定義了標准的部署描述符以及打包模型。
角色
JBI 為基於 JBI 的端到端 EAI 解決方案定義了如下角色:
·引擎開發者:引擎開發者提供遵循 NMR 和管理約束的服務引擎組件。
·綁定開發者:綁定開發者提供遵循 NMR 和管理約束的綁定組件。
·JBI 環境提供者: JBI 環境提供者為“ JBI 運行時”使用 J2EE 1.4 或 J2SE 1.4 或更新的平台提供支持。
·J2EE 平台提供者: J2EE 平台提供者把“ JBI 運行時”作為提供應用程序服務的一部分。
·JBI 應用程序開發者: JBI 應用程序開發者利用服務引擎組件、綁定組件以及 JBI 環境構建 JBI 應用程序。