孔震
(國網電科院信息技術研究所,江蘇 南京 210003)
企業用戶在日常工作過程中,往往需要面對多個不同業務應用系統進行信息瀏覽與處理。由于不同的業務應用系統是由不同的廠家開發實現,各系統均獨立存儲一套企業公共信息,如組織機構等,當企業公共信息發生變化時,需對各應用系統進行公共信息的同步維護,工作量大,且易出錯。針對此類問題,業界普遍采用目錄系統等技術,實現組織機構等企業公共信息的單點維護,并在不同業務應用系統間共享。本文主要論述了一種以松耦合方式同步企業應用與目錄系統間公共信息的實現方案。
目錄系統是一種特殊的數據庫系統,其專門針對信息的讀取,瀏覽和搜索操作進行了優化。目錄系統一般用來包含描述性的、基于屬性的信息并支持精細復雜的過濾功能。目錄系統一般不支持通用數據庫針對大量更新操作所需要的復雜的事務管理功能。目錄系統通常用來存儲包括個人信息、Web鏈接、文件索引等輕量信息。此外,目錄系統能夠提供標準的信息訪問接口,便于與各類異質應用系統集成,主流的有LDAP(輕量級目錄訪問協議)目錄和基于X.500的目錄。
針對目錄系統的上述特性,企業通常會對內部不同應用系統中的公共信息進行抽取,統一放置于目錄系統中進行維護,再共享、同步給其它應用系統。例如,組織機構信息是典型的企業公共信息,其數據量小,變化不頻繁,適合放置于目錄系統中進行統一管理。當企業組織機構信息放置于目錄系統后,目錄系統是企業組織機構信息的維護源頭,其它應用系統只能對組織機構信息進行引用,當組織機構信息變更時,各應用系統需及時同步變更信息,以保持一致性。目錄系統與各應用系統的集成關系如圖1所示:
圖1 目錄系統與應用系統的集成關系
在企業應用系統與目錄系統的信息同步過程中,主要有以下技術難點:
如何讓應用系統及時、可靠的獲得目錄系統信息變更的消息及內容。
如何實現松耦合集成,且盡可能不影響應用系統的已有結構和業務邏輯。
當目錄系統中的信息發生變化時,可有兩種方式在應用系統間同步:
方式1:目錄系統主動推送方式,即目錄系統主動將變更信息通知給各應用系統。
方式2:應用系統主動獲取方式,即應用系統主動向目錄服務獲取已變更的信息。
方式1的優點是實時性強,應用系統可第一時間獲得目錄系統變更的信息,且效率高,變更信息的范圍在目錄系統推送時已被明確;缺點是目錄系統需主動訪問各應用系統,接口需要統一,否則目錄系統的接口適配工作量較大。
方式2的優點是,各應用系統可通過目錄系統提供的標準接口進行交互;缺點是實時性低、效率差,通常需要由各應用系統輪詢目錄系統以獲得變更信息,當應用系統較多且輪詢頻率較高時,會對目錄系統造成較大負載。
綜上分析,本文采用方式1,并可結合面向服務架構的實現思路,解決應用系統接口一致性的問題。
目錄系統與應用系統的信息同步過程主要分為以下幾個步驟,如圖2所示:
目錄系統將變更信息通知給應用系統。
根據面向服務架構的實現規范,目錄系統與各應用系統共同約定目錄信息變更后,目錄系統通知各應用系統的Web服務接口如下:
圖2 目錄系統與應用系統的信息同步過程
public Boolean notifyInfoChange(String p_info);
其中,輸入參數p_info表示變更信息的內容,該內容為XML格式(示例參見圖表3);返回值為布爾值,表示應用系統是否成功接收通知信息。該服務接口由各應用系統實現,被目錄系統在信息變更時調用。為保證目錄系統的高效性,該服務方法采用異步調用方式,即目錄系統調用notifyInfoChange方法后立刻返回,應用系統以回調方式通知目錄系統是否已接收成功。若接收失敗,目錄系統在本地“消息通知失敗隊列”中記錄目標應用系統標示和當前變更信息內容。目錄系統自身實現對“消息通知失敗隊列”的輪詢,以不斷嘗試向目標應用系統重發通知消息,保持信息同步。
圖3 以組織機構-部門為例的
p_info數據結構
應用系統在本地同步變更信息。
應用系統的notifyInfoChange方法接收到目錄系統的調用請求后,首先將變更信息記錄在本地數據庫的InfoExchange數據表中,數據表結構見圖4。
若目錄系統變更信息的DS_CLASS、DS_ID在InfoExchange中已存在對應記錄,則說明該信息在應用系統中已存在,需要執行
圖4 InfoExchange數據表結構說明
?更新同步操作,即將當前記錄的Info字段設置為p_Info參數值,OperationType字段設 置 為 Update,IsNeedSync字 段 設 置 為 True,ModifyTime字段設置為當前時間;否則需要執行新增同步操作,即在InfoExchange中插入一條新記錄,其中DS_Class、DS_ID、Info 字 段的值分別來自于p_info參數,Local_Table字段的取值與DS_Class有關(預先建立一一映射關系,如目錄系統中的部門信息映射到應用系統中的Department數據表),Local_ID字段則根據Local_Table表的主鍵規則生成一個新的編號,OperationType字段設置為Insert,IsNeedSync 字段設置為 True,ModifyTime 字段 設置為當前時間;若p_info參數中的isDelete屬性為True,則 OperationType 字段設置為Delete。
應用系統通過周期性掃描進程輪詢InfoExchange數據表,篩選出IsNeedSync字段為True的記錄,按ModifyTime字段由遠至近排序,依次根據OperationType字段的值,將待同步信息在本地數據表(Local_Table)中更新、插入或刪除,同步成功后將InfoExchange表中相應記錄的IsNeedSync字段設置為False。 至此,目錄系統變更的信息已完全同步至應用系統中。
本文所述的企業應用與目錄系統的信息同步方案,通過標準Web服務接口,由目錄系統主動推送變更信息至各應用系統,再由各應用系統自身實現Web服務異步執行、中間表緩沖及同步等機制,最終實現目錄系統與應用系統的信息同步。該方案不僅無需改動應用系統已有結構和業務邏輯、實現松耦合集成,還能防止目錄系統待同步信息的丟失、提高可靠性。此外,本方案具有通用性,可滿足不同企業的應用系統與目錄系統的信息同步需求。
[1]吳榮國,Web服務與目錄服務在系統集成中的應用研究,計算機工程與設計,200627(8).
[2]王謝寧,目錄服務在信息資源整合中的應用——目錄服務的協議及產品分析比較,情報雜志,200827(7).
[3]丁維龍,一種基于Web Service的虛擬化目錄服務,微電子學與計算機,200724(9).