張萬里
(中原科技學(xué)院,河南 鄭州 450000)
為了應(yīng)對數(shù)據(jù)爆炸式增長帶來的數(shù)據(jù)庫存儲壓力,分布式數(shù)據(jù)庫應(yīng)運而生。它是將數(shù)據(jù)庫系統(tǒng)和計算機網(wǎng)絡(luò)相結(jié)合,利用終端計算機與分布式網(wǎng)絡(luò),將分散在各處的數(shù)據(jù)庫連接起來,得到一個可以統(tǒng)一調(diào)度的數(shù)據(jù)庫系統(tǒng)。在大幅度提高數(shù)據(jù)存儲容量的同時,還能為數(shù)據(jù)查詢、調(diào)用等提供便利??紤]到數(shù)據(jù)庫系統(tǒng)時時刻刻都有新的數(shù)據(jù)存入,因此必須要應(yīng)用數(shù)據(jù)同步技術(shù),保證單個節(jié)點與終端之間的數(shù)據(jù)保持一致性。分布式網(wǎng)絡(luò)數(shù)據(jù)同步技術(shù)的應(yīng)用能夠同時滿足上述需求,在現(xiàn)階段的一些大型信息系統(tǒng)中得到了廣泛應(yīng)用。
分布式數(shù)據(jù)庫(DDB)按照控制模式的不同,可以分成集中型、分散型、可變型3 種基本類型。由于數(shù)據(jù)是分散存儲在由計算機網(wǎng)絡(luò)聯(lián)結(jié)起來的多個站點上,因此數(shù)據(jù)的存儲、備份、調(diào)用、刪除等一系列操作也具有分布性特點。其中,每一個獨立的節(jié)點可自行完成數(shù)據(jù)的簡單處理,從而減輕了控制終端的運行壓力。由于分布式數(shù)據(jù)庫的結(jié)構(gòu)龐大且復(fù)雜,因此通常會選擇增加冗余數(shù)據(jù)的方式來增強系統(tǒng)本身的可靠性。假如某個節(jié)點上發(fā)生故障,則系統(tǒng)可直接跳過該節(jié)點,繼續(xù)在其他節(jié)點上完成操作,不會因為單個節(jié)點故障而影響到整個系統(tǒng)的運行。
數(shù)據(jù)安全性是評價數(shù)據(jù)庫系統(tǒng)性能的一個核心指標,而分布式數(shù)據(jù)庫由于組織結(jié)構(gòu)復(fù)雜、數(shù)據(jù)量龐大,服務(wù)器經(jīng)常處于高負載甚至是超負載運行狀態(tài)。一旦數(shù)據(jù)庫系統(tǒng)崩潰,將會造成重要數(shù)據(jù)的損壞、丟失。數(shù)據(jù)同步技術(shù)可以基于分布式數(shù)據(jù)庫的結(jié)構(gòu)特點和運行特性,使存儲在不同節(jié)點上的數(shù)據(jù),能夠定期得到更新,并保證源數(shù)據(jù)和備份數(shù)據(jù)始終保持一致。這樣即便因為數(shù)據(jù)庫系統(tǒng)出現(xiàn)突發(fā)故障,導(dǎo)致源數(shù)據(jù)丟失、損害,也能啟用備份數(shù)據(jù),而不會影響數(shù)據(jù)的正常使用。隨著數(shù)據(jù)同步技術(shù)的逐漸成熟,根據(jù)數(shù)據(jù)復(fù)制方式的不同,又可將其分為同步復(fù)制和異步復(fù)制兩種類型;而根據(jù)同步方向的差異,則可以分為單向同步、雙向同步兩種類型。本文主要介紹了完全對等數(shù)據(jù)同步技術(shù)的應(yīng)用。
該模型的作用是在分布式網(wǎng)絡(luò)環(huán)境中,實現(xiàn)對等數(shù)據(jù)同步。其運行原理:當任意一個節(jié)點的數(shù)據(jù)庫更新了關(guān)鍵數(shù)據(jù)后,系統(tǒng)能夠及時做出反應(yīng)并對更新事務(wù)進行采集和分發(fā),將更新事務(wù)同步到該分布式網(wǎng)絡(luò)的其他對等節(jié)點。完成同步更新后,即可使所有節(jié)點的數(shù)據(jù)保持一致性,達到完全對等的數(shù)據(jù)同步。在該模型中,所有節(jié)點服務(wù)端均采用并聯(lián)方式與網(wǎng)絡(luò)對接。這樣就保證了無論哪一個節(jié)點出現(xiàn)了故障,都不會對其他節(jié)點產(chǎn)生干擾。完全對等數(shù)據(jù)同步模型的結(jié)構(gòu)如圖1所示。
圖1 數(shù)據(jù)同步模型的系統(tǒng)結(jié)構(gòu)圖
結(jié)合圖1 可知,該模型系統(tǒng)主要由兩大部分組成,即注冊機服務(wù)端和節(jié)點服務(wù)端。其中,注冊機服務(wù)端主要用于接收前端階段數(shù)據(jù)庫反饋的事務(wù)報文,并將其分類存儲到事務(wù)數(shù)據(jù)庫的對應(yīng)分區(qū)中。同時,還支持階段服務(wù)器的注冊,以及新注冊節(jié)點服務(wù)器的初始化同步等功能。而節(jié)點服務(wù)端主要用于收集本地節(jié)點數(shù)據(jù)庫中出版表的更新事務(wù),并將其同步至其他節(jié)點服務(wù)器。實時檢測是否存在并發(fā)事務(wù)沖突,若存在則自動協(xié)調(diào)本地更新事務(wù)與遠程更新事務(wù)的沖突。另外還有記錄事務(wù)故障信息、維護本地出版表事務(wù)日志等功能。
傳統(tǒng)的數(shù)據(jù)同步模型都設(shè)有一個中心節(jié)點。當分布節(jié)點上的關(guān)鍵數(shù)據(jù)更新后,將更新事務(wù)反饋至中心節(jié)點,由此確定事務(wù)執(zhí)行順序、完成數(shù)據(jù)同步。但是這種模型在實際使用中也存在缺陷,例如中心節(jié)點負載過高,容易出現(xiàn)故障。而一旦中心節(jié)點故障,將會導(dǎo)致整個數(shù)據(jù)同步系統(tǒng)也隨之癱瘓。因此,本文提出了一種基于完全對等數(shù)據(jù)同步的節(jié)點協(xié)調(diào)策略,即不設(shè)中心節(jié)點,所有節(jié)點地位保持一致。當出現(xiàn)更新事務(wù)后,根據(jù)既定的節(jié)點協(xié)調(diào)策略完成事務(wù)執(zhí)行和數(shù)據(jù)同步操作。其實現(xiàn)算法:
(1)每隔一段時間刷新一次事務(wù)接收隊列,直到隊列中出現(xiàn)并發(fā)沖突。
(2)判斷事務(wù)發(fā)起節(jié)點與本節(jié)點編號是否一致,若一致則將本節(jié)點作為事務(wù)執(zhí)行控制節(jié)點。若不一致,則將事務(wù)分配至所屬控制節(jié)點。
(3)確定本節(jié)點為事務(wù)執(zhí)行控制節(jié)點后,按照既定的節(jié)點協(xié)調(diào)策略解決并發(fā)沖突。
基于節(jié)點協(xié)調(diào)策略的數(shù)據(jù)同步流程主要分為五步:第一步是分發(fā)事務(wù)。位于前端的事務(wù)獲取模塊會以特定頻率刷新事務(wù)更新消息,一旦事務(wù)更新則立即將該消息反饋至節(jié)點服務(wù)器。服務(wù)器讀取事務(wù)更新日志后,按照特定格式進行封裝,并發(fā)送至同屬于該分布式網(wǎng)絡(luò)的其他節(jié)點服務(wù)器。第二步是并發(fā)處理。其他節(jié)點服務(wù)器在接收到更新事務(wù)消息后,判斷是否存在事務(wù)并發(fā)沖突。若確實存在,則進行并發(fā)沖突處理。同時更新事務(wù)沖突序列。第三步是確定基于節(jié)點協(xié)調(diào)策略的中心節(jié)點(事務(wù)執(zhí)行控制節(jié)點)。按照時間順序讀取事務(wù)沖突列表,執(zhí)行一個判斷程序“事務(wù)發(fā)起節(jié)點與本節(jié)點的編號是否一致?”若判斷結(jié)果為“Y”,則將本節(jié)點作為事務(wù)執(zhí)行控制節(jié)點。若判斷結(jié)果為“N”,則等待該事務(wù)的執(zhí)行控制節(jié)點發(fā)送的控制命令。第四步是故障恢復(fù)。在出現(xiàn)事務(wù)并發(fā)執(zhí)行沖突后,系統(tǒng)的網(wǎng)絡(luò)或服務(wù)器會停運,導(dǎo)致數(shù)據(jù)無法同步。經(jīng)過節(jié)點協(xié)調(diào)處理后,故障恢復(fù),各個節(jié)點數(shù)據(jù)庫的數(shù)據(jù)重新保持一致。第五步是完成事務(wù)處理,并記錄故障信息,同步更新故障表。
2.4.1 實驗環(huán)境
在實驗室環(huán)境下使用5 臺Linux 服務(wù)器和局域網(wǎng)搭建了小型的仿真實驗裝置。選用Oracle 數(shù)據(jù)庫,數(shù)據(jù)庫與節(jié)點服務(wù)器之間一對一連接,5 臺節(jié)點服務(wù)器與局域網(wǎng)并聯(lián),彼此之間互不影響。
2.4.2 實驗內(nèi)容及結(jié)果
為了更加直觀地表示基于節(jié)點協(xié)調(diào)策略的數(shù)據(jù)同步模型在并發(fā)沖突處理上的高效性,設(shè)計了一組對照實驗。其中對照組為傳統(tǒng)的采用固定中心節(jié)點的數(shù)據(jù)同步模型;實驗組為基于節(jié)點協(xié)調(diào)策略的數(shù)據(jù)同步模型,分別進行5 組試驗。
實驗1:系統(tǒng)中設(shè)有1 個節(jié)點,使兩個系統(tǒng)的節(jié)點在同一時刻產(chǎn)生1 條事務(wù)更新。計算從系統(tǒng)獲取更新事務(wù)到其他節(jié)點全部接收到更新事務(wù)的用時;實驗2:在實驗1 的基礎(chǔ)上再增設(shè)1 個節(jié)點,仍然讓每個節(jié)點在同一時刻產(chǎn)生1 條事務(wù)更新,計算用時;實驗3、4、5均在上一組實驗的基礎(chǔ)上增加1 個節(jié)點,其他實驗內(nèi)容保持不變。統(tǒng)計實驗結(jié)果見表1。
表1 更新事務(wù)傳輸耗時
以節(jié)點數(shù)目為x 軸,以傳輸耗時為y 軸,根據(jù)表1數(shù)據(jù)繪制二維坐標圖,如圖2 所示。
綜合表1 和圖2 可以發(fā)現(xiàn),在節(jié)點數(shù)目為1 時,兩者之間更新事務(wù)傳輸耗時一致,均為0.30 ms。但是隨著節(jié)點數(shù)量的增加,傳統(tǒng)模型更新事務(wù)傳輸耗時明顯要高于基于節(jié)點協(xié)調(diào)策略的數(shù)據(jù)同步模型。其中,當節(jié)點數(shù)目增加至5 個時,傳統(tǒng)模型更新事務(wù)傳輸耗時達到了21.05 ms,而基于節(jié)點協(xié)調(diào)策略的數(shù)據(jù)同步模型用時僅為7.77 ms,用時縮短了63.1%。分析其原因,傳統(tǒng)模型在遇到節(jié)點事務(wù)更新后,分支節(jié)點需要將更新事務(wù)發(fā)送給中心節(jié)點,等到中心節(jié)點處理后再協(xié)調(diào)各個節(jié)點完成數(shù)據(jù)同步。節(jié)點越多的情況下,中心節(jié)點的運行負載越大,處理時間越長。相比之下,基于節(jié)點協(xié)調(diào)策略的數(shù)據(jù)同步模型,各個節(jié)點地位平等,在出現(xiàn)事務(wù)更新后可直接由對應(yīng)的節(jié)點完成處理,從而大幅度減少了傳輸耗時。
圖2 更新事務(wù)傳輸耗時對比
近年來網(wǎng)絡(luò)安全問題引起了社會各界的高度關(guān)注,數(shù)據(jù)丟失、隱私泄露等問題的頻繁發(fā)生不僅直接損害了個人、企業(yè)的利益,而且也不利于社會經(jīng)濟的發(fā)展。在這一背景下,網(wǎng)絡(luò)安全監(jiān)管系統(tǒng)得到了廣泛應(yīng)用,它是基于協(xié)議分析、訪問控制、事件審計等一系列技術(shù),對被監(jiān)管主機的重要信息、關(guān)鍵數(shù)據(jù)等進行實時監(jiān)控。一旦出現(xiàn)異常訪問或越權(quán)操作,則立即終止操作,從而切實保障了網(wǎng)絡(luò)安全,保障了信息隱私。某網(wǎng)絡(luò)安全監(jiān)管系統(tǒng)采用Oracle 9i 數(shù)據(jù)庫,運行服務(wù)器為Linux 95,系統(tǒng)采用分布式結(jié)構(gòu),需要實現(xiàn)對等數(shù)據(jù)同步功能。對數(shù)據(jù)庫系統(tǒng)提出了以下要求:第一是采用基于事務(wù)的數(shù)據(jù)同步更新,保證關(guān)鍵數(shù)據(jù)在更新后立刻同步至其他節(jié)點;第二是任意一個節(jié)點都具備對關(guān)鍵數(shù)據(jù)的操作權(quán)利,保證節(jié)點之間地位平等,提高事務(wù)更新響應(yīng)速度;第三是數(shù)據(jù)同步期間不會因為某個節(jié)點故障而受到干擾。同時在網(wǎng)絡(luò)故障恢復(fù)后能夠自動恢復(fù)數(shù)據(jù)直到數(shù)據(jù)完全同步。基于上述需求,設(shè)計了一種基于節(jié)點協(xié)調(diào)策略的完全對等數(shù)據(jù)同步模型,將其應(yīng)用到該網(wǎng)絡(luò)安全監(jiān)管系統(tǒng)中。
3.2.1 注冊新節(jié)點
在數(shù)據(jù)同步系統(tǒng)中,需要添加新的節(jié)點時必須要提前將該節(jié)點的相關(guān)信息錄入到注冊機服務(wù)端。在注冊信息列表中查詢到該節(jié)點的信息,才能使該節(jié)點正常投入運行,同時更新后的注冊信息列表也會同步更新至節(jié)點服務(wù)端。其中,注冊機服務(wù)端擁有管理權(quán)限,而節(jié)點服務(wù)端只具備閱讀、申請修改的權(quán)限。注冊信息列表的結(jié)構(gòu)見表2。
表2 注冊信息表結(jié)構(gòu)
由于該系統(tǒng)中所有節(jié)點的地位平等,因此注冊流程也基本一致。首先,節(jié)點服務(wù)端的服務(wù)器收集的IP地址、端口號等配置信息,并打包發(fā)送至注冊機服務(wù)端。在順利接收到與新增節(jié)點有關(guān)的注冊信息后,注冊機服務(wù)器將該信息儲存到注冊信息表中,并刷新一次信息表,這時系統(tǒng)會按照注冊順序自動生成節(jié)點編號。完成注冊后,注冊機服務(wù)器將注冊信息表同步更新到該分布式網(wǎng)絡(luò)下的各個節(jié)點。
3.2.2 新節(jié)點初始化
出版結(jié)構(gòu)表是一種用于描述在對等數(shù)據(jù)同步時數(shù)據(jù)庫中關(guān)鍵數(shù)據(jù)的表結(jié)構(gòu),其功能主要有兩個,即記錄初始化數(shù)據(jù)和記錄事務(wù)同步時的關(guān)鍵數(shù)據(jù)。通常情況下,當注冊機服務(wù)端在接收到新節(jié)點注冊請求后,會自動生成新的出版結(jié)構(gòu)表,并根據(jù)新節(jié)點注冊信息自動填充表格內(nèi)容,包括表ID、表名字、數(shù)據(jù)類型等。除了出版結(jié)構(gòu)表外,新節(jié)點初始化中還需要建立事務(wù)日志表,其作用是提供節(jié)點初始化關(guān)鍵數(shù)據(jù)的同步服務(wù)。新節(jié)點的初始化過程如圖3 所示。
圖3 新節(jié)點初始化過程
3.2.3 完全對等數(shù)據(jù)同步
在新節(jié)點初始化以后,進入數(shù)據(jù)同步環(huán)節(jié)。完全對等數(shù)據(jù)同步分3 個步驟實現(xiàn),分別是事務(wù)獲取與發(fā)送、事務(wù)接收與并發(fā)處理、事務(wù)執(zhí)行與數(shù)據(jù)沖突處理。位于節(jié)點端的事務(wù)獲取模塊,會按照特定頻率采集數(shù)據(jù)庫的活動事務(wù),若沒有檢測到事務(wù)更新,則重復(fù)檢測,直到檢測到新的活動事務(wù)。然后讀取事務(wù)更新內(nèi)容,并加蓋時間戳,將其添加至本地事務(wù)列表中。系統(tǒng)會根據(jù)時間順序依次讀取節(jié)點信息,若節(jié)點正常,則向該節(jié)點發(fā)送更新事務(wù);若節(jié)點異常,則將更新事務(wù)寫入故障數(shù)據(jù)表,重新尋找其他可行節(jié)點進行處理。節(jié)點服務(wù)端在接收到更新事務(wù)信息后,立即做并發(fā)沖突檢測,利用預(yù)設(shè)的沖突處理程序完成并發(fā)沖突的處理。處理完畢后,根據(jù)節(jié)點協(xié)調(diào)策略,將更新事務(wù)同步到其他節(jié)點上,從而保證了數(shù)據(jù)一致性。
現(xiàn)階段一些大容量的數(shù)據(jù)庫,為了保證數(shù)據(jù)安全和提高數(shù)據(jù)查詢速度,通常會采用分布式結(jié)構(gòu)。面對海量化的數(shù)據(jù),應(yīng)用數(shù)據(jù)同步技術(shù)可以讓數(shù)據(jù)庫系統(tǒng)各個分布式節(jié)點上的數(shù)據(jù)做到同步更新、完全一致,對降低數(shù)據(jù)庫系統(tǒng)的運行負荷和提高操作響應(yīng)速度有顯著作用。本文設(shè)計的一種基于節(jié)點協(xié)調(diào)策略的完全對等數(shù)據(jù)同步模型,無論是在仿真實驗還是在實際應(yīng)用中,更新事務(wù)傳輸耗時均明顯低于傳統(tǒng)的數(shù)據(jù)同步模型,在大型信息系統(tǒng)中具有推廣應(yīng)用價值。