梁懿,陳又詠,董曉褀,張富林
(福建億榕信息技術(shù)有限公司,福建,福州 350003)
隨著當(dāng)前信息技術(shù)和時(shí)代經(jīng)濟(jì)的迅猛發(fā)展,各級(jí)政府和企業(yè)相繼建立了屬于自己的數(shù)據(jù)庫(kù)管理系統(tǒng),以滿足信息存儲(chǔ)和信息共享等多方面的需求,為部門內(nèi)部或者與公眾之間的信息建立橋梁。各個(gè)數(shù)據(jù)庫(kù)都是相對(duì)獨(dú)立的,保證各個(gè)數(shù)據(jù)庫(kù)中數(shù)據(jù)消息的一致性是當(dāng)前關(guān)注的熱點(diǎn)。同步中間件技術(shù)可有效確保數(shù)據(jù)一致性的特點(diǎn),減少了用戶訪問數(shù)據(jù)庫(kù)的時(shí)間,節(jié)省了更多資源。因此,本文基于分布式數(shù)據(jù)庫(kù)同步系統(tǒng),采用中間件技術(shù)和XML格式設(shè)計(jì)了同步中間件系統(tǒng),該系統(tǒng)在滿足數(shù)據(jù)的一致性的同時(shí),還能避免所傳輸數(shù)據(jù)信息的安全性。
1.1.1 分布式數(shù)據(jù)庫(kù)
分布式數(shù)據(jù)庫(kù)是指將同一個(gè)數(shù)據(jù)系統(tǒng)存放在多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)中,引入多個(gè)數(shù)據(jù)副本,并且各個(gè)節(jié)點(diǎn)的數(shù)據(jù)副本均能對(duì)同一個(gè)數(shù)據(jù)進(jìn)行操作,因此保證所有節(jié)點(diǎn)的數(shù)據(jù)的一致性是確保系統(tǒng)正常運(yùn)轉(zhuǎn)的先決條件。分布式數(shù)據(jù)庫(kù)給用戶和系統(tǒng)帶來了很大的便利條件,一方面,用戶只需訪問本地?cái)?shù)據(jù)庫(kù),減少訪問延遲時(shí)間和通信損耗,從而提高系統(tǒng)的使用性能;另一方面,多個(gè)數(shù)據(jù)庫(kù)的同時(shí)使用會(huì)提高數(shù)據(jù)的吞吐量,并且系統(tǒng)不會(huì)因?yàn)槟硞€(gè)數(shù)據(jù)庫(kù)出現(xiàn)故障而癱瘓,增強(qiáng)了數(shù)據(jù)的實(shí)用性和系統(tǒng)的安全性。
1.1.2 數(shù)據(jù)庫(kù)同步
當(dāng)一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)中同時(shí)存在兩個(gè)或多個(gè)數(shù)據(jù)庫(kù),系統(tǒng)管理人員通過相關(guān)技術(shù)手段將其中一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)傳輸?shù)搅硗獾臄?shù)據(jù)庫(kù),并能確保2個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)完全一致,此操作過程稱為數(shù)據(jù)庫(kù)同步。其他數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)會(huì)隨著發(fā)生改變的數(shù)據(jù)庫(kù)而變化,確保數(shù)據(jù)的完整統(tǒng)一。
中間件技術(shù)是負(fù)責(zé)前端應(yīng)用程序和系統(tǒng)之間傳遞數(shù)據(jù)的紐帶,以實(shí)現(xiàn)穩(wěn)定高效的目的。分布式數(shù)據(jù)庫(kù)可借助中間件技術(shù)共享數(shù)據(jù)資源,它位于服務(wù)器操作系統(tǒng)之上,幫助用戶靈活高效地開發(fā)復(fù)雜的應(yīng)用軟件。本文設(shè)計(jì)的同步中間件技術(shù)可有效達(dá)到系統(tǒng)預(yù)期效果,確保傳輸數(shù)據(jù)的同步性和一致性[1]。
XML(可擴(kuò)展的標(biāo)記語言,extensible markup language)作為一種顯示數(shù)據(jù)的語言,它以良好的數(shù)據(jù)儲(chǔ)存格式、可延展性以及高度結(jié)構(gòu)化的優(yōu)點(diǎn)使數(shù)據(jù)在網(wǎng)絡(luò)中進(jìn)行無障礙的傳輸,并呈現(xiàn)給用戶。通過XML轉(zhuǎn)換格式,對(duì)傳輸?shù)臄?shù)據(jù)封裝或解析起到至關(guān)重要的作用,并提高了系統(tǒng)的可操作性、安全性以及滿足不斷增長(zhǎng)的應(yīng)用需求。
隨著各大數(shù)據(jù)庫(kù)同步系統(tǒng)的建立,確保數(shù)據(jù)完整性和及時(shí)同步性是當(dāng)今社會(huì)關(guān)注的重點(diǎn)內(nèi)容。現(xiàn)存的分布式數(shù)據(jù)庫(kù)同步系統(tǒng)還不成熟,常常會(huì)出現(xiàn)數(shù)據(jù)丟失、出現(xiàn)故障的情況。為避免上述情況的發(fā)生,確保分布式數(shù)據(jù)庫(kù)同步中間件系統(tǒng)的高效穩(wěn)定是系統(tǒng)的需求,減少各個(gè)數(shù)據(jù)庫(kù)系統(tǒng)對(duì)接時(shí)發(fā)生的錯(cuò)誤信息,保證運(yùn)行穩(wěn)定,數(shù)據(jù)同步。另外,在設(shè)計(jì)同步中間件技術(shù)需遵循3大設(shè)計(jì)原則,穩(wěn)定、可靠、可擴(kuò)展性。
本系統(tǒng)的設(shè)計(jì)目標(biāo)是數(shù)據(jù)可以在分布式數(shù)據(jù)庫(kù)之間穩(wěn)定完整地傳輸,能夠避免數(shù)據(jù)的丟失,保證在出現(xiàn)異常傳輸情況時(shí)可以及時(shí)有效地處理。
2.3.1 系統(tǒng)模型的建立
在分布式數(shù)據(jù)庫(kù)中,各個(gè)節(jié)點(diǎn)數(shù)據(jù)副本之間功能相同,地位平等。數(shù)據(jù)庫(kù)和數(shù)據(jù)副本之間是通過同步中間件設(shè)計(jì)的通信模塊進(jìn)行同步數(shù)據(jù)的傳遞,進(jìn)而保證所有數(shù)據(jù)副本中數(shù)據(jù)的一致性。系統(tǒng)的架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)圖
由圖1可知,數(shù)據(jù)副本的節(jié)點(diǎn)之間是通過網(wǎng)絡(luò)進(jìn)行連接的,每個(gè)節(jié)點(diǎn)由數(shù)據(jù)庫(kù)同步中間件和數(shù)據(jù)庫(kù)系統(tǒng)兩部分構(gòu)成。
數(shù)據(jù)同步中間件系統(tǒng)負(fù)責(zé)實(shí)時(shí)監(jiān)測(cè)和解析并加以處理數(shù)據(jù)的過程,若分析結(jié)果顯示未出現(xiàn)異常,直接繼續(xù)下一數(shù)據(jù)傳輸步驟,完成數(shù)據(jù)通信模塊;若發(fā)現(xiàn)有異常沖突數(shù)據(jù)產(chǎn)生,系統(tǒng)將終止操作并返回上述程序。在分布式數(shù)據(jù)庫(kù)系統(tǒng)中,每一個(gè)節(jié)點(diǎn)都擁有獨(dú)立的數(shù)據(jù)庫(kù)系統(tǒng),通過數(shù)據(jù)庫(kù)系統(tǒng)方能完成數(shù)據(jù)傳輸,分為本地?cái)?shù)據(jù)庫(kù)和遠(yuǎn)程數(shù)據(jù)庫(kù)[2]。
2.3.2 系統(tǒng)功能模塊
在分布式數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)同步中間件是整個(gè)系統(tǒng)的核心組成部分,如圖2所示。根據(jù)數(shù)據(jù)之間的傳輸關(guān)系,本文設(shè)計(jì)的數(shù)據(jù)庫(kù)中間件劃分為上層端口、數(shù)據(jù)管理模塊、沖突處理模塊、數(shù)據(jù)通信模塊、接收端模塊、下層接口共6個(gè)主要功能模塊。
圖2 同步中間件系統(tǒng)設(shè)計(jì)結(jié)構(gòu)圖
(1) 上層端口
用于連接前端應(yīng)用程序。
(2) 數(shù)據(jù)管理模塊
數(shù)據(jù)管理模塊分為數(shù)據(jù)捕獲和解析兩個(gè)分支,用于捕獲和判斷分析需同步的數(shù)據(jù)。
(3) 沖突處理模塊
處于分布式環(huán)境下,多個(gè)數(shù)據(jù)副本的節(jié)點(diǎn)可同時(shí)對(duì)同一數(shù)據(jù)進(jìn)行操作,從而產(chǎn)生數(shù)據(jù)沖突的情況,故在系統(tǒng)中設(shè)計(jì)了沖突處理模塊,用于檢測(cè)用戶提交的數(shù)據(jù)是否沖突,如沖突,返回并終止數(shù)據(jù)的傳輸,避免造成輸入混亂。
(4) 數(shù)據(jù)通信模塊
通信模塊是數(shù)據(jù)庫(kù)和數(shù)據(jù)副本之間的數(shù)據(jù)傳輸紐帶,它將系統(tǒng)中需同步的數(shù)據(jù)及時(shí)有序地傳遞到每個(gè)數(shù)據(jù)副本節(jié)點(diǎn)上,無論更新哪個(gè)節(jié)點(diǎn)的數(shù)據(jù)信息,其他成員節(jié)點(diǎn)都能接收到相應(yīng)的同步的信息或數(shù)據(jù)。為了方便系統(tǒng)對(duì)同步數(shù)據(jù)的轉(zhuǎn)換和解析,本設(shè)計(jì)結(jié)合XML技術(shù),將同步的數(shù)據(jù)通過通信模塊封裝成XML格式發(fā)送給其他節(jié)點(diǎn)。
(5) 接收端模塊
接收通信模塊傳入的消息并根據(jù)提取信息更新數(shù)據(jù)庫(kù),同時(shí)在更新完數(shù)據(jù)庫(kù)時(shí)需將確認(rèn)信息回傳給通信模塊,便于下組信息的發(fā)送。
(6) 下層接口
負(fù)責(zé)連接需同步的數(shù)據(jù)庫(kù)。
2.3.3 中間件工作流程
分布式數(shù)據(jù)庫(kù)同步中間件工作流程如下所述:
(1) 負(fù)責(zé)與數(shù)據(jù)庫(kù)A連接的應(yīng)用程序,經(jīng)上層接口將同步數(shù)據(jù)發(fā)送給數(shù)據(jù)管理模塊;
(2) 數(shù)據(jù)管理模塊負(fù)責(zé)對(duì)上述的數(shù)據(jù)捕獲和解析,完成后轉(zhuǎn)發(fā)給沖突處理模塊;
(3) 沖突處理模塊對(duì)接收的數(shù)據(jù)進(jìn)行檢測(cè)是否存在沖突,如沖突,將終止并返回,無沖突,直接發(fā)送給數(shù)據(jù)通信模塊;
(4) 通信模塊讀取上述傳遞過來的數(shù)據(jù)信息,通過網(wǎng)絡(luò)將信息發(fā)送給接收端模塊;
(5) 一旦發(fā)現(xiàn)有信息傳入進(jìn)來,接收端模塊取出信息,并根據(jù)消息內(nèi)容更新數(shù)據(jù)庫(kù);
(6) 完成了數(shù)據(jù)的更新,接收端模塊會(huì)將確認(rèn)信息回傳給通信模塊;
(7) 收到確認(rèn)消息后,通信模塊再發(fā)送下一組消息。
(8) 最后所有需同步的數(shù)據(jù)通過下層接口傳輸給目標(biāo)數(shù)據(jù)庫(kù)B和數(shù)據(jù)庫(kù)C。
根據(jù)上述對(duì)分布式數(shù)據(jù)庫(kù)同步中間件系統(tǒng)中各個(gè)功能模塊的設(shè)計(jì),現(xiàn)對(duì)各功能模塊實(shí)現(xiàn)的可行性進(jìn)行如下分析,功能模塊實(shí)現(xiàn)流程如圖3所示。
圖3 功能模塊實(shí)現(xiàn)流程圖
系統(tǒng)設(shè)計(jì)的功能模塊的實(shí)現(xiàn)就是根據(jù)上述流程圖進(jìn)行,前提必須是數(shù)據(jù)管理系統(tǒng)和數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象都是相同的,各個(gè)功能模塊相互配合,最后通過接收端模塊將數(shù)據(jù)更新到多個(gè)數(shù)據(jù)庫(kù)中,保證了數(shù)據(jù)庫(kù)的一致性。
本系統(tǒng)測(cè)試環(huán)境的配置情況如表1所示。
表1 系統(tǒng)測(cè)試環(huán)境配置表
在數(shù)據(jù)庫(kù)A中加入1條信息內(nèi)容,查看數(shù)據(jù)庫(kù)B和數(shù)據(jù)庫(kù)C是否含有更新的數(shù)據(jù)[3]。測(cè)試數(shù)據(jù)信息如表2所示。
表2 測(cè)試數(shù)據(jù)信息表
具體的測(cè)試步驟如圖4所示。
圖4 測(cè)試步驟流程
經(jīng)過對(duì)系統(tǒng)測(cè)試,對(duì)于數(shù)據(jù)庫(kù)A中數(shù)據(jù)的新增,修改和刪除操作都能在數(shù)據(jù)庫(kù)B和C得到同步數(shù)據(jù)。
3.5.1 安全性驗(yàn)證
系統(tǒng)安全性包含兩方面的安全,一是消息在傳輸?shù)倪^程中是否安全,數(shù)據(jù)是否會(huì)丟失;二是傳輸?shù)臄?shù)據(jù)對(duì)象均被轉(zhuǎn)化成XML格式,故在任何時(shí)間查看通信模塊中的消息都是無法直接讀取的,從而保證該數(shù)據(jù)內(nèi)容的安全。通過上述測(cè)試結(jié)果可知,同步中間件系統(tǒng)中的數(shù)據(jù)未丟失,保證了系統(tǒng)的安全性[4]。
3.5.2 及時(shí)性驗(yàn)證
驗(yàn)證系統(tǒng)的傳輸數(shù)據(jù)的及時(shí)性應(yīng)將網(wǎng)絡(luò)、分布式數(shù)據(jù)庫(kù)和服務(wù)器配置等因素考慮在內(nèi),數(shù)據(jù)同步消耗時(shí)間的具體數(shù)據(jù)如表3所示。由耗時(shí)數(shù)據(jù)可知,數(shù)據(jù)同步的及時(shí)性滿足系統(tǒng)需要。
表3 及時(shí)性驗(yàn)證數(shù)據(jù)表
3.5.3 沖突性驗(yàn)證
本文選取2個(gè)用戶同時(shí)在數(shù)據(jù)副本B和數(shù)據(jù)副本C輸入相同的事物(并發(fā)事務(wù)),這時(shí)系統(tǒng)中的沖突處理模塊發(fā)揮作用,檢測(cè)到處于不同位置的數(shù)據(jù)節(jié)點(diǎn)在更新同一個(gè)數(shù)據(jù),終止事物并返回,結(jié)果表明系統(tǒng)的沖突性處理基本符合要求[5-6]。
3.5.4 同步性驗(yàn)證
驗(yàn)證系統(tǒng)的同步性的先決條件是確保系統(tǒng)中各個(gè)模塊操作正確、運(yùn)行穩(wěn)定,在此基礎(chǔ)上監(jiān)測(cè)本地?cái)?shù)據(jù)庫(kù)和各數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)是否一致,測(cè)試結(jié)果顯示:當(dāng)更新任何一個(gè)數(shù)據(jù)庫(kù)中的消息,其他節(jié)點(diǎn)中的數(shù)據(jù)也會(huì)及時(shí)的改變?yōu)楦潞蟮臄?shù)據(jù),所含內(nèi)容相同[7]。
本文討論了分布式數(shù)據(jù)庫(kù)同步的基本理論知識(shí)和相關(guān)技術(shù)后,設(shè)計(jì)了一款基于中間件技術(shù)的分布式數(shù)據(jù)庫(kù)同步的系統(tǒng)。并針對(duì)系統(tǒng)中設(shè)計(jì)的數(shù)據(jù)管理、沖突處理、數(shù)據(jù)通信以及接收端等各大功能模塊做了詳細(xì)的闡述說明。最后對(duì)本系統(tǒng)進(jìn)行了測(cè)試和驗(yàn)證,執(zhí)行情況良好,保證了傳輸數(shù)據(jù)的有效性和系統(tǒng)的可靠性。另外對(duì)于數(shù)據(jù)沖突處理模塊的設(shè)計(jì)還不夠完善,待于后續(xù)認(rèn)真研究。