問題的提出
數(shù)據(jù)集成是企業(yè)信息系統(tǒng)的核心部分之一,它作為一個統(tǒng)一的數(shù)據(jù)平臺為系統(tǒng)的其它部分提供數(shù)據(jù)支撐服務(wù)。許多企業(yè)擁有或?qū)碛卸喾N業(yè)務(wù)系統(tǒng),而每種業(yè)務(wù)系統(tǒng)都有自己的數(shù)據(jù)存儲庫,每個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)從整體上來說一般是不完整的、不一致的。傳統(tǒng)的解決方案為整合數(shù)據(jù),它往往需要形成集中庫,難以靈活適應(yīng)底層數(shù)據(jù)源的變化。傳統(tǒng)的解決方案要求直接從數(shù)據(jù)存儲庫中獲取數(shù)據(jù),并且只能從數(shù)據(jù)存儲庫中獲取數(shù)據(jù),但數(shù)據(jù)存儲庫往往不被允許直接訪問,而且數(shù)據(jù)存儲庫中的數(shù)據(jù)常常是原生數(shù)據(jù),它需要經(jīng)過業(yè)務(wù)邏輯的處理才能成為有價值的數(shù)據(jù),直接使用數(shù)據(jù)存儲庫中的原生數(shù)據(jù)是無意義的。因此,數(shù)據(jù)集成問題的關(guān)鍵是如何方便地得到需要的數(shù)據(jù),如何進(jìn)行正確的數(shù)據(jù)整合。
本文提出一種實時動態(tài)數(shù)據(jù)集成的服務(wù)框架,這個框架的數(shù)據(jù)集成是動態(tài)的,不需要建立集中庫,數(shù)據(jù)集成是實時進(jìn)行的;數(shù)據(jù)集成的數(shù)據(jù)源不局限于數(shù)據(jù)存儲庫,可以是一個應(yīng)用、一個組件、一個服務(wù),甚至可以將數(shù)據(jù)集成后的結(jié)果作為新的數(shù)據(jù)源。
SOA技術(shù)介紹
SOA即面向服務(wù)架構(gòu),可以看作是一種軟件系統(tǒng)架構(gòu)。它主要是為了解決在Internet環(huán)境下業(yè)務(wù)集成的需要,以松耦合和統(tǒng)一接口定義的方式將具有特定功能的組件作為服務(wù)提供者連接在一起完成特定的業(yè)務(wù)處理。SOA具有三大基本特征:
■ SOA架構(gòu)中提供服務(wù)的功能實體具有完全獨立自主的能力,這樣不需要關(guān)心功能實體的實現(xiàn)方式和運行機(jī)制;
■ SOA架構(gòu)中以低頻率對大量數(shù)據(jù)進(jìn)行訪問,也就是在信息交換時希望一次性盡可能多地交換大量的數(shù)據(jù);
■ SOA架構(gòu)采用基于文本而非二進(jìn)制的消息傳遞方式,消息本身是不包含任何處理邏輯和數(shù)據(jù)類型的,同樣不需要關(guān)心消息接受者的細(xì)節(jié)。
XML和Web Services標(biāo)準(zhǔn)的成熟和應(yīng)用的普及為廣泛的實現(xiàn)SOA架構(gòu)提供了基礎(chǔ)。XML是針對包含結(jié)構(gòu)化信息的文檔而設(shè)計的一種標(biāo)記語言。采用這種描述方法,可以在保持原有數(shù)據(jù)的意義和結(jié)構(gòu)的同時在應(yīng)用之間進(jìn)行數(shù)據(jù)交換,進(jìn)而可以保持不同系統(tǒng)之間數(shù)據(jù)交換的靈活性。Web Services是基于最廣為接受的、開放的技術(shù)標(biāo)準(zhǔn)(如Http、SMTP、XML、SOAP、WSDL和UDDI等),支持服務(wù)接口描述和服務(wù)處理的分離、服務(wù)描述的集中化存儲和發(fā)布、服務(wù)的自動查找和動態(tài)綁定以及服務(wù)的組合,成為新一代面向服務(wù)的應(yīng)用系統(tǒng)的構(gòu)建和應(yīng)用系統(tǒng)集成的基礎(chǔ)設(shè)施。
Web Services可以定義為通過SOAP協(xié)議,在網(wǎng)絡(luò)上提供服務(wù),使用WSDL來描述這種服務(wù),并通過UDDI注冊服務(wù)以便使用者能找到服務(wù)。
SOAP:這是Web Services的通訊協(xié)議,用XML格式來定義消息,即SOAP消息,包含在一對SOAP中的、結(jié)構(gòu)正確的XML段。目前?;贖TTP協(xié)議來傳輸XML數(shù)據(jù)。
WSDL:Web服務(wù)說明語言。WSDL文件也是一個XML文檔,Web Service的細(xì)節(jié)描述都包含在其中。如參數(shù)類型、函數(shù)名稱、返回類型、綁定協(xié)議等。調(diào)用者可以通過查看WSDL文件來確定Web Service的接口函數(shù)。
UDDI:這是Web服務(wù)的注冊中心。Web Service提供者將其提供的服務(wù)注冊到UDDI注冊中心,調(diào)用者就可以到這個已知的UDDI注冊中心查詢到所需要的Web服務(wù)。
Web Services提供者實現(xiàn)服務(wù)的接口函數(shù)和服務(wù)的描述,并將其發(fā)布給調(diào)用者或注冊到服務(wù)注冊中心。服務(wù)調(diào)用者通過查詢本地或服務(wù)注冊中心的服務(wù)描述,選擇所需要的服務(wù)進(jìn)行綁定以調(diào)用Web Service的接口函數(shù)。服務(wù)的提供者以XML文檔的形式將服務(wù)結(jié)果返還給服務(wù)調(diào)用者,完成了信息的交互。圖1 是Web Services的體系結(jié)構(gòu)。
[align=center]

