摘 要:介紹了目前數據庫中間件研究與發展狀況和面向服務架構(SOA)的特點,提出了基于SOA架構的數據庫中間件的設計方法,構造了基于SOA的數據庫中間件的一種應用模型,并在工業現場實時數據集成系統中進行了該模型應用和研究。
關鍵詞:SOA;數據庫中間件;WSDL;XML
中圖分類號:TP391文獻標志碼:A
文章編號:1001-3695(2007)06-0284-03
隨著網絡和信息管理系統的發展,數據庫和計算機網絡之間的聯系和應用越來越緊密,對數據庫訪問時的功能、性能、安全等要求越來越高,傳統的簡單的C/S模式或者是傳統的簡單的B/S模式已經越來越難以滿足日益增長的要求,數據庫中間件技術的出現和應用,對傳統結構進行了有效的改進和擴充。數據庫中間件在所有的中間件中是應用最廣泛、技術最成熟的一種。一個最典型的例子就是ODBC。它是一種基于數據庫的中間件標準,它允許應用程序和本地或者異地的數據庫進行通信,并提供了一系列的應用程序接口API,在多數情況下這些API都是隱藏在開發工具中,不被程序員直接使用。用戶可以直接在自己的應用程序中使用這個數據源,而不用關系目標數據庫的實現原理、實現機制,甚至不必了解ODBC向應用程序提供了哪些應用程序接口API。不過在數據庫中間件處理模型中,數據庫是信息存儲的核心單元,中間件完成通信的功能,這種方式雖然是靈活的,但是并不適合于一些要求高性能處理的場合,因為它需要大量的數據通信,而且當網絡發生故障時,系統將不能正常工作。另外,傳統的數據庫中間件方案是一種緊耦合集成模式,需要更多的開發和維護,比較適用于那些對性能要求較高的、需要多種層次集成的應用集成系統。面向服務的架構是一種標準化的松耦合的集成模式,但性能相對較低,比較適用于那些需要更大的靈活性,改動頻繁的應用集成系統。
雖然目前的數據庫中間件技術取得了很大的發展,但還存在一些問題有待進一步解決:如何使系統具有廣泛的適用性,環境的改變而不需要修改程序代碼以及如何使系統更易于擴展?如何能準確響應大量用戶的同時訪問?如何充分地利用系統資源?針對這些問題,筆者設計了SOA-DBM系統。
1 面向服務架構(SOA)及其特點
面向服務架構(Service-Oriented Architecture,SOA)是一種構件模型,是一種“松散耦合”的系統架構,它可以根據需求通過網絡對松散耦合的粗粒度應用組件進行分布式部署、組合和使用。服務層是SOA的基礎,可以直接被應用調用,從而有效控制系統中與軟件代理交互的人為依賴性。由此可得到SOA 的三點特征,即獨立的功能實體、大數據量低頻率訪問、基于文本的消息傳遞。圖1是SOA架構中典型的角色。
典型的SOA架構包含以下三種角色:
(1) 服務提供者(Service Provider),或簡稱為服務,它們一般有定義良好的接口(對內的和對外的),并且接口的定義是平臺和語言中立的,接口的描述信息被發布到服務目錄(或稱為服務注冊表)中,這樣就可以被動態發現和調用。
(2) 服務消費者(Service Client),或稱為服務請求者,在需要某項服務的時候,先查詢服務目錄,得到相關服務的描述信息,然后動態地綁定到相關服務,這樣就可以以一種對服務消費者透明的方式調用服務。
(3) 服務目錄(Registry and Lookup Service)是連接服務消費者和服務提供者的橋梁。服務提供者可以向它注冊服務,服務消費者可以通過它查詢服務描述信息。在目錄中注冊的服務可以按某種準則分類,方便服務消費者查詢。處于中心位置提供了展示服務的功能。服務消費者通過查詢存儲有服務信息庫的注冊中心以找到感興趣服務的接口信息[1]。
在面向服務的架構中,使用XML為消息格式,SOAP為應用層通信協議, WSDL為描述服務的語言, UDDI為服務注冊和服務發現手段。SOA在設計原則上遵循了早期的基于構件的分布式計算方式的模塊化、封裝性和松散耦合性的特點,并逐步發展為一種企業架構。SOA的一個中心思想就是使得企業應用擺脫面向技術的解決方案的束縛,輕松應對企業商業服務變化,發展的需要。企業的決策者只需要根據企業的策略來制定流程,把應用作為服務“拿來就用”,而無須考慮低層的集成。這樣就可以實現IT和企業業務之間同步[2]。
圖1 SOA架構
2 面向服務架構的數據庫中間件
中間件(Middleware)是基礎軟件的一大類,屬于可服用軟件的范疇中間件處于操作系統、網絡和數據庫之上,應用軟件的下層,總的作用是為處于自己上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效地開發和集成復雜的應用軟件。根據面向服務的軟件設計思想,本文設計了基于SOA的數據庫中間件(SOA-DBM)系統,同時選擇XML作為全局的數據模式。
筆者參考目前網格技術中一個與數據操作相關的成長中的標準[3]建立面向服務架構的數據庫中間件,用于在數據庫與服務總線之間建立接口。通過該中間件提供的統一服務接口,使這些異構的數據資源通過SOA-DBM接口,呈現在用戶面前的只是一個單一的邏輯資源和可供服務的API,隱藏一些細節,像數據庫驅動器技術、數據格式化技術以及傳送機制。
WSDL(Web Services Description Langauge)用于描述Web服務,將其定義為一組服務訪問點,客戶端可以通過這些服務訪問點對包含面向文檔或過程調用的服務進行訪問[4](類似遠程過程調用)。WSDL首先對訪問的操作和訪問時使用的請求/相應消息進行描述,然后將其綁定到具體的協議和消息格式上,以最終定義具體部署的服務訪問站點。具體應用中可以對其擴展,這樣無論通信時使用何種消息格式或網絡協議,WSDL都可以將數據服務的接口和消息進行統一描述。
2.1 SOA-DBM的主要組成部分
面向服務架構的數據庫中間件的結構是一種工具箱,它具有一些擴展點,可供開發人員擴展其功能,以適應自身的特定需求。數據庫管理系統便是一個很好的例子。筆者目前支持的有關系數據庫(通過 JDBC)和 XML 數據庫(通過 XMLDB)。而當必要的時候,應用程序的開發人員也可以開發他們自己的數據庫以及相應的API。
SOA-DBM有三個主要接口:
數據服務注冊(Data Service Registry,DSR):數據服務注冊使應用程序能夠動態找到所支持的數據庫,可以通過它找到用于創建所需DSF。
數據服務工廠(Data Service Factory,DSF):數據服務工廠使數據服務的創建能夠存取和更新數據庫。
數據服務API(Data Service API,DS-API):數據服務API使得用戶通過中間件架構能夠存取數據庫以及相關的服務。
數據庫適配器(Database Adapter):數據庫適配器由數據服務工廠和數據服務API組成,主要負責根據客戶的請求提供相應的服務,同時把自己能夠提供的數據服務及時地傳遞給數據服務這冊組件,方便客戶查詢所需的服務。
2.2 面向服務架構的數據庫中間件的工作流程
圖2描述了在一個客戶端和一個數據資源之間利用SOA-DBM服務交互的整個流程,客戶端與數據資源端信息的交互是通過SOAP協議傳輸的,并且信息的格式是XML。
圖2 SOA-DBM工作原理圖
(1)客戶端通過Registry服務查找滿足要求的Factory服務(1a),Registry服務返回用戶需要的Factory服務的句柄(1b);
(2)客戶端通知Factory要訪問數據庫(2a),Factory服務創建客戶端需要的DS-API(2b),并把DS-API的句柄返回給客戶端(2c);
(3)客戶端通知DS-API將要執行的操作(3a),DS-API與數據庫通過與低層的API函數進行交互,執行這些操作(3b),數據查詢的結果以XML文件的形式返回給客戶端(3c)。利用XML技術實現異構數據庫之間的數據格式轉換,也就是異構數據的集成。
2.3 XML全局模式
XML是eXtensible Markup Langauge的縮寫,是一種標記語言[5]。XML1.0規范中對XML的定義是:“可擴展標記語言XML描述了一類稱為XML文檔的數據對象,且部分地描述了處理這些數據對象的計算機程序的行為”[6]。一個XML文檔包括兩部分:序言和文檔實例序言的第一行是XML聲明,表明該文檔是XML文檔而不是其他文檔;接下來是文檔類型定義,指明文檔所遵循的DTD。文檔實例部分是XML的主體,是按DTD對具體信息的描述。
XML文檔最顯著的特點是信息的描述與信息的處理是分開的,這也正體現了標記語言的精髓。XML文檔還具有很強的開放性和可擴展性,自我描述能力和可驗證性等特性。XML的應用領域有:(1)設計標記語言;(2)數據交換和數據整合;(3)媒體無關的數據發布;(4)智能代理和本地計算;(5)精確搜索;(6)文件保值等。
從寬泛的意義來講,可以將整個XML看成是一個數據庫系統,這樣認為是因為XML提供了許多數據庫中所必要的數據處理功能:XML文檔本身可以看成是數據庫中的數據區;DTD或者XML Schema可以看成是數據庫模式設計;XQL或XML2QL可以看成是數據庫查詢語言SQL;XML的解析方法SAX、DOM或JAXB可以看成是數據庫處理工具[7]。XML能夠實現異構數據信息之間的交換。
隨著XML及其相關技術和應用的發展,XML不僅成為了應用間交換數據的一種標準,也是萬維網重要的信息交換標準和表示的技術之一。目前,XML已有多方支持,并且XML的強適應性,使其可以實現對資源的快速包裝和集成發布,所以,XML是面向服務架構的數據庫中間件系統的全局模式,而全局模式是該中間件統一每個數據源數據模式的前提條件。為了更好地實現數據集成,系統采用XML模式作為中間件的全局模式,并分兩步完成異構數據模式到全局模式的轉換和集成。數據服務API負責異構數據源數據模式(關系模式)到XML模式的初步轉換,數據服務工廠負責對轉換結果進行進一步的模式集成,最終實現到中間件全局模式映射。
3 一種基于面向服務架構的數據庫中間件應用模型
根據前面提出的基于SOA數據庫中間件模型,應用到企業信息集成中的結構如圖3所示。
圖3 SOA-DBM應用模型
上述SOA-DBM應用模型是由兩大部分組成的,企業級域組件和服務組件。其中,企業級域組件是整個企業應用體系結構的中心,通過用戶接口、企業事務規則和企業業務管理模塊把整個組件的功能性暴露給服務組件,以實現企業業務的動態自適應。模型右邊的服務組件群則是由Web服務組件、SMS服務組件、E-mail服務組件及SOA-DBM服務組件構成。服務組件負責檢查所有進來的請求,然后再發送給相關的企業級域組件的Servlet,服務組件本身是不執行任何企業邏輯事務的。SOA-DBM服務組件是專門負責處理有關數據訪問和集成的請求的,不僅要將請求發送給企業域組件來完成客戶對數據的訪問,而且還要與更底層的數據庫進行通信,完成對原有數據庫的集成。
筆者在這里著重要討論的是SOA-DBM服務組件,那么在具體實現這個組件模型的時候,需要注意以下幾個方面:(1)有關異構數據平臺的數據交換規范的研究。可制定XML的數據交換規范,以XML為標準對數據進行映射,同時完成數據清洗、對比、整理、校驗與轉換工作,實現數據的分布式共享。提供多層次的異步通信機制,接收方的應用無論處于何種狀態(開啟或停止)都不影響發送方的數據發送。
(2)有關數據交換引擎的開發。通過交換引擎能支持XML與數據庫之間、數據庫與數據庫之間、文本文件與XML之間、不同XML之間的數據轉換。
(3)有關數據交換公共服務接口的開發。提供基于Web Service的各標準協議定義的統一公共服務接口。
4 中間件的實現和將來的工作
基于上面提出的面向服務的架構,筆者設計和實現了一種新型的面向服務架構的數據庫中間件的原型。該中間件基于跨平臺的Java語言開發實現,以XML作為數據傳輸和集成的標準,并可被不同網絡上不同操作系統的計算機訪問。筆者已經把該中間件應用到工業現場實時數據集成系統設計中,對糖廠內部工業網絡和控制網絡上的異構數據進行采集和集成。
雖然筆者已經實現了該面向服務的數據庫中間件的原型,并已經采納應用到項目的系統設計當中,但目前筆者的研究主要集中于系統的結構設計上,因為不同領域的工控網絡上的實際需求是很復雜的。比較于傳統的中間件模型,對于實際應用當中的面向服務的數據庫中間件仍然有大量的工作要做。將來的工作應該是構建通用的數據庫中間件Web服務,能夠很容易地調用并集成到不同的應用中。
5 結束語
在面向服務架構的數據庫中間件系統中,數據不但能夠為企業內服提供服務,還可以通過Internet向外部提供服務;該類中間件不但廣泛吸取了一般數據庫中間件的部分優點,而且采用多個進程、線程協作的松耦合設計模式,能夠提供給企業隨著業務變化所需的數據服務。XML作為系統數據交換的標準提高了系統的安全性、吞吐量以及可移植性和可維護性,為當前多層軟件體系的構造提供了新的思路。由于系統在設計的時候主要采用的Java技術,而且環境一旦發生改變,只需要重新更改符合XML標準格式的配置文件,因此具有廣泛的平臺適用性。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。