張翰文
摘 要:文章針對(duì)廣域網(wǎng)架構(gòu)下的多數(shù)據(jù)副本的數(shù)據(jù)一致性問(wèn)題,提出了基于ZeroMQ及增量數(shù)據(jù)抽取的同步方案,研制了同步軟件UltraSync。在中國(guó)民航流量管理系統(tǒng)的研制與應(yīng)用中,UltraSync能高效地同步中心節(jié)點(diǎn)數(shù)據(jù)分布在全國(guó)的二級(jí)分系統(tǒng),有效解決了核心數(shù)據(jù)的分布式存儲(chǔ)問(wèn)題。
關(guān)鍵詞:數(shù)據(jù)同步;消息中間件;分布式數(shù)據(jù)存儲(chǔ)
1 相關(guān)工作
1.1 數(shù)據(jù)同步軟件概況
在傳統(tǒng)數(shù)據(jù)中心建設(shè)中,核心系統(tǒng)數(shù)據(jù)一般保存在磁盤陣列,通過(guò)磁盤陣列的鏡像復(fù)制技術(shù)或存儲(chǔ)虛擬化技術(shù)進(jìn)行存儲(chǔ)設(shè)備間的同步[1-2],可以達(dá)到同城/異地?cái)?shù)據(jù)庫(kù)雙活,進(jìn)而達(dá)到系統(tǒng)的容災(zāi)故障轉(zhuǎn)移和自動(dòng)化運(yùn)行。存儲(chǔ)設(shè)備層的同步,需要有硬件存儲(chǔ)設(shè)備支持該特性,且對(duì)系統(tǒng)間的網(wǎng)絡(luò)要求較高,如系統(tǒng)間需要配備裸光纖加波分復(fù)用設(shè)備,有較大的資金投入。通過(guò)網(wǎng)絡(luò)傳輸至遠(yuǎn)端執(zhí)行。其他方式如通過(guò)數(shù)據(jù)庫(kù)的觸發(fā)器機(jī)制獲取增量數(shù)據(jù),然后將數(shù)據(jù)傳輸?shù)綄?duì)方數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)還原,本質(zhì)還是獲取底層的變化增量數(shù)據(jù),在遠(yuǎn)端進(jìn)行相同的DML操作來(lái)達(dá)到數(shù)據(jù)同步。
1.2 設(shè)計(jì)難點(diǎn)
中國(guó)民航流量管理系統(tǒng)在數(shù)據(jù)庫(kù)架構(gòu)上主要包含三個(gè)中心一級(jí)節(jié)點(diǎn)及八個(gè)地區(qū)二級(jí)節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)都配置有基于Oracle RAC集群的本地?cái)?shù)據(jù)庫(kù)及應(yīng)用服務(wù)集群。在數(shù)據(jù)共享層引入了業(yè)界傳輸速度較快的ZeroMQ(以下簡(jiǎn)稱“ZMQ”)消息中間件技術(shù),設(shè)計(jì)了一套增量的基于數(shù)據(jù)結(jié)果的同步協(xié)議,利用可靠傳輸及校驗(yàn)機(jī)制,使飛行計(jì)劃結(jié)果數(shù)據(jù)在各個(gè)數(shù)據(jù)庫(kù)副本間高效流轉(zhuǎn)。
系統(tǒng)所處的網(wǎng)絡(luò)環(huán)境為民航通信網(wǎng),帶寬資源需與各類民航空管系統(tǒng)共享,有著嚴(yán)格的QOS要求,因此在數(shù)據(jù)同步過(guò)程中需要考慮數(shù)據(jù)的壓縮及帶寬占用率。如何平衡低延時(shí)與低帶寬占用,是UltraSync在研發(fā)實(shí)施中的一個(gè)難點(diǎn)。
2 UltraSync關(guān)鍵技術(shù)
2.1 ZMQ傳輸中間件
在數(shù)據(jù)的傳輸同步過(guò)程中,通常使用基于消息中間件的通信技術(shù),保障數(shù)據(jù)的無(wú)損傳輸[3]。Message Queue(消息隊(duì)列)技術(shù)可以提供信息傳送的路由,并保障信息的傳遞,且消息隊(duì)列可在消息接收者未消費(fèi)或者未連接的情況下保留數(shù)據(jù),直至下一次被消費(fèi)者取走。UltraSync在設(shè)計(jì)研發(fā)時(shí),選用了ZMQ作為消息服務(wù)中間件。相比于其他MQ,其具備通信模式靈活,去中心化的分布式架構(gòu)及吞吐量高的特性。ZMQ支持的傳輸模式包括:REQ/REP請(qǐng)求響應(yīng)模式,PUB/SUB發(fā)布訂閱模式,ROUTER/DEALER路由代理模式。
數(shù)據(jù)提供方是數(shù)據(jù)的生產(chǎn)者,在民航流量管理系統(tǒng)中,即為處在中心節(jié)點(diǎn)的一級(jí)數(shù)據(jù)庫(kù)系統(tǒng)。UltraSync在一級(jí)部署了服務(wù)端,為二級(jí)同步提供代理服務(wù)。通過(guò)消息路由代理模式,數(shù)據(jù)提供方和請(qǐng)求方通過(guò)代理交互,而不用各方建立底層的多對(duì)多的數(shù)據(jù)連接,簡(jiǎn)化了系統(tǒng)模塊間的交叉通信??紤]系統(tǒng)處理能力有差異,在客戶端增加了本地緩存,通過(guò)ZMQ傳輸?shù)耐綌?shù)據(jù)會(huì)先在客戶端本地寫(xiě)入數(shù)據(jù)請(qǐng)求方的共享內(nèi)存,減少網(wǎng)絡(luò)消息阻塞等待客戶端入庫(kù)的時(shí)延。
2.2 數(shù)據(jù)傳輸工作流
UltraSync提取增量源數(shù)據(jù)的方式主要是通過(guò)數(shù)據(jù)時(shí)標(biāo)或觸發(fā)器機(jī)制,獲取變化的數(shù)據(jù),其基本捕獲的數(shù)據(jù)事件為DML類型的增刪修改事件。為保證變更的數(shù)據(jù)能正確的傳達(dá)至二級(jí),UltraSync工具設(shè)計(jì)了一套隊(duì)列機(jī)制,對(duì)每一個(gè)二級(jí)節(jié)點(diǎn)的同步客戶端連接,建立一個(gè)專用的服務(wù)程序?qū)ζ溥M(jìn)行數(shù)據(jù)傳輸,類似Oracle數(shù)據(jù)庫(kù)服務(wù)器的Dedicated Server模式。
在客戶端與客戶端建立隊(duì)列的過(guò)程中,先通過(guò)連接隊(duì)列消息CONN,請(qǐng)求確認(rèn)消息ACP,數(shù)據(jù)索取消息REQ交互需要傳輸?shù)臄?shù)據(jù)表及二級(jí)最新的數(shù)據(jù)時(shí)標(biāo)。一級(jí)的專用服務(wù)進(jìn)程通過(guò)比對(duì)下級(jí)上報(bào)的時(shí)標(biāo),獲取需要傳輸?shù)脑隽繑?shù)據(jù),對(duì)本批次傳輸?shù)臄?shù)據(jù)行進(jìn)行流水號(hào)編號(hào),通過(guò)ZMQ隊(duì)列傳輸至二級(jí)。二級(jí)對(duì)接收的數(shù)據(jù)依據(jù)流水號(hào)是否連續(xù)進(jìn)行兩端確認(rèn),無(wú)誤后執(zhí)行數(shù)據(jù)的修改操作,從而保證數(shù)據(jù)的一致及增量數(shù)據(jù)的完整性。
3 系統(tǒng)同步架構(gòu)及實(shí)現(xiàn)
3.1 系統(tǒng)總體架構(gòu)
以UltraSync的實(shí)際應(yīng)用場(chǎng)景為例。在同步系統(tǒng)設(shè)計(jì)上,在一級(jí)節(jié)點(diǎn)部署UltraSync服務(wù)端,在二級(jí)節(jié)點(diǎn)部署UltraSync代理客戶端,實(shí)現(xiàn)一級(jí)到二級(jí)點(diǎn)對(duì)點(diǎn),1對(duì)N的數(shù)據(jù)同步傳輸,如圖1所示。
首先,在一級(jí)節(jié)點(diǎn)上,系統(tǒng)整體設(shè)計(jì)為主,備,應(yīng)急的高冗余數(shù)據(jù)中心級(jí)架構(gòu)。對(duì)于二級(jí)系統(tǒng)的同步代理端,如何連接正在運(yùn)行的一級(jí)節(jié)點(diǎn)是實(shí)現(xiàn)的難點(diǎn)。Ultra Sync參照現(xiàn)在流行的開(kāi)源系統(tǒng)架構(gòu),采用類似服務(wù)網(wǎng)關(guān)的設(shè)計(jì),即在系統(tǒng)的DMZ隔離區(qū),通過(guò)服務(wù)網(wǎng)關(guān)統(tǒng)一代理主,備,應(yīng)急系統(tǒng)的一級(jí)核心數(shù)據(jù)庫(kù)。在中國(guó)空管局三中心一級(jí)節(jié)點(diǎn)內(nèi)部,服務(wù)端對(duì)始終指向當(dāng)前為主用運(yùn)行系統(tǒng)的數(shù)據(jù)庫(kù),通過(guò)統(tǒng)一的對(duì)外數(shù)據(jù)接口提供服務(wù)。
3.2? 網(wǎng)絡(luò)傳輸模塊
在網(wǎng)絡(luò)設(shè)置配置中,主要有GENERAL和CONNE-CTION兩類配置。GENERAL標(biāo)簽中配置了服務(wù)連接的數(shù)據(jù)庫(kù)賬戶身份信息.CONNECTION類配置中對(duì)每個(gè)二級(jí)節(jié)點(diǎn)定義了一套消息隊(duì)列,每個(gè)隊(duì)列以CONNECTION加地區(qū)代號(hào)的方式劃定作用范圍。在二級(jí)節(jié)點(diǎn)的標(biāo)簽內(nèi)定義了本地區(qū)節(jié)點(diǎn)的連接名稱,訂閱數(shù)據(jù)的端口號(hào)pubport,專用通信端口p2pport,以及每個(gè)地區(qū)節(jié)點(diǎn)限制的帶寬上限bandwidth。通過(guò)該配置,可實(shí)現(xiàn)二級(jí)節(jié)點(diǎn)的網(wǎng)絡(luò)參數(shù)調(diào)整,具備較強(qiáng)的靈活性。
服務(wù)端程序啟動(dòng)后,根據(jù)訂閱的端口號(hào)連接配置,生成服務(wù)名為nodename的專用連接進(jìn)程,而客戶端程序可以根據(jù)所處地區(qū)獲取配置中的訂閱端口,向服務(wù)端發(fā)起服務(wù)請(qǐng)求,獲取對(duì)應(yīng)節(jié)點(diǎn)的數(shù)據(jù)同步服務(wù)。
3.3? 數(shù)據(jù)抽取及壓縮模塊
系統(tǒng)的核心數(shù)據(jù)如飛行計(jì)劃數(shù)據(jù)在Oracle RAC集群中主要以字符串形式存儲(chǔ)。其傳輸一條記錄的基本流程如下:UltraSync在獲取數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)庫(kù)表元信息(MetaData)生成結(jié)構(gòu)體,在程序內(nèi)存中完成表數(shù)據(jù)到結(jié)構(gòu)體的復(fù)制,結(jié)構(gòu)體的壓縮,再通過(guò)ZMQ隊(duì)列進(jìn)行數(shù)據(jù)傳輸。在數(shù)據(jù)壓縮中,綜合考慮壓縮性能及壓縮比,使用了成熟的LZF壓縮算法,降低字符串?dāng)?shù)據(jù)在通信傳輸中的帶寬消耗,經(jīng)現(xiàn)場(chǎng)運(yùn)行驗(yàn)證,其壓縮性能及程序開(kāi)銷均能達(dá)到業(yè)務(wù)實(shí)時(shí)性的要求。
4 系統(tǒng)性能驗(yàn)證
UltraSync 模塊已在中國(guó)民航流量管理系統(tǒng)中上線,并承載全國(guó)各級(jí)節(jié)點(diǎn)實(shí)際的數(shù)據(jù)同步流量。作為代理程序,其性能受應(yīng)用服務(wù)器及數(shù)據(jù)庫(kù)服務(wù)器兩處影響,目前的服務(wù)器環(huán)境參數(shù),如表1所示。
在東北二級(jí)節(jié)點(diǎn)上線運(yùn)行過(guò)程中,一級(jí)全國(guó)飛行計(jì)劃數(shù)據(jù)庫(kù)發(fā)生數(shù)據(jù)變化,到二級(jí)節(jié)點(diǎn)數(shù)據(jù)入庫(kù),平均單表延遲最大為3.17秒,延遲中位數(shù)為1.91秒。通過(guò)數(shù)據(jù)比對(duì),飛行計(jì)劃表數(shù)據(jù)在一二級(jí)庫(kù)傳輸之間無(wú)丟失現(xiàn)象。
5 結(jié)語(yǔ)
在民航空管流量系統(tǒng)不斷成長(zhǎng)過(guò)程中,建立一個(gè)分布式的數(shù)據(jù)庫(kù)平臺(tái),可有效共享各方信息,實(shí)現(xiàn)新業(yè)務(wù)的高效支撐。經(jīng)實(shí)際生產(chǎn)系統(tǒng)驗(yàn)證,在低帶寬和DML操作特別頻繁的環(huán)境下,相比OGG軟件表現(xiàn)出更好的適應(yīng)性。通過(guò)系統(tǒng)上線運(yùn)行記錄,UltraSync軟件在數(shù)據(jù)傳輸?shù)姆€(wěn)定性及同步效率方面達(dá)到了系統(tǒng)要求。后續(xù),還需考慮對(duì)異構(gòu)數(shù)據(jù)庫(kù)的兼容性及軟件的可移植性問(wèn)題。
[參考文獻(xiàn)]
[1]吳禮樂(lè).基于雙活容災(zāi)存儲(chǔ)技術(shù)的云計(jì)算數(shù)據(jù)中心的設(shè)計(jì)及應(yīng)用[J].電子設(shè)計(jì)工程,2015(6):190-192.
[2]宋英華,王志勇,李鐘瑋.基于存儲(chǔ)雙活技術(shù)的調(diào)度自動(dòng)化系統(tǒng)高可靠性架構(gòu)研究[J].供用電,2020(3):58-63,70.
[3]王玨,孟曉蕊.分布式數(shù)據(jù)庫(kù)同步中間件系統(tǒng)的設(shè)計(jì)與研究[J].現(xiàn)代電子技術(shù),2016(9):31-36.
(編輯 姚 鑫)