圖1 Web Services體系結(jié)構(gòu)[/align]
基于SOA的數(shù)據(jù)集成
數(shù)據(jù)集成的本質(zhì)是把不同來源、格式、特點性質(zhì)的數(shù)據(jù)在邏輯上或物理上有機(jī)地集中,從而為用戶提供全面的數(shù)據(jù)共享。在數(shù)據(jù)集成領(lǐng)域已經(jīng)有了很多成熟的框架。目前,通常采用數(shù)據(jù)倉庫和基于中間層的方法來構(gòu)造數(shù)據(jù)集成服務(wù)。
中間層模式通過統(tǒng)一的全局?jǐn)?shù)據(jù)模型來訪問異構(gòu)的數(shù)據(jù)庫、遺留系統(tǒng)、Web資源等。中間層位于各種數(shù)據(jù)源和應(yīng)用程序之間,向下對各數(shù)據(jù)源起協(xié)調(diào)作用,向上為訪問集成數(shù)據(jù)的應(yīng)用提供統(tǒng)一數(shù)據(jù)模式和數(shù)據(jù)訪問的通用接口。各數(shù)據(jù)源的應(yīng)用仍然完成他們的任務(wù),中間層則主要集中為各種數(shù)據(jù)源提供一個高層次檢索服務(wù)。中間層提供一個統(tǒng)一的數(shù)據(jù)邏輯視圖來隱藏底層的數(shù)據(jù)細(xì)節(jié),使得用戶可以把集成數(shù)據(jù)源看為一個單一的整體。本文提出的基于SOA的動態(tài)數(shù)據(jù)集成服務(wù)框架就屬于中間層模式。
在基于SOA的數(shù)據(jù)集成中,XML提供一種規(guī)范化的數(shù)據(jù)結(jié)構(gòu)以協(xié)助整合系統(tǒng)之間不同的數(shù)據(jù)結(jié)構(gòu),并以關(guān)聯(lián)視圖的方式展現(xiàn)被集成的數(shù)據(jù)。以“同一種語言交流”不再是必須的,Web Services將作為一種規(guī)范的通訊方式允許某一部分動態(tài)地發(fā)現(xiàn)其它部分的能力和需求。因此集成是動態(tài)的,可以隨時根據(jù)需要組織數(shù)據(jù)的集成方式,得到不同的集成視圖;集成也是實時的,可以方便地獲取最新的數(shù)據(jù)。
基于SOA的數(shù)據(jù)集成將傳統(tǒng)數(shù)據(jù)集成解決方案中,考慮不同系統(tǒng)中數(shù)據(jù)是如何交換的轉(zhuǎn)變?yōu)樵鯓诱宫F(xiàn)系統(tǒng)的功能,這樣數(shù)據(jù)將不再是以點對點的方式獲取,而是可以自由的在網(wǎng)絡(luò)上得到的一種服務(wù)。系統(tǒng)不是在底層協(xié)議的基礎(chǔ)上進(jìn)行交互,而是在一個抽象的接口層面上進(jìn)行數(shù)據(jù)交換。系統(tǒng)僅僅將它們的功能以服務(wù)的形式展現(xiàn)出來,其它的系統(tǒng)能容易地發(fā)現(xiàn)這個服務(wù)并在運行時或設(shè)計時綁定它。被集成的服務(wù)可以是任意的應(yīng)用、系統(tǒng)和數(shù)據(jù)源,而不用考慮它們的特殊要求。
動態(tài)數(shù)據(jù)集成服務(wù)框架的研究
框架技術(shù)體系
圖2是基于SOA的動態(tài)數(shù)據(jù)集成服務(wù)框架的技術(shù)體系結(jié)構(gòu)。從圖中可以看出,框架的技術(shù)體系由5個層次組成。分別是數(shù)據(jù)源適配器、服務(wù)包裝器、SOA運行引擎、XML視圖引擎、XML視圖。
[align=center]

