一種基于消息推送模式的跨地域數(shù)據(jù)同步方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于海量數(shù)據(jù)管理領(lǐng)域,涉及一種基于消息推送模式的跨地域數(shù)據(jù)同步管理方法。
【背景技術(shù)】
[0002]隨著商業(yè)活動(dòng)越來(lái)越依賴于網(wǎng)絡(luò),越來(lái)越多的企業(yè)在尋找一種更強(qiáng)大的數(shù)據(jù)中心架構(gòu),這種高可用的結(jié)構(gòu)能夠減少甚至消除正常和非正常的停機(jī)對(duì)業(yè)務(wù)可用性造成的影響,即無(wú)論是否有網(wǎng)絡(luò)的中斷或服務(wù)器的停機(jī)維護(hù),甚至是異常宕機(jī),關(guān)鍵任務(wù)應(yīng)用系統(tǒng)都能夠不間斷地創(chuàng)造產(chǎn)值并提高公司的業(yè)務(wù)持續(xù)性底線。建立多個(gè)數(shù)據(jù)中心來(lái)實(shí)現(xiàn)業(yè)務(wù)的容災(zāi)成為必然的選擇。用戶建立多個(gè)數(shù)據(jù)中心來(lái)承載業(yè)務(wù)系統(tǒng)的主要目的是為了實(shí)現(xiàn)應(yīng)用的高可用性,因此根據(jù)數(shù)據(jù)中心之間的關(guān)系進(jìn)行跨地域的數(shù)據(jù)同步就成為一個(gè)重要的實(shí)現(xiàn)環(huán)
Τ ο
[0003]隨著數(shù)據(jù)量的爆炸式增長(zhǎng),數(shù)據(jù)存儲(chǔ)的壓力越來(lái)越明顯,因信息數(shù)據(jù)丟失所造成的損失也越來(lái)越大,關(guān)注也越來(lái)越多。相應(yīng)的,不同地域的數(shù)據(jù)中心一般需要專用網(wǎng)絡(luò)或互聯(lián)網(wǎng)進(jìn)行數(shù)據(jù)的傳輸,在當(dāng)前的網(wǎng)絡(luò)背景下,往往是多個(gè)業(yè)務(wù)共享一條網(wǎng)絡(luò),網(wǎng)絡(luò)鏈路的負(fù)載情況是不可預(yù)期的。加之上層業(yè)務(wù)系統(tǒng)一般都是7 X 24小時(shí)運(yùn)行的,數(shù)據(jù)的產(chǎn)生是實(shí)時(shí)的,并且數(shù)量和單個(gè)文件的大小通常都比較大。如何保證在海量數(shù)據(jù)在不同的跨地域的數(shù)據(jù)中心之間進(jìn)行同步,保證全局?jǐn)?shù)據(jù)的一致性,數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性,同時(shí)將因?yàn)閿?shù)據(jù)同步導(dǎo)致的系統(tǒng)壓力降低到最小,這就需要提供一種可以保證數(shù)據(jù)傳輸效率的數(shù)據(jù)同步管理方法。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供了一種基于消息推送模式的跨地域數(shù)據(jù)同步方法,用于實(shí)現(xiàn)對(duì)海量數(shù)據(jù)跨地域同步與恢復(fù),確保數(shù)據(jù)更新、刪除后全局的數(shù)據(jù)一致性,增強(qiáng)系統(tǒng)的數(shù)據(jù)安全性,保證系統(tǒng)的穩(wěn)定性,有效降低系統(tǒng)的維護(hù)成本。
[0005]本發(fā)明的基于消息推送模式的跨地域數(shù)據(jù)同步方法,實(shí)現(xiàn)方案包括如下方面:
[0006]第一方面:在各數(shù)據(jù)中心配置集群內(nèi)各數(shù)據(jù)中心消息組件部署的IP地址,采用推送方式來(lái)傳輸消息;
[0007]所述的消息組件包括發(fā)送消息模塊和接收消息模塊,發(fā)送消息模塊根據(jù)業(yè)務(wù)場(chǎng)景將消息發(fā)送到指定的數(shù)據(jù)中心,接收消息模塊僅監(jiān)聽本地的消息;消息采用生產(chǎn)者-消費(fèi)者模型進(jìn)行管理。
[0008]第二方面:在數(shù)據(jù)中心設(shè)置異地配置策略;
[0009]所述的異地配置策略是指針對(duì)不同的數(shù)據(jù)中心,設(shè)置需要同步的數(shù)據(jù)中心或數(shù)據(jù)中心的組合;每個(gè)數(shù)據(jù)中心,根據(jù)自身的異地配置策略,構(gòu)造消息發(fā)送到需要同步的數(shù)據(jù)中心。
[0010]第三方面:底層傳輸采用HTTP(Hyper Text Transfer Protocol)協(xié)議和自定義序列化反序列化框架;
[0011 ]在底層數(shù)據(jù)傳輸前,使用自定義的序列化和反序列化組件對(duì)待傳輸?shù)臄?shù)據(jù)進(jìn)行序列化操作,形成二進(jìn)制數(shù)組;將二進(jìn)制數(shù)組使用HTTP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸;在接收端使用相同的序列化和反序列化組件對(duì)待傳輸?shù)臄?shù)據(jù)進(jìn)行反序列化操作,以獲取傳輸?shù)臄?shù)據(jù)內(nèi)容。
[0012]第四方面:實(shí)現(xiàn)數(shù)據(jù)的同步、恢復(fù)或移除;
[0013](3.1)實(shí)現(xiàn)數(shù)據(jù)同步或者更新:標(biāo)記源數(shù)據(jù)中心為A,數(shù)據(jù)中心A獲取待同步的一條數(shù)據(jù),根據(jù)自身的異地配置策略選擇需要同步的數(shù)據(jù)中心,如果選中的數(shù)據(jù)中心不可用,則根據(jù)異地配置策略選擇下一個(gè)可用的數(shù)據(jù)中心,然后構(gòu)造消息Msg發(fā)送到要同步的數(shù)據(jù)中心;消息Msg表示為{key,center: from: A,type: newOrUpdate},其中key為需要發(fā)送的數(shù)據(jù)唯一識(shí)別碼,center: from表示數(shù)據(jù)來(lái)自哪個(gè)數(shù)據(jù)中心,type表示操作類型,新增或更新;目標(biāo)數(shù)據(jù)中心通過(guò)接收消息模塊接收到消息后,根據(jù)消息中指定的數(shù)據(jù)中心,使用拉取的方式將待同步數(shù)據(jù)下載到本地,然后通過(guò)發(fā)送消息模塊將處理狀態(tài)告知數(shù)據(jù)中心A;數(shù)據(jù)中心A接收到所有目標(biāo)數(shù)據(jù)中心的返回狀態(tài)后,標(biāo)記本條數(shù)據(jù)完成同步,否則繼續(xù)重試未返回狀態(tài)消息的數(shù)據(jù)中心。
[0014](3.2)實(shí)現(xiàn)數(shù)據(jù)恢復(fù):當(dāng)某數(shù)據(jù)中心A獲取本地?cái)?shù)據(jù)key失敗后,觸發(fā)本地對(duì)損壞數(shù)據(jù)的恢復(fù)流程,將本地?cái)?shù)據(jù)key對(duì)應(yīng)的狀態(tài)status修改成needRecovery,needRecovery表示需要恢復(fù),本地的定時(shí)任務(wù)掃描本地status為needRecovery的數(shù)據(jù),根據(jù)本地消息同步記錄選擇一個(gè)非本地的數(shù)據(jù)中心進(jìn)行數(shù)據(jù)獲取,將數(shù)據(jù)請(qǐng)求通過(guò)底層傳輸組件(HTTP)發(fā)送到所選擇的數(shù)據(jù)中心,獲取數(shù)據(jù);將獲得的數(shù)據(jù)寫入本地?cái)?shù)據(jù)中心,同時(shí)修改數(shù)據(jù)key對(duì)應(yīng)的狀態(tài)status為ok,ok表示數(shù)據(jù)正常;
[0015](3.3)實(shí)現(xiàn)數(shù)據(jù)刪除:任何一個(gè)數(shù)據(jù)中心接收到數(shù)據(jù)key的刪除請(qǐng)求后,觸發(fā)跨地域的刪除操作;首先,將本地的數(shù)據(jù)key對(duì)應(yīng)的狀態(tài)status修改成needDelete,needDelete表示需要?jiǎng)h除,本地的定時(shí)任務(wù)掃描本地status為needDelete的數(shù)據(jù),獲取數(shù)據(jù)列表;根據(jù)本地消息同步記錄選擇所有記錄的數(shù)據(jù)中心進(jìn)行數(shù)據(jù)刪除消息的構(gòu)造;本地將刪除消息發(fā)送到所有數(shù)據(jù)中心;各數(shù)據(jù)中心接收到刪除消息后,將數(shù)據(jù)從本地?cái)?shù)據(jù)中心刪除,刪除對(duì)應(yīng)的元數(shù)據(jù),并反饋消息給刪除發(fā)起的數(shù)據(jù)中心;刪除發(fā)起的數(shù)據(jù)中心等待所有數(shù)據(jù)中心的反饋消息,如果均完成,則完成刪除,移除本地的元數(shù)據(jù)和對(duì)應(yīng)的任務(wù),如果有至少一個(gè)數(shù)據(jù)中心尚未發(fā)送完成消息,則繼續(xù)等待,超過(guò)等待時(shí)間則進(jìn)行重試。
[0016]相對(duì)于現(xiàn)有技術(shù),本發(fā)明的跨地域數(shù)據(jù)同步方法具有如下優(yōu)點(diǎn)和積極效果:
[0017](1)本發(fā)明方法使用推送方式進(jìn)行消息的傳遞,可以實(shí)現(xiàn)消息的實(shí)時(shí)傳遞和處理,并且可以在消息發(fā)送前發(fā)現(xiàn)消息接收點(diǎn)的狀態(tài),進(jìn)而有效的進(jìn)行容錯(cuò)處理;
[0018](2)本發(fā)明方法支持靈活的異地配置策略,可以實(shí)現(xiàn)對(duì)一個(gè)點(diǎn)、多個(gè)點(diǎn)同時(shí)的數(shù)據(jù)推送、恢復(fù)和刪除,并且支持錯(cuò)誤重試機(jī)制,進(jìn)一步保證數(shù)據(jù)的跨地域同步的可靠性;
[0019](3)本發(fā)明方法底層傳輸時(shí)采用http協(xié)議和自定義序列化反序列化框架,保證數(shù)據(jù)安全性、傳輸?shù)目煽啃院退俾省?br>[0020]通過(guò)本發(fā)明中提出的方法,實(shí)現(xiàn)了對(duì)海量數(shù)據(jù)跨地域同步與恢復(fù),確保數(shù)據(jù)更新、刪除后全局的數(shù)據(jù)一致性,增強(qiáng)系統(tǒng)的數(shù)據(jù)安全性,保證系統(tǒng)的穩(wěn)定性,有效降低系統(tǒng)的維護(hù)成本,在海量數(shù)據(jù)管理領(lǐng)域具有廣泛的應(yīng)用前景。
【附圖說(shuō)明】
[0021]圖1為本發(fā)明中基于消息推送模式的跨地域數(shù)據(jù)同步流程示意圖;
[0022]圖2為本發(fā)明方法中的消息推送通知流程圖;
[0023]圖3為本發(fā)明方法中的底層數(shù)據(jù)傳輸?shù)牧鞒虉D;
[0024]圖4為本發(fā)明方法中的跨地域數(shù)據(jù)同步或更新的流程圖;
[0025]圖5為本發(fā)明方法中的跨地域數(shù)據(jù)恢復(fù)的流程圖;
[0026]圖6為本發(fā)明方法中的跨地域數(shù)據(jù)刪除的流程圖。
【具體實(shí)施方式】
[0027]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案進(jìn)一步詳細(xì)說(shuō)明。
[0028]本發(fā)明的基于消息推送模式的跨地域數(shù)據(jù)同步方法,整體如圖1所示,下面說(shuō)明為了實(shí)現(xiàn)本發(fā)明方法所進(jìn)行的技術(shù)方案設(shè)置。
[0029]第一方面,在各數(shù)據(jù)中心配置集群內(nèi)各數(shù)據(jù)中心消息組件部署的IP地址信息,采用推送方式來(lái)傳輸消息。采用消息模式解決傳輸過(guò)程中的通知問(wèn)題,具體本發(fā)明采用推送方式,以提升響應(yīng)時(shí)間。
[0030]集群內(nèi)的各數(shù)據(jù)中心都配置有消息組件,消息組件包括發(fā)送消息和接收消息兩個(gè)功能模塊。本發(fā)明提供的消息推送通知原理和流程,如圖1和圖2所示。首先在各個(gè)數(shù)據(jù)中心配置集群內(nèi)數(shù)據(jù)中心消息組件部署的IP信息,在各數(shù)據(jù)中心啟動(dòng)消息服務(wù),由發(fā)送消息模塊和接收消息模塊實(shí)現(xiàn),發(fā)送消息模塊根據(jù)業(yè)務(wù)場(chǎng)景將消息發(fā)送到指定的數(shù)據(jù)中心,接收消息模塊則僅監(jiān)聽本地的消息。以兩個(gè)數(shù)據(jù)中心A、B為例。首先在A、B數(shù)據(jù)中心配置A、B數(shù)據(jù)中心消息組件部署的IP信息;然后,啟動(dòng)消息服務(wù),消息采用生產(chǎn)者-消費(fèi)者模型進(jìn)行管理。發(fā)送消息即生產(chǎn)對(duì)應(yīng)的消息,將消息加入到消費(fèi)者的處理隊(duì)列中。使用消息組的方式來(lái)指定不同的生產(chǎn)者和消費(fèi)者所處理的消息來(lái)源,各個(gè)數(shù)據(jù)中心的消息組件均以后臺(tái)服務(wù)的形式運(yùn)行。當(dāng)某一數(shù)據(jù)中心A需要通知其它數(shù)據(jù)中心B處理相關(guān)的上層業(yè)務(wù)邏輯時(shí),則使用該數(shù)據(jù)中心B提供的消息生產(chǎn)接口,使用發(fā)送消息模塊將消息發(fā)送到給數(shù)據(jù)中心B的消息隊(duì)列中,B的接收消息模塊監(jiān)聽到有新消息進(jìn)入本地消息隊(duì)列,則觸發(fā)消息處理邏輯,完成將消息推送給其它數(shù)據(jù)中心的任務(wù)。
[0031]從消息推送的流程可以看出,使用消息推送的方式可以避免主動(dòng)拉取的盲目性,提高了消息發(fā)送前的容錯(cuò)處理能力,節(jié)省了時(shí)間,提高了效率。同樣這種方式支持靈活的異地配置策略,可以實(shí)現(xiàn)對(duì)一個(gè)點(diǎn)、多個(gè)點(diǎn)同時(shí)的數(shù)據(jù)推送和恢復(fù)。
[0032 ]第二方面,在數(shù)據(jù)中心設(shè)置異地配置策略。
[0033]本發(fā)明方法支持靈活的異地配置策略,可以實(shí)現(xiàn)對(duì)一個(gè)點(diǎn)、多個(gè)點(diǎn)同時(shí)的數(shù)據(jù)推送和恢復(fù)。為了支持將數(shù)據(jù)發(fā)送的一個(gè)或多個(gè)不同的地域,在不同的數(shù)據(jù)中心,使用了一套基于程序與、或的異地配置策略,如下:
[0034]{E[operator( | or&)E] E= (T[operator( | or&)T]),T =數(shù)據(jù)中心}。
[0035]其中,“I”表示或,“&”表示與,E為數(shù)據(jù)中心的組合。E用來(lái)描述所要同步的數(shù)據(jù)中心。
[0036]例如,現(xiàn)有01、02、03、04四個(gè)數(shù)據(jù)中心,在數(shù)據(jù)中心01中,可以選擇的異地配置策略如下:
[0037]D2,即只向D2數(shù)據(jù)中心進(jìn)行同步;
[0038]D2 ID3,選擇D2或D3中某一個(gè)數(shù)據(jù)中心進(jìn)行同步;
[0039]D2&D3,向D2和D3數(shù)據(jù)中心進(jìn)行數(shù)據(jù)同步;
[0040]D2&(D3|D4),向D2同步,同時(shí)從D3或D4中選擇一個(gè)數(shù)據(jù)中心進(jìn)行同步;