專利名稱:異步遠(yuǎn)程復(fù)制系統(tǒng)及其維護(hù)數(shù)據(jù)一致性的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)中遠(yuǎn)程異步鏡像復(fù)制技術(shù),尤其涉及異步遠(yuǎn)程復(fù)制系統(tǒng)及其維護(hù)數(shù)據(jù)一致性的方法。
背景技術(shù):
隨著計(jì)算機(jī)應(yīng)用的不斷普及,計(jì)算機(jī)用戶對(duì)數(shù)據(jù)安全的要求也日益增長(zhǎng)。為了避免各種天災(zāi)人禍引起的數(shù)據(jù)丟失可能給用戶帶來(lái)極大損失,開(kāi)發(fā)出了數(shù)據(jù)實(shí)時(shí)同步到遠(yuǎn)程服務(wù)器上的遠(yuǎn)程復(fù)制技術(shù)。在意外發(fā)生時(shí),通過(guò)該技術(shù)能夠利用備份到遠(yuǎn) 程服務(wù)器上的數(shù)據(jù),對(duì)本地服務(wù)器上的數(shù)據(jù)進(jìn)行恢復(fù),從而保障了數(shù)據(jù)的物理安全。遠(yuǎn)程復(fù)制技術(shù)可以分為兩類方法同步復(fù)制和異步復(fù)制。其中,對(duì)于上層應(yīng)用的數(shù)據(jù),同步復(fù)制是指遠(yuǎn)程復(fù)制軟件確認(rèn)數(shù)據(jù)在本地服務(wù)器和遠(yuǎn)程備份服務(wù)器上都已寫(xiě)入成功后,才向上層應(yīng)用報(bào)告數(shù)據(jù)寫(xiě)入成功;異步復(fù)制是指遠(yuǎn)程復(fù)制軟件確認(rèn)數(shù)據(jù)已在本地服務(wù)器寫(xiě)入成功后,便向上層應(yīng)用報(bào)告數(shù)據(jù)寫(xiě)入成功,而不是等到數(shù)據(jù)在遠(yuǎn)程備份服務(wù)器上寫(xiě)入成功后再報(bào)告。由于遠(yuǎn)程復(fù)制步驟會(huì)消費(fèi)一定的時(shí)間,故同步復(fù)制會(huì)對(duì)上層應(yīng)用的性能產(chǎn)生影響。同步復(fù)制中寫(xiě)入請(qǐng)求的執(zhí)行順序在本地服務(wù)器和備份服務(wù)器上是一致的。異步復(fù)制對(duì)上層應(yīng)用的影響較小,但網(wǎng)絡(luò)傳輸、緩存機(jī)制等因素會(huì)使得備份服務(wù)器上寫(xiě)入請(qǐng)求的完成順序可能和本地服務(wù)器不一致。通常,上層應(yīng)用的寫(xiě)入數(shù)據(jù)是以寫(xiě)入請(qǐng)求的形式傳遞給遠(yuǎn)程復(fù)制軟件,當(dāng)寫(xiě)入請(qǐng)求完成即表示數(shù)據(jù)寫(xiě)入成功。在同步復(fù)制中,由于寫(xiě)入請(qǐng)求的執(zhí)行順序在本地服務(wù)器和遠(yuǎn)程備份服務(wù)器上總是一致的,故上層應(yīng)用發(fā)出的某個(gè)寫(xiě)入請(qǐng)求,常是基于之前某一寫(xiě)入請(qǐng)求的完成而發(fā)出的,兩個(gè)寫(xiě)入請(qǐng)求之間存在依賴關(guān)系,且一般不會(huì)被破壞。而在異步復(fù)制中,由于操作系統(tǒng)緩存機(jī)制、磁盤(pán)緩存機(jī)制、網(wǎng)絡(luò)緩存機(jī)制、網(wǎng)絡(luò)延遲等多種因素的存在,導(dǎo)致遠(yuǎn)程備份服務(wù)器上寫(xiě)入請(qǐng)求的完成順序可能和本地服務(wù)器不一致,由此使得遠(yuǎn)程備份服務(wù)器上寫(xiě)入請(qǐng)求間的依賴關(guān)系可能會(huì)被破壞。如果本地服務(wù)器在依賴關(guān)系在被破壞時(shí)離線,則備份服務(wù)器上保存的數(shù)據(jù)就可能并不是本地服務(wù)器數(shù)據(jù)任何一個(gè)時(shí)刻的鏡像,即數(shù)據(jù)的一致性被破壞了。在此情況下,上層應(yīng)用無(wú)法使用錯(cuò)誤的數(shù)據(jù)恢復(fù)生產(chǎn),由此會(huì)給用戶造成嚴(yán)重的損失?,F(xiàn)有的一種在異步遠(yuǎn)程復(fù)制系統(tǒng)中保護(hù)數(shù)據(jù)一致性的方法,是通過(guò)本地服務(wù)器上的遠(yuǎn)程復(fù)制軟件對(duì)每一個(gè)寫(xiě)入請(qǐng)求打上時(shí)間戳,由遠(yuǎn)程備份服務(wù)器上的遠(yuǎn)程復(fù)制軟件根據(jù)時(shí)間戳來(lái)還原寫(xiě)入請(qǐng)求的發(fā)出順序。這種方法由于需要在傳輸給遠(yuǎn)程備份服務(wù)器的寫(xiě)入請(qǐng)求上附加時(shí)間戳信息,一方面增大了對(duì)網(wǎng)絡(luò)資源的消耗,另一方面遠(yuǎn)程備份服務(wù)器上的遠(yuǎn)程復(fù)制軟件必須嚴(yán)格按照時(shí)間戳順序執(zhí)行寫(xiě)入請(qǐng)求,由此會(huì)使得其中不存在寫(xiě)入依賴關(guān)系的寫(xiě)入請(qǐng)求的執(zhí)行順序無(wú)法改變,因而無(wú)法利用操作系統(tǒng)緩存及磁盤(pán)緩存機(jī)制提高性能。因此,需要相應(yīng)地提供一種改進(jìn)的遠(yuǎn)程復(fù)制系統(tǒng)及其維護(hù)數(shù)據(jù)一致性的方法,能夠更有效地克服寫(xiě)入依賴性被破壞的問(wèn)題,而使得寫(xiě)入的數(shù)據(jù)的一致性得到維護(hù)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種異步遠(yuǎn)程復(fù)制系統(tǒng)及其維護(hù)數(shù)據(jù)一致性的方法,能夠更有效地克服寫(xiě)入依賴性而使得寫(xiě)入的數(shù)據(jù)得到一致性的維護(hù)。為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種異步遠(yuǎn)程復(fù)制系統(tǒng),包括通過(guò)網(wǎng)絡(luò)連接的本地服務(wù)器和遠(yuǎn)程備份服務(wù)器,其特征在于本地服務(wù)器,用于通過(guò)本地的遠(yuǎn)程復(fù)制模塊將應(yīng)用模塊的寫(xiě)入請(qǐng)求加入到新建的寫(xiě)入請(qǐng)求組或已建立且開(kāi)放的寫(xiě)入請(qǐng)求組,將寫(xiě)入請(qǐng)求組編號(hào) 攜帶在寫(xiě)入請(qǐng)求中發(fā)送到遠(yuǎn)程備份服務(wù)器,并向磁盤(pán)提交該寫(xiě)入請(qǐng)求;遠(yuǎn)程備份服務(wù)器,用于通過(guò)本地的遠(yuǎn)程復(fù)制模塊將接收的寫(xiě)入請(qǐng)求置入寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組。進(jìn)一步地,遠(yuǎn)程備份服務(wù)器的寫(xiě)入請(qǐng)求隊(duì)列包括N個(gè)已關(guān)閉的寫(xiě)入請(qǐng)求組和至多一個(gè)未關(guān)閉的寫(xiě)入請(qǐng)求組,N為大于或等于零的整數(shù);其中,已關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求和一個(gè)組關(guān)閉信號(hào);未關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求;每一寫(xiě)入請(qǐng)求中含有寫(xiě)入請(qǐng)求組編號(hào)以及請(qǐng)求寫(xiě)入的內(nèi)容。進(jìn)一步地,本地服務(wù)器的遠(yuǎn)程復(fù)制模塊在收到應(yīng)用模塊的寫(xiě)入請(qǐng)求后,若判斷當(dāng)前沒(méi)有開(kāi)放的寫(xiě)入請(qǐng)求組,或者判斷當(dāng)前有開(kāi)放的寫(xiě)入請(qǐng)求組,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組內(nèi)有寫(xiě)入請(qǐng)求已被磁盤(pán)完成,或者判斷該寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,但該寫(xiě)入請(qǐng)求組大小已達(dá)到上限,則關(guān)閉該寫(xiě)入請(qǐng)求組停止加入新的寫(xiě)入請(qǐng)求,并向遠(yuǎn)程備份服務(wù)器發(fā)送組關(guān)閉信號(hào),同時(shí)將關(guān)閉的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求仍交由磁盤(pán)完成,然后新建寫(xiě)入請(qǐng)求組并為該請(qǐng)求組分配編號(hào),將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入新建的寫(xiě)入請(qǐng)求組,將新加入的該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。進(jìn)一步地,遠(yuǎn)程備份服務(wù)器依次讀取寫(xiě)入請(qǐng)求隊(duì)列中的元素,若判斷該元素是組關(guān)閉信號(hào),將該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組標(biāo)識(shí)為已關(guān)閉,并停止繼續(xù)讀取該寫(xiě)入請(qǐng)求隊(duì)列。進(jìn)一步地,本地服務(wù)器的遠(yuǎn)程復(fù)制模塊若判斷寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組大小尚未達(dá)到上限,則將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入當(dāng)前寫(xiě)入請(qǐng)求組;將新加入的該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。進(jìn)一步地,遠(yuǎn)程備份服務(wù)器的遠(yuǎn)程復(fù)制模塊在判斷元素是寫(xiě)入請(qǐng)求組的組關(guān)閉信號(hào)停止繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列后,若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成,則向本地服務(wù)器發(fā)送寫(xiě)入請(qǐng)求組完成信號(hào),然后繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列中的元素并進(jìn)行后續(xù)操作;若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求未全部完成,則等待寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成后,執(zhí)行后續(xù)的操作。為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種異步遠(yuǎn)程復(fù)制系統(tǒng)維護(hù)數(shù)據(jù)一致性的方法,涉及該異步遠(yuǎn)程復(fù)制系統(tǒng)中通過(guò)網(wǎng)絡(luò)連接的本地服務(wù)器和遠(yuǎn)程備份服務(wù)器,該方法包括
本地服務(wù)器將應(yīng)用模塊的寫(xiě)入請(qǐng)求加入到新建的寫(xiě)入請(qǐng)求組或已建立且開(kāi)放的寫(xiě)入請(qǐng)求組,將寫(xiě)入請(qǐng)求組編號(hào)攜帶在該寫(xiě)入請(qǐng)求中發(fā)送到遠(yuǎn)程備份服務(wù)器,并向磁盤(pán)提交該寫(xiě)入請(qǐng)求;遠(yuǎn)程備份服務(wù)器將接收的寫(xiě)入請(qǐng)求置入一寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組。進(jìn)一步地,遠(yuǎn)程備份服務(wù)器的寫(xiě)入請(qǐng)求隊(duì)列包括N個(gè)已關(guān)閉的寫(xiě)入請(qǐng)求組和至多一個(gè)未關(guān)閉的寫(xiě)入請(qǐng)求組,N為大于零或等于零的整數(shù);已關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求和一個(gè)組關(guān)閉信號(hào),未關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求,每一寫(xiě)入請(qǐng)求中含有寫(xiě)入請(qǐng)求組編號(hào)以及請(qǐng)求寫(xiě)入的內(nèi)容。進(jìn)一步地,所述本地服務(wù)器具體執(zhí)行的流程包括本地服務(wù)器在收到應(yīng)用模塊的寫(xiě)入請(qǐng)求后,若判斷當(dāng)前沒(méi)有開(kāi)放的寫(xiě)入請(qǐng)求組, 或者判斷當(dāng)前有開(kāi)放的寫(xiě)入請(qǐng)求組,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組內(nèi)有寫(xiě)入請(qǐng)求已被磁盤(pán)完成,或者判斷該寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,但該寫(xiě)入請(qǐng)求組大小已達(dá)到上限,則關(guān)閉該寫(xiě)入請(qǐng)求組停止加入新的寫(xiě)入請(qǐng)求,并向遠(yuǎn)程備份服務(wù)器發(fā)送組關(guān)閉信號(hào),同時(shí)將關(guān)閉的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求仍交由磁盤(pán)完成,然后新建寫(xiě)入請(qǐng)求組并為該請(qǐng)求組分配編號(hào),將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入新建的寫(xiě)入請(qǐng)求組,將該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。進(jìn)一步地,本地服務(wù)器具體執(zhí)行的流程還包括本地服務(wù)器若判斷寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組大小尚未達(dá)到上限,則將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入當(dāng)前寫(xiě)入請(qǐng)求組;將該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。進(jìn)一步地,該方法還包括遠(yuǎn)程備份服務(wù)器依次讀取寫(xiě)入請(qǐng)求隊(duì)列中的元素,若判斷該元素是組關(guān)閉信號(hào),將該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組標(biāo)識(shí)為已關(guān)閉,并停止繼續(xù)讀取該寫(xiě)入請(qǐng)求隊(duì)列。進(jìn)一步地,遠(yuǎn)程備份服務(wù)器在判斷元素是所述組關(guān)閉信號(hào),將該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組標(biāo)識(shí)為已關(guān)閉,并停止繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列后,還包括若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成,則向本地服務(wù)器發(fā)送寫(xiě)入請(qǐng)求組完成信號(hào),然后繼續(xù)依次讀取寫(xiě)入請(qǐng)求隊(duì)列中的元素并執(zhí)行后續(xù)流程;若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求未全部完成,則等待寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成后,執(zhí)行后續(xù)的流程。本發(fā)明通過(guò)識(shí)別寫(xiě)入請(qǐng)求流中寫(xiě)入請(qǐng)求的完成順序?qū)?xiě)入請(qǐng)求進(jìn)行分組,可有效識(shí)別出所有潛在的寫(xiě)入依賴關(guān)系,解決了因?qū)懭胍蕾囮P(guān)系而缺乏數(shù)據(jù)一致性保護(hù)的問(wèn)題,能夠可靠地保證異步遠(yuǎn)程復(fù)制數(shù)據(jù)的一致性。由于本發(fā)明只在遠(yuǎn)程復(fù)制軟件中增加了寫(xiě)入請(qǐng)求組關(guān)閉和寫(xiě)入請(qǐng)求組完成兩種簡(jiǎn)單信號(hào),對(duì)網(wǎng)絡(luò)傳輸增加的負(fù)擔(dān)可以小到忽略不計(jì);并且通過(guò)將同一寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求直接提交給底層磁盤(pán),而毋需按照一定順序執(zhí)行,由此可以充分地利用操作系統(tǒng)、磁盤(pán)的緩存機(jī)制來(lái)提高寫(xiě)入性能。
圖I為本發(fā)明的異步遠(yuǎn)程復(fù)制系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖;圖2為圖I所示的系統(tǒng)實(shí)施例所使用的寫(xiě)入請(qǐng)求隊(duì)列的結(jié)構(gòu)示意圖3為異步遠(yuǎn)程復(fù)制系統(tǒng)維護(hù)數(shù)據(jù)一致性的方法中本地服務(wù)器執(zhí)行實(shí)例流程圖;圖4為異步遠(yuǎn)程復(fù)制系統(tǒng)維護(hù)數(shù)據(jù)一致性的方法中遠(yuǎn)程備份服務(wù)器執(zhí)行實(shí)例流程圖。
具體實(shí)施例方式以下結(jié)合附圖和優(yōu)選實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)地闡述。應(yīng)該理解,以下列舉的實(shí)施例僅用于說(shuō)明和解釋本發(fā)明,而不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。本發(fā)明的異步遠(yuǎn)程復(fù)制系統(tǒng)實(shí)施例其結(jié)構(gòu)如圖I所示,包括通過(guò)網(wǎng)絡(luò)連接的本地服務(wù)器和遠(yuǎn)程備份服務(wù)器,其中本地服務(wù)器,用于通過(guò)本地遠(yuǎn)程復(fù)制模塊將應(yīng)用 模塊的寫(xiě)入請(qǐng)求加入到新建的寫(xiě)入請(qǐng)求組或已建立且開(kāi)放的寫(xiě)入請(qǐng)求組,將寫(xiě)入請(qǐng)求組編號(hào)攜帶在寫(xiě)入請(qǐng)求中發(fā)送到遠(yuǎn)程備份服務(wù)器,并向磁盤(pán)提交該寫(xiě)入請(qǐng)求;遠(yuǎn)程備份服務(wù)器,用于通過(guò)本地遠(yuǎn)程復(fù)制模塊將接收的寫(xiě)入請(qǐng)求置入寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組。在上述系統(tǒng)實(shí)施例中,遠(yuǎn)程備份服務(wù)器的寫(xiě)入請(qǐng)求隊(duì)列的結(jié)構(gòu)如圖2所示,它包括N(N為大于或等于0的整數(shù))個(gè)已關(guān)閉的寫(xiě)入請(qǐng)求組和至多一個(gè)未關(guān)閉的寫(xiě)入請(qǐng)求組,其中已關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求和一個(gè)組關(guān)閉信號(hào);未關(guān)閉的寫(xiě)入請(qǐng)求組僅含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求;每一寫(xiě)入請(qǐng)求中含有寫(xiě)入請(qǐng)求組編號(hào)以及請(qǐng)求寫(xiě)入的內(nèi)容。在上述系統(tǒng)實(shí)施例中,本地服務(wù)器的遠(yuǎn)程復(fù)制模塊在收到應(yīng)用模塊的寫(xiě)入請(qǐng)求后,若判斷當(dāng)前沒(méi)有開(kāi)放的寫(xiě)入請(qǐng)求組,或者判斷當(dāng)前有開(kāi)放的寫(xiě)入請(qǐng)求組,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組內(nèi)有寫(xiě)入請(qǐng)求已被磁盤(pán)完成,或者判斷該寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,但該寫(xiě)入請(qǐng)求組大小已達(dá)到上限,則關(guān)閉該寫(xiě)入請(qǐng)求組停止加入新的寫(xiě)入請(qǐng)求,并向遠(yuǎn)程備份服務(wù)器發(fā)送組關(guān)閉信號(hào),同時(shí)關(guān)閉的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求仍繼續(xù)由磁盤(pán)完成,然后新建寫(xiě)入請(qǐng)求組并為該請(qǐng)求組分配編號(hào),將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入新建的寫(xiě)入請(qǐng)求組;將該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。在上述系統(tǒng)實(shí)施例中,遠(yuǎn)程備份服務(wù)器依次讀取寫(xiě)入請(qǐng)求隊(duì)列中的元素,若判斷該元素是寫(xiě)入請(qǐng)求組關(guān)閉信號(hào),則將該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組標(biāo)識(shí)為已關(guān)閉,并停止繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列。本發(fā)明通過(guò)上述做法實(shí)現(xiàn)了有效地識(shí)別所有寫(xiě)入請(qǐng)求潛在的寫(xiě)入依賴關(guān)系,避免出現(xiàn)因?qū)懭胍蕾囮P(guān)系混亂而導(dǎo)致數(shù)據(jù)一致性被破壞的問(wèn)題。也就是說(shuō),本地服務(wù)器的遠(yuǎn)程復(fù)制模塊一旦發(fā)現(xiàn)當(dāng)前寫(xiě)入請(qǐng)求組內(nèi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,便關(guān)閉該寫(xiě)入請(qǐng)求組停止加入新請(qǐng)求,并向遠(yuǎn)程備份服務(wù)器發(fā)送組關(guān)閉信號(hào);遠(yuǎn)程備份服務(wù)器根據(jù)從寫(xiě)入請(qǐng)求隊(duì)列中讀取的該組關(guān)閉信號(hào)來(lái)關(guān)閉該寫(xiě)入請(qǐng)求組,并停止繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列。這樣就可以完全避免寫(xiě)入依賴關(guān)系產(chǎn)生混亂,從而有效地維護(hù)數(shù)據(jù)一致性。在上述系統(tǒng)實(shí)施例中,本地服務(wù)器的遠(yuǎn)程復(fù)制模塊若判斷該寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組大小尚未達(dá)到上限,則將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入當(dāng)前寫(xiě)入請(qǐng)求組;將該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。在上述系統(tǒng)實(shí)施例中,遠(yuǎn)程備份服務(wù)器的遠(yuǎn)程復(fù)制模塊在判斷寫(xiě)入請(qǐng)求隊(duì)列中的該元素是組關(guān)閉信號(hào)后,停止繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列,若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成,則向本地服務(wù)器發(fā)送寫(xiě)入請(qǐng)求組完成信號(hào),然后繼續(xù)從寫(xiě)入請(qǐng)求隊(duì)列中依次讀取寫(xiě)入請(qǐng)求組內(nèi)的元素及其后續(xù)操作;若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求未全部完成,則等待寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成后,執(zhí)行后續(xù)的操作。本發(fā)明針對(duì)上述系統(tǒng)實(shí)施例,相應(yīng)地還提供了異步遠(yuǎn)程復(fù)制系統(tǒng)維護(hù)數(shù)據(jù)一致性的方法實(shí)施例,涉及通過(guò)網(wǎng)絡(luò)連接的本地服務(wù)器和遠(yuǎn)程備份服務(wù)器,其流程包括本地服務(wù)器將應(yīng)用模塊的寫(xiě)入請(qǐng)求加入到新建的寫(xiě)入請(qǐng)求組或已建立且開(kāi)放的 寫(xiě)入請(qǐng)求組,將寫(xiě)入請(qǐng)求組編號(hào)攜帶在該寫(xiě)入請(qǐng)求中發(fā)送到遠(yuǎn)程備份服務(wù)器,并向磁盤(pán)提交該寫(xiě)入請(qǐng)求;遠(yuǎn)程備份服務(wù)器將接收的寫(xiě)入請(qǐng)求依次置入寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組。在上述方法實(shí)施例中,本地服務(wù)器具體執(zhí)行的流程如圖3所示,包括如下步驟110 :接收上層的應(yīng)用模塊發(fā)出的寫(xiě)入請(qǐng)求;120 :判斷當(dāng)前是否有開(kāi)放的寫(xiě)入請(qǐng)求組,是則執(zhí)行下一步驟,否則執(zhí)行步驟150 ;130:判斷該開(kāi)放的寫(xiě)入請(qǐng)求組內(nèi)是否有已完成的請(qǐng)求,是則執(zhí)行下一步驟,否則執(zhí)行步驟170 ;140 :關(guān)閉寫(xiě)入請(qǐng)求組,并向遠(yuǎn)程備份服務(wù)器發(fā)送請(qǐng)求組關(guān)閉信號(hào);關(guān)閉寫(xiě)入請(qǐng)求組即停止加入新的寫(xiě)入請(qǐng)求。150:新建寫(xiě)入請(qǐng)求組,并為該請(qǐng)求組分配編號(hào),攜帶在寫(xiě)入請(qǐng)求中加入到新建的寫(xiě)入請(qǐng)求組;160 向遠(yuǎn)程備份服務(wù)器發(fā)送寫(xiě)入請(qǐng)求,結(jié)束流程;170 :判斷寫(xiě)入請(qǐng)求組大小是否達(dá)到上限,是則執(zhí)行步驟140,否則執(zhí)行步驟180 ;180:將當(dāng)前寫(xiě)入請(qǐng)求組編號(hào)攜帶在寫(xiě)入請(qǐng)求中加入該寫(xiě)入請(qǐng)求組,執(zhí)行步驟160。在上述方法實(shí)施例中,遠(yuǎn)程備份服務(wù)器具體執(zhí)行的流程如圖4所示,包括如下步驟200 :判斷是否接收到寫(xiě)入請(qǐng)求,是則執(zhí)行下一步驟,否則執(zhí)行步驟210 ;201 :將接收的寫(xiě)入請(qǐng)求置入寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組;210 :從寫(xiě)入請(qǐng)求隊(duì)列中讀取一個(gè)元素;遠(yuǎn)程備份服務(wù)器預(yù)先配置一寫(xiě)入請(qǐng)求隊(duì)列,該隊(duì)列包括N(N為大于或等于0的整數(shù))個(gè)已關(guān)閉的寫(xiě)入請(qǐng)求組和至多一個(gè)未關(guān)閉的寫(xiě)入請(qǐng)求組,其中已關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求和一個(gè)組關(guān)閉信號(hào);未關(guān)閉的寫(xiě)入請(qǐng)求組僅含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求;每一寫(xiě)入請(qǐng)求中含有寫(xiě)入請(qǐng)求組編號(hào)以及請(qǐng)求寫(xiě)入的內(nèi)容。220 :判斷該元素是否為組關(guān)閉信號(hào),是則執(zhí)行下一步驟,否則執(zhí)行步驟260 ;230 :停止讀取寫(xiě)入請(qǐng)求隊(duì)列;
240:判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組的寫(xiě)入請(qǐng)求是否已全部完成,是則執(zhí)行下一步驟,否則執(zhí)行步驟270 ;250 向本地服務(wù)器發(fā)送寫(xiě)入請(qǐng)求組完成信號(hào),返回步驟200執(zhí)行;260 向磁盤(pán)提交該寫(xiě)入請(qǐng)求,返回步驟200執(zhí)行;270 :等待請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求完成,返回步驟240執(zhí)行。本發(fā)明通過(guò)對(duì)寫(xiě)入請(qǐng)求流中的寫(xiě)入請(qǐng)求的完成順序進(jìn)行識(shí)別,將寫(xiě)入請(qǐng)求分組排列在寫(xiě)入請(qǐng)求隊(duì)列中,可有效避免寫(xiě)入請(qǐng)求潛在的寫(xiě)入依賴關(guān)系發(fā)生混亂,由此解決了異步遠(yuǎn)程復(fù)制系統(tǒng)中對(duì)寫(xiě)入依賴關(guān)系而缺乏保護(hù)的問(wèn)題,保證了異步遠(yuǎn)程復(fù)制系統(tǒng)中的數(shù)據(jù)一致性。由于本發(fā)明只在遠(yuǎn)程復(fù)制軟件模塊中增加了組關(guān)閉和寫(xiě)入請(qǐng)求組完成這兩種簡(jiǎn)單信號(hào),對(duì)網(wǎng)絡(luò)傳輸增加的負(fù)擔(dān)可以小到忽略不計(jì)。并且同一寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求直接提交給底層磁盤(pán),并不非得按照順序執(zhí)行,由此可充分利用操作系統(tǒng)、磁盤(pán)的緩存機(jī)制來(lái)提 聞磁盤(pán)的與入性能。雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬技術(shù)領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式上及細(xì)節(jié)上作任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書(shū)所界定的范圍為準(zhǔn)。
權(quán)利要求
1.一種異步遠(yuǎn)程復(fù)制系統(tǒng),包括通過(guò)網(wǎng)絡(luò)連接的本地服務(wù)器和遠(yuǎn)程備份服務(wù)器,其特征在于 本地服務(wù)器,用于通過(guò)本地的遠(yuǎn)程復(fù)制模塊將應(yīng)用模塊的寫(xiě)入請(qǐng)求加入到新建的寫(xiě)入請(qǐng)求組或已建立且開(kāi)放的寫(xiě)入請(qǐng)求組,將寫(xiě)入請(qǐng)求組編號(hào)攜帶在所述寫(xiě)入請(qǐng)求中發(fā)送到遠(yuǎn)程備份服務(wù)器,并向磁盤(pán)提交該寫(xiě)入請(qǐng)求; 遠(yuǎn)程備份服務(wù)器,用于通過(guò)本地的遠(yuǎn)程復(fù)制模塊將接收的寫(xiě)入請(qǐng)求置入寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組。
2.按照權(quán)利要求I所述的系統(tǒng),其特征在于, 所述遠(yuǎn)程備份服務(wù)器的所述寫(xiě)入請(qǐng)求隊(duì)列包括N個(gè)已關(guān)閉的寫(xiě)入請(qǐng)求組和至多一個(gè)未關(guān)閉的寫(xiě)入請(qǐng)求組,所述N為大于或等于零的整數(shù);其中,所述已關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求和一個(gè)組關(guān)閉信號(hào);所述未關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求;每一寫(xiě)入請(qǐng)求中含有寫(xiě)入請(qǐng)求組編號(hào)以及請(qǐng)求寫(xiě)入的內(nèi)容。
3.按照權(quán)利要求2所述的系統(tǒng),其特征在于, 所述本地服務(wù)器的遠(yuǎn)程復(fù)制模塊在收到所述應(yīng)用模塊的寫(xiě)入請(qǐng)求后,若判斷當(dāng)前沒(méi)有開(kāi)放的寫(xiě)入請(qǐng)求組,或者判斷當(dāng)前有開(kāi)放的寫(xiě)入請(qǐng)求組,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組內(nèi)有寫(xiě)入請(qǐng)求已被磁盤(pán)完成,或者判斷該寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,但該寫(xiě)入請(qǐng)求組大小已達(dá)到上限,則關(guān)閉該寫(xiě)入請(qǐng)求組停止加入新的寫(xiě)入請(qǐng)求,并向所述遠(yuǎn)程備份服務(wù)器發(fā)送組關(guān)閉信號(hào),同時(shí)將關(guān)閉的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求仍交由磁盤(pán)完成,然后新建寫(xiě)入請(qǐng)求組并為該請(qǐng)求組分配編號(hào),將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入新建的寫(xiě)入請(qǐng)求組,將新加入的該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。
4.按照權(quán)利要求3所述的系統(tǒng),其特征在于, 所述遠(yuǎn)程備份服務(wù)器依次讀取所述寫(xiě)入請(qǐng)求隊(duì)列中的元素,若判斷該元素是所述組關(guān)閉信號(hào),將該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組標(biāo)識(shí)為已關(guān)閉,并停止繼續(xù)讀取該寫(xiě)入請(qǐng)求隊(duì)列。
5.按照權(quán)利要求3所述的系統(tǒng),其特征在于, 所述本地服務(wù)器的遠(yuǎn)程復(fù)制模塊若判斷所述寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組大小尚未達(dá)到上限,則將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入當(dāng)前寫(xiě)入請(qǐng)求組;將新加入的該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。
6.按照權(quán)利要求5所述的系統(tǒng),其特征在于, 所述遠(yuǎn)程備份服務(wù)器的遠(yuǎn)程復(fù)制模塊在判斷所述元素是寫(xiě)入請(qǐng)求組的組關(guān)閉信號(hào)停止繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列后,若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成,則向所述本地服務(wù)器發(fā)送寫(xiě)入請(qǐng)求組完成信號(hào),然后繼續(xù)讀取所述寫(xiě)入請(qǐng)求隊(duì)列中的元素并進(jìn)行后續(xù)操作;若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求未全部完成,則等待寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成后,執(zhí)行后續(xù)的操作。
7.一種異步遠(yuǎn)程復(fù)制系統(tǒng)維護(hù)數(shù)據(jù)一致性的方法,涉及所述系統(tǒng)中通過(guò)網(wǎng)絡(luò)連接的本地服務(wù)器和遠(yuǎn)程備份服務(wù)器,該方法包括 本地服務(wù)器將應(yīng)用模塊的寫(xiě)入請(qǐng)求加入到新建的寫(xiě)入請(qǐng)求組或已建立且開(kāi)放的寫(xiě)入請(qǐng)求組,將寫(xiě)入請(qǐng)求組編號(hào)攜帶在該寫(xiě)入請(qǐng)求中發(fā)送到遠(yuǎn)程備份服務(wù)器,并向磁盤(pán)提交該寫(xiě)入請(qǐng)求;遠(yuǎn)程備份服務(wù)器將接收的寫(xiě)入請(qǐng)求置入一寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組。
8.按照權(quán)利要求6所述的方法,其特征在于,所述遠(yuǎn)程備份服務(wù)器的所述寫(xiě)入請(qǐng)求隊(duì)列包括N個(gè)已關(guān)閉的寫(xiě)入請(qǐng)求組和至多一個(gè)未關(guān)閉的寫(xiě)入請(qǐng)求組,所述N為大于零或等于零的整數(shù);所述已關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求和一個(gè)組關(guān)閉信號(hào),所述未關(guān)閉的寫(xiě)入請(qǐng)求組含有一個(gè)或多個(gè)寫(xiě)入請(qǐng)求,每一寫(xiě)入請(qǐng)求中含有寫(xiě)入請(qǐng)求組編號(hào)以及請(qǐng)求寫(xiě)入的內(nèi)容。
9.按照權(quán)利要求7所述的方法,其特征在于,所述本地服務(wù)器具體執(zhí)行的流程包括 所述本地服務(wù)器在收到所述應(yīng)用模塊的寫(xiě)入請(qǐng)求后,若判斷當(dāng)前沒(méi)有開(kāi)放的寫(xiě)入請(qǐng)求組,或者判斷當(dāng)前有開(kāi)放的寫(xiě)入請(qǐng)求組,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組內(nèi)有寫(xiě)入請(qǐng)求已被磁盤(pán)完成,或者判斷該寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,但該寫(xiě)入請(qǐng)求組大小已達(dá)到上限,則關(guān)閉該寫(xiě)入請(qǐng)求組停止加入新的寫(xiě)入請(qǐng)求,并向所述遠(yuǎn)程備份服務(wù)器發(fā)送組關(guān)閉信號(hào),同時(shí)將關(guān)閉的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求仍交由磁盤(pán)完成,然后新建寫(xiě)入請(qǐng)求組并為該請(qǐng)求組分配編號(hào),將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入新建的寫(xiě)入請(qǐng)求組,將該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。
10.按照權(quán)利要求9所述的方法,其特征在于,所述本地服務(wù)器具體執(zhí)行的流程還包括 所述本地服務(wù)器若判斷所述寫(xiě)入請(qǐng)求組內(nèi)沒(méi)有寫(xiě)入請(qǐng)求被磁盤(pán)完成,且繼續(xù)判斷該寫(xiě)入請(qǐng)求組大小尚未達(dá)到上限,則將攜帶有寫(xiě)入請(qǐng)求組編號(hào)的寫(xiě)入請(qǐng)求加入當(dāng)前寫(xiě)入請(qǐng)求組;將該寫(xiě)入請(qǐng)求發(fā)送給遠(yuǎn)程備份服務(wù)器。
11.按照權(quán)利要求9所述的方法,其特征在于,還包括 所述遠(yuǎn)程備份服務(wù)器依次讀取所述寫(xiě)入請(qǐng)求隊(duì)列中的元素,若判斷該元素是所述組關(guān)閉信號(hào),將該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組標(biāo)識(shí)為已關(guān)閉,并停止繼續(xù)讀取該寫(xiě)入請(qǐng)求隊(duì)列。
12.按照權(quán)利要求11所述的方法,其特征在于,所述遠(yuǎn)程備份服務(wù)器在判斷所述元素是所述組關(guān)閉信號(hào),將該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組標(biāo)識(shí)為已關(guān)閉,并停止繼續(xù)讀取寫(xiě)入請(qǐng)求隊(duì)列后,還包括 若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成,則向所述本地服務(wù)器發(fā)送寫(xiě)入請(qǐng)求組完成信號(hào),然后繼續(xù)依次讀取所述寫(xiě)入請(qǐng)求隊(duì)列中的元素并執(zhí)行后續(xù)流程;若繼續(xù)判斷與該組關(guān)閉信號(hào)對(duì)應(yīng)的寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求未全部完成,則等待寫(xiě)入請(qǐng)求組內(nèi)的寫(xiě)入請(qǐng)求全部完成后,執(zhí)行后續(xù)的流程。
全文摘要
本發(fā)明披露了異步遠(yuǎn)程復(fù)制系統(tǒng)及其維護(hù)數(shù)據(jù)一致性的方法,其中系統(tǒng)包括通過(guò)網(wǎng)絡(luò)連接的本地服務(wù)器和遠(yuǎn)程備份服務(wù)器,其中本地服務(wù)器通過(guò)本地的遠(yuǎn)程復(fù)制模塊將應(yīng)用模塊的寫(xiě)入請(qǐng)求加入到新建的寫(xiě)入請(qǐng)求組或已建立且開(kāi)放的寫(xiě)入請(qǐng)求組,將寫(xiě)入請(qǐng)求組編號(hào)攜帶在寫(xiě)入請(qǐng)求中發(fā)送到遠(yuǎn)程備份服務(wù)器,并向磁盤(pán)提交該寫(xiě)入請(qǐng)求;遠(yuǎn)程備份服務(wù)器通過(guò)本地的遠(yuǎn)程復(fù)制模塊將接收的寫(xiě)入請(qǐng)求置入寫(xiě)入請(qǐng)求隊(duì)列中未關(guān)閉的寫(xiě)入請(qǐng)求組。本發(fā)明可有效識(shí)別出所有潛在的寫(xiě)入依賴關(guān)系,解決了因?qū)懭胍蕾囮P(guān)系而缺乏數(shù)據(jù)一致性保護(hù)的問(wèn)題,能夠可靠地保證異步遠(yuǎn)程復(fù)制數(shù)據(jù)的一致性。
文檔編號(hào)H04L29/08GK102790801SQ201210210788
公開(kāi)日2012年11月21日 申請(qǐng)日期2012年6月20日 優(yōu)先權(quán)日2012年6月20日
發(fā)明者張延楓, 徐旸 申請(qǐng)人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司