圖2:框架技術(shù)體系結(jié)構(gòu)[/align]
數(shù)據(jù)源適配器是同各種數(shù)據(jù)源進(jìn)行交互的橋梁,它是一些可插拔的組件,并動態(tài)地進(jìn)行加載。數(shù)據(jù)源適配器以遵從標(biāo)準(zhǔn)接口的方式進(jìn)行編寫,可以獨立地為新的數(shù)據(jù)源編寫適配器,并很方便地接入到系統(tǒng)中。數(shù)據(jù)源的類型基本上是沒有限制的,即可以是數(shù)據(jù)庫也可以是位于Internet上的文本文件,甚至是一個應(yīng)用系統(tǒng)。數(shù)據(jù)源適配器將存儲在各種數(shù)據(jù)源的原生數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)的XML文檔。
服務(wù)包裝器是將數(shù)據(jù)源適配器包裝成標(biāo)準(zhǔn)的Web Services服務(wù),這樣就將對數(shù)據(jù)源的API訪問模式轉(zhuǎn)變?yōu)閷Ψ?wù)的提供。服務(wù)包裝器可以同時包裝多個數(shù)據(jù)源適配器,這樣它的另一個重要作用就是可以對來自一個或多個數(shù)據(jù)源的原生數(shù)據(jù)進(jìn)行進(jìn)一步的邏輯處理以將其轉(zhuǎn)變?yōu)楦幸饬x的信息,并可以在本地緩存處理后的數(shù)據(jù)。這樣通過緩存提高了整個系統(tǒng)地效率和可靠性——即使數(shù)據(jù)源出現(xiàn)故障系統(tǒng)也有能力繼續(xù)工作,同時將業(yè)務(wù)邏輯進(jìn)行預(yù)先處理,降低了XML視圖的復(fù)雜性,使得XML視圖更易于被理解。服務(wù)包裝器隔離了對數(shù)據(jù)的訪問細(xì)節(jié)和對數(shù)據(jù)的邏輯處理細(xì)節(jié),這兩個部分可以獨立地變化,極大地提高了系統(tǒng)的靈活性。
SOA運行引擎是框架的核心部分,通過它調(diào)度服務(wù)的執(zhí)行,驅(qū)動數(shù)據(jù)集成的處理。SOA運行引擎包括了規(guī)則處理器、流程處理器、消息處理器等。SOA運行引擎將XML視圖引擎解析的數(shù)據(jù)集成請求轉(zhuǎn)變?yōu)閷Ψ?wù)的調(diào)用請求,并由運行引擎去查找適合的服務(wù)、綁定服務(wù)并調(diào)用服務(wù)。
XML視圖引擎提供三種機(jī)制:其一,它將多個異構(gòu)的數(shù)據(jù)源表示為單一的即時虛擬數(shù)據(jù)庫,這個即時虛擬數(shù)據(jù)庫由一系列實時獲取的XML文檔構(gòu)成。其二,解析用戶來自XML視圖的請求,將該請求向下層傳達(dá),并將最后結(jié)果以XML文檔的形式返還給用戶;最后,它將自己的元信息用XML Schema表達(dá),這些XML Schema就是XML視圖的基礎(chǔ),基于XML Schema進(jìn)行XML視圖的定義。XML Schema就如同關(guān)系數(shù)據(jù)庫中的表一樣,而XML視圖就像關(guān)系數(shù)據(jù)庫中同表相關(guān)的表視圖(VIEW)一樣。XML視圖引擎本身也是以Web服務(wù)的形式提供,用戶可以很方便地以一種標(biāo)準(zhǔn)的方式訪問它,它也可同時成為另外的XML視圖引擎的數(shù)據(jù)源。
XML視圖是對數(shù)據(jù)集成的元信息描述,由它表達(dá)集成后的效果。它并不是集成的結(jié)果,而僅僅是集成結(jié)果的元數(shù)據(jù)表示,就像關(guān)系數(shù)據(jù)庫中的表視圖一樣表示實際數(shù)據(jù)應(yīng)具有的組成關(guān)系:數(shù)據(jù)來自于哪個表,對表數(shù)據(jù)需要作什么樣的處理,不同表的數(shù)據(jù)是如何結(jié)合的等。用戶查看XML視圖就能了解該視圖表達(dá)的數(shù)據(jù)集成的模式??梢愿鶕?jù)不同的數(shù)據(jù)集成需要定義不同的XML視圖,這就是動態(tài)的數(shù)據(jù)集成——在需要時才定義集成的方式,在運行時才能獲得真正的數(shù)據(jù)。
從圖2可以看出,這5個層次可以分為三個部分各自獨立的進(jìn)行開發(fā)和分布式部署。其中,XML視圖和XML視圖引擎是一個部分,SOA運行引擎是一個部分,服務(wù)包裝器和數(shù)據(jù)源適配器是另一個部分。這樣的分布式數(shù)據(jù)集成具有極高的靈活性,三個部分互不影響;同服務(wù)包裝器一樣,可以同時部署多個XML視圖引擎,而XML視圖引擎又可以被服務(wù)包裝器封裝成為一個新的數(shù)據(jù)源。這種機(jī)制可以比較容易的滿足現(xiàn)代企業(yè)數(shù)據(jù)集成中復(fù)雜的環(huán)境,通過較小的代價達(dá)到靈活的數(shù)據(jù)集成要求。圖3是一個典型的部署方案。圖3中,XML視圖引擎B使用服務(wù)包裝器c,而服務(wù)包裝器b將XML視圖引擎B包裝成新的數(shù)據(jù)服務(wù),XML視圖引擎A使用了服務(wù)包裝器a和服務(wù)包裝器b,也就是使用了服務(wù)包裝器a和視圖引擎B的某個XML視圖。
[align=center]

圖3:框架典型的部署方案[/align]
框架的運行機(jī)制是首先由用戶查看XML視圖,獲得該視圖上數(shù)據(jù)集成的元結(jié)構(gòu),基于該元結(jié)構(gòu)發(fā)起合適的處理請求;XML視圖引擎根據(jù)處理請求中相應(yīng)的XML視圖描述解析該請求,并將其轉(zhuǎn)遞給SOA運行引擎;SOA運行引擎這些請求轉(zhuǎn)變?yōu)閷Ψ?wù)包裝器的調(diào)用;服務(wù)包裝器再將其轉(zhuǎn)變?yōu)閷?shù)據(jù)源適配器的調(diào)用,由數(shù)據(jù)適配器執(zhí)行實際的數(shù)據(jù)源訪問;從數(shù)據(jù)源取回的數(shù)據(jù)經(jīng)服務(wù)包裝器處理后轉(zhuǎn)變?yōu)闃?biāo)準(zhǔn)的XML文檔送回到XML視圖引擎中;在XML視圖引擎中再根據(jù)XML視圖的集成方式描述完成實際的數(shù)據(jù)整合并將整合結(jié)果返還給客戶。從框架的運行機(jī)制可以看出,這時數(shù)據(jù)集成是實時的,每次的請求都需要即時到數(shù)據(jù)源中獲取數(shù)據(jù)??蚣艿幕具\行機(jī)制如圖4所示。
[align=center]

圖4:框架運行機(jī)制[/align]
框架的結(jié)構(gòu)
在基于SOA的數(shù)據(jù)集成框架中,其面向服務(wù)的體系決定了框架內(nèi)部各模塊之間的的關(guān)系:這些模塊按照SOA的觀點都可以視為服務(wù),所有這些服務(wù)以松耦合的方式連接在一起??蚣艿暮诵牟糠諷OA運行引擎的主要功能就是管理這些各種各樣的服務(wù),協(xié)調(diào)服務(wù)之間的交互,同時使用戶能方便地存取這些服務(wù)。圖5是框架的總體結(jié)構(gòu)。
[align=center]

圖5:框架總體結(jié)構(gòu)[/align]
圖5中,內(nèi)置服務(wù)是框架正常運行而必須具備的服務(wù)功能。這些服務(wù)是框架底層使用的,對用戶來說是不可見的。內(nèi)置服務(wù)主要有:流程引擎,為框架提供流程定制和流程運行的功能;規(guī)則引擎,由它數(shù)據(jù)集成的規(guī)則,企業(yè)根據(jù)自己的業(yè)務(wù)規(guī)則通過規(guī)則引擎定義集成和處理的方式;服務(wù)注冊和發(fā)現(xiàn)服務(wù),提供 Web Services的注冊中心和服務(wù)發(fā)現(xiàn)功能;消息處理器,提供消息處理機(jī)制,以便服務(wù)能以消息的方式交互。
插件服務(wù)是框架具有高擴(kuò)展性和靈活適應(yīng)各種需求的主要機(jī)制。它將提供數(shù)據(jù)的各種數(shù)據(jù)源包裝成服務(wù),并以可拔插的方式植入框架中。插件服務(wù)并不直接訪問數(shù)據(jù)源,而是通過數(shù)據(jù)源適配器訪問數(shù)據(jù)源,這樣將對數(shù)據(jù)源的訪問同服務(wù)的提供解耦,數(shù)據(jù)源適配器可以在運行時根據(jù)需要動態(tài)裝配。同時,插件服務(wù)還可以根據(jù)需要對其數(shù)據(jù)源適配器獲得的數(shù)據(jù)進(jìn)行預(yù)先處理,以降低最終集成的復(fù)雜度,提高系統(tǒng)的整體運行效率。插件服務(wù)通過最小化的編程或僅僅進(jìn)行配置就能擴(kuò)展整個系統(tǒng),具有極大的靈活性。
代理服務(wù)是一種擴(kuò)展的插件服務(wù),由它提供對諸如第三方應(yīng)用,如ERP、CRM等數(shù)據(jù)源的包裝以及對XML視圖引擎的包裝。代理服務(wù)和插件服務(wù)在對數(shù)據(jù)源的包裝上的主要差別在插件服務(wù)包裝的是具有明確API接口的數(shù)據(jù)源,如數(shù)據(jù)庫、EJB、COM、MOM、SOAP等,而代理服務(wù)包裝的數(shù)據(jù)源沒有明確的API接口,需要對這些數(shù)據(jù)源進(jìn)行更多的處理。同時代理服務(wù)也是數(shù)據(jù)遞歸集成的機(jī)制,即將集成后的數(shù)據(jù)作為其他數(shù)據(jù)集成的數(shù)據(jù)源。
服務(wù)管理器管理框架中所有的服務(wù),是存取服務(wù)的入口,由它去查找正確的服務(wù),管理服務(wù)的生命周期,檢察服務(wù)的運行情況,調(diào)度服務(wù)的運行、注冊服務(wù)等。服務(wù)工廠主要是用來生成各種服務(wù)。當(dāng)服務(wù)管理器查找服務(wù)時,發(fā)現(xiàn)該服務(wù)還沒有運行,服務(wù)管理器將請求服務(wù)工廠動態(tài)生成并運行這個服務(wù)。服務(wù)工廠將根據(jù)服務(wù)注冊信息啟動該服務(wù),如果服務(wù)包裝的底層數(shù)據(jù)源不可得,則該服務(wù)將企圖裝載在本地的緩存數(shù)據(jù)。
存取控制模塊為安全使用服務(wù)和訪問數(shù)據(jù)提供了基礎(chǔ)。它的主要作用除了提供一個基于角色的存取控制外,還具有兩個重要功能。其一,它采用一種基于標(biāo)記的用戶認(rèn)證模型使得單一登陸就可以訪問多個數(shù)據(jù)源,極大簡化了用戶的訪問模式。其二,存取控制模塊還將處理用戶訪問會話的生命期,使得用戶只在一段特定的時間內(nèi)訪問系統(tǒng),這將進(jìn)一步提高系統(tǒng)的安全性。
服務(wù)存取信道是用戶訪問包裝了XML視圖引擎的服務(wù)的通道,并解析用戶請求成為一系列能直接訪問底層服務(wù)的查詢計劃。查詢計劃將被緩存,以便能盡可能地重用這些查詢計劃。當(dāng)有新的請求時,服務(wù)存取信道將比較該請求以決定是否已經(jīng)有可用的查詢計劃,如果有的話,就直接使用它,這樣極大地提高了系統(tǒng)的運行效率。一個服務(wù)存取信道可同時提供多個用戶使用。
存取信道管理模塊提供了對服務(wù)存取信道的運行時管理,它將根據(jù)不同用戶的訪問請求,將可能返回相同數(shù)據(jù)的訪問請求合并成一個請求;或者對多個用戶訪問請求進(jìn)行優(yōu)先級排隊處理,以保障優(yōu)先級高的請求能盡快被處理;或者將多個用戶小數(shù)據(jù)量的請求多路復(fù)用到一個服務(wù)存取信道,保證大數(shù)據(jù)量的請求有足夠的服務(wù)存取信道可用。通過這些機(jī)制,降低了系統(tǒng)的資源消耗,提高了系統(tǒng)的運行效率。
服務(wù)發(fā)布/訂閱接口提供了同框架異步通訊的機(jī)制。各種服務(wù)可以在服務(wù)發(fā)布/訂閱接口訂閱需要的消息,當(dāng)有適合的消息發(fā)布時,所有訂閱了該消息的服務(wù)都將得到通知,這是一種多對多的通訊機(jī)制。服務(wù)發(fā)布/訂閱接口也能同各種消息中間件相連,以便提供基于消息的服務(wù)互連功能。同時,通過服務(wù)發(fā)布/訂閱接口,框架將具有一定的事務(wù)處理能力。
基于SOA的動態(tài)數(shù)據(jù)集成服務(wù)框架為異構(gòu)異型數(shù)據(jù)的集成和共享提供了一個面向服務(wù)體系結(jié)構(gòu)的框架,它以XML技術(shù)為基礎(chǔ),動態(tài)集成為手段,實現(xiàn)各種應(yīng)用系統(tǒng)之間的數(shù)據(jù)集成,實現(xiàn)跨平臺數(shù)據(jù)的共享,達(dá)到跨平臺數(shù)據(jù)資源整合的目的,實現(xiàn)了信息的互通互聯(lián)?;赟OA的動態(tài)數(shù)據(jù)集成服務(wù)框架可以為解決跨平臺數(shù)據(jù)共享和集成所面臨的異型異構(gòu)接口、實時數(shù)據(jù)交換和隨需應(yīng)變等技術(shù)問題,提供有效的解決方法和途徑。