本申請涉及計算機(jī)領(lǐng)域,尤其涉及一種在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的技術(shù)。
背景技術(shù):
隨著大數(shù)據(jù)時代的來臨,分布式數(shù)據(jù)存儲應(yīng)用越來越廣泛,為保障數(shù)據(jù)安全避免數(shù)據(jù)損壞丟失,通常使用多副本實時寫入的方式,即直至所有副本均寫成功才返回用戶寫入成功。在這一方式實施過程中由于各種環(huán)境異常會引起部分副本寫入失敗,因此在失敗情況下需要快速恢復(fù)寫操作并保證副本間的數(shù)據(jù)一致性。現(xiàn)有技術(shù),往往通過剔除異常的副本并先反饋用戶寫入成功后進(jìn)行副本數(shù)據(jù)補(bǔ)齊,或剔除異常副本后先加入新的副本并在數(shù)據(jù)補(bǔ)齊后反饋用戶寫入成功,或通過將要寫入數(shù)據(jù)以日志的方式記錄并轉(zhuǎn)儲等方式對副本寫入失敗后進(jìn)行恢復(fù)。
然而,現(xiàn)有技術(shù)在需要保證副本間一致性的情況下存在恢復(fù)讀寫安全風(fēng)險高,等待延時長,后臺流量大占用帶寬等問題。且在允許數(shù)據(jù)可以隨機(jī)改寫的情況,這一過程需要保證寫入的原子性,當(dāng)這一情況下副本寫入異常后現(xiàn)有技術(shù)在保證數(shù)據(jù)可靠性和強(qiáng)一致性上有所欠缺。
技術(shù)實現(xiàn)要素:
本申請的一個目的是提供一種在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法與設(shè)備,用以解決分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題。
根據(jù)本申請的一個方面,本申請?zhí)峁┝艘环N在元數(shù)據(jù)服務(wù)器端用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法,該方法解決了分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題,該方法包括:
接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常;
根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;
將所述第二文件副本的信息提供至所述用戶設(shè)備。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N在用戶設(shè)備端用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法,該方法解決了分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題,該方法包括:
若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;
接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息;
向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N在副本服務(wù)器端用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法,該方法解決了分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題,該方法包括:
接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;
根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;
接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的元數(shù)據(jù)服務(wù)器,該設(shè)備解決了分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題,該設(shè)備包括:
重映射請求接收裝置,用于接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常;
副本服務(wù)器重分配裝置,用于根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;
第二文件副本信息反饋裝置,用于將所述第二文件副本的信息提供至所述用戶設(shè)備。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的用戶設(shè)備,該設(shè)備解決了分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題,該設(shè)備包括:
重映射請求發(fā)送裝置,用于若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;
第二文件副本信息接收裝置,用于接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息;
第二文件副本文件讀寫請求發(fā)送裝置,用于向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的副本服務(wù)器,該設(shè)備解決了分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題,該設(shè)備包括:
文件副本建立請求接受裝置,用于接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;
第二文件副本建立裝置,用于根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;
第二文件副本文件讀寫請求接受裝置,用于接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的元數(shù)據(jù)服務(wù)器,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機(jī)可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常;
根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;
將所述第二文件副本的信息提供至所述用戶設(shè)備。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的用戶設(shè)備,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機(jī)可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;
接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息;
向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的副本服務(wù)器,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機(jī)可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;
根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;
接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。
根據(jù)本申請的再一方面,還提供了一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的系統(tǒng),解決了分布式存儲系統(tǒng)中副本寫異常后存在的延時以及無法保障強(qiáng)一致性的問題,其中,該系統(tǒng)包括如前所述根據(jù)本發(fā)明一個方面的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的元數(shù)據(jù)服務(wù)器,如前所述根據(jù)本發(fā)明另一個方面的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的用戶設(shè)備,以及如前所述根據(jù)本發(fā)明另一個方面的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的副本服務(wù)器。
與現(xiàn)有技術(shù)相比,本申請用戶設(shè)備獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求,元數(shù)據(jù)服務(wù)器重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立目標(biāo)文件的第二文件副本,所述第二文件副本引用第一文件副本,用戶設(shè)備向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,副本服務(wù)器接收并響應(yīng)執(zhí)行。即本申請通過建立新舊副本間的引用關(guān)系,在不中斷讀寫的情況下進(jìn)行新舊副本間的數(shù)據(jù)轉(zhuǎn)儲和響應(yīng),從而在副本寫入發(fā)生異常后快速恢復(fù)讀寫,保證了數(shù)據(jù)的強(qiáng)一致性和可靠性,降低了在線寫入的處理延時,減少后臺轉(zhuǎn)儲流量消耗,提高系統(tǒng)的穩(wěn)定性。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細(xì)描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
圖1示出根據(jù)本申請一個方面的元數(shù)據(jù)服務(wù)器端、用戶設(shè)備端以及副本服務(wù)器端配合實現(xiàn)的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法流程圖;
圖2示出根據(jù)本申請一個優(yōu)選實例的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法中的副本服務(wù)器端流程圖;
圖3示出根據(jù)本申請另一個優(yōu)選實例的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法中的元數(shù)據(jù)服務(wù)器端以及用戶設(shè)備端配合工作流程圖;
圖4示出根據(jù)本申請另一個方面的元數(shù)據(jù)服務(wù)器、用戶設(shè)備以及副本服務(wù)器配合實現(xiàn)的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的設(shè)備示意圖;
圖5示出根據(jù)本申請另一個優(yōu)選實例的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的設(shè)備中副本服務(wù)器示意圖;
圖6示出根據(jù)本申請另一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中元數(shù)據(jù)服務(wù)器以及用戶設(shè)備配合使用示意圖。
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實施方式
下面結(jié)合附圖對本申請作進(jìn)一步詳細(xì)描述。
在本申請一個典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機(jī)可讀介質(zhì)的示例。
計算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲器(sram)、動態(tài)隨機(jī)存取存儲器(dram)、其他類型的隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
圖1示出根據(jù)本申請一個方面的元數(shù)據(jù)服務(wù)器端、用戶設(shè)備端以及副本服務(wù)器端配合實現(xiàn)的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法流程圖。所述元數(shù)據(jù)服務(wù)器端包括步驟s11、步驟s12、步驟s13;所述用戶設(shè)備端包括步驟s21、步驟s22、步驟s23;所述副本服務(wù)器端包括步驟s31、步驟s32、步驟s33。
其中,在步驟s21中用戶設(shè)備若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;在步驟s11中元數(shù)據(jù)服務(wù)器接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常;在步驟s12中元數(shù)據(jù)服務(wù)器根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;在步驟s31中副本服務(wù)器接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;在步驟s32中副本服務(wù)器根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;在步驟s13中元數(shù)據(jù)服務(wù)器將所述第二文件副本的信息提供至所述用戶設(shè)備;在步驟s22中用戶設(shè)備接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息;在步驟s23中用戶設(shè)備向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本;在步驟s33中副本服務(wù)器接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。
具體地,在步驟s21中用戶設(shè)備若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;在步驟s11中元數(shù)據(jù)服務(wù)器接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常。其中,所述用戶設(shè)備端即客戶端,多用于發(fā)起文件讀寫操作。所述元數(shù)據(jù)服務(wù)器端用于記錄文件屬性和對應(yīng)文件副本所在的副本服務(wù)器信息,在此副本服務(wù)器管理文件副本,提供對所管理文件副本的讀寫操作。所述目標(biāo)文件即為有讀寫需求的文件,在此用文件f代稱。所述第一文件副本是指目標(biāo)文件在寫入時所建立的寫入副本,多由用戶設(shè)備提出目標(biāo)文件的寫入請求以后由元數(shù)據(jù)服務(wù)器反饋指定并存儲在對應(yīng)的副本服務(wù)器上,在此用fv1代稱。例如,客戶端向元數(shù)據(jù)服務(wù)器請求讀寫文件f,元數(shù)據(jù)服務(wù)器內(nèi)部查表返回f當(dāng)前副本鏡像為fv1,即元數(shù)據(jù)服務(wù)器提供文件f至副本鏡像fv1的映射,存儲在a、b、c三臺副本服務(wù)器上。所述文件寫入異常即在目標(biāo)文件的寫入過程中發(fā)生的異常,包括但不限于網(wǎng)絡(luò)異常、副本服務(wù)器自身異常等。前述異常信息由用戶設(shè)備獲取后,用戶設(shè)備向元數(shù)據(jù)服務(wù)器發(fā)送建立新的目標(biāo)文件映射,建立新的副本與目標(biāo)文件的映射關(guān)系,其中,獲取方式包括但不限于用戶設(shè)備周期檢測,或由副本服務(wù)器上報等。接上文舉例,文件f的副本fv1在寫入時a副本服務(wù)器出現(xiàn)異常,獲取異常信息后客戶端將請求元數(shù)據(jù)服務(wù)器重新映射文件f的副本。用戶設(shè)備獲取第一副本文件執(zhí)行寫操作時發(fā)生的異常并與元數(shù)據(jù)服務(wù)器通信要求重新映射,會使得發(fā)生異常后重映射建立迅速,從而目標(biāo)文件得以在寫異常后迅速切換副本,繼續(xù)進(jìn)行寫入,保證快速恢復(fù)寫入縮短延遲。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述用戶設(shè)備向元數(shù)據(jù)服務(wù)器請求重映射的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的用戶設(shè)備向元數(shù)據(jù)服務(wù)器請求重映射的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟s12中元數(shù)據(jù)服務(wù)器根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;在步驟s31中副本服務(wù)器接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求。即元數(shù)據(jù)服務(wù)器根據(jù)用戶設(shè)備所發(fā)送的重映射請求,為目標(biāo)文件建立新的副本映射,并為新的副本分配相應(yīng)的副本服務(wù)器,從而將副本建立在服務(wù)器上。所述第二文件副本是指基于元數(shù)據(jù)服務(wù)器為目標(biāo)文件分配的新的映射所建立在各副本服務(wù)器上的的鏡像副本,在此以fv2代稱。所述副本服務(wù)器有一個以上,從而可以保障副本數(shù)據(jù)的安全,在某一副本服務(wù)器損壞或丟失后有備份可查。例如接上文舉例,fv1當(dāng)前寫入時a副本服務(wù)器出現(xiàn)異常,客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2包含了引用fv1的信息,在此假設(shè)fv2也有三個副本,對應(yīng)重新分配的d、e、f三臺副本服務(wù)器,元數(shù)據(jù)服務(wù)器將fv2三個副本需要存放在d、e、f三臺副本服務(wù)器上的請求發(fā)送給相應(yīng)的副本服務(wù)器,副本服務(wù)器d、e、f對請求進(jìn)行接收。在此,所述第二文件副本引用所述第一文件副本是指所述第二文件副本的信息中包含第一副本文件引用或指向信息,例如,設(shè)置每個文件副本基本屬性包含對另外文件的指向信息,這里用base屬性代稱,每個文件副本會有base屬性,它指向另一個文件,fv2的base是fv1即表示f2是基于f1的內(nèi)容修改完成,在此,所述文件副本的基本屬性可以進(jìn)行設(shè)置或是在現(xiàn)有的基本屬性上進(jìn)行添加但不限于此。所述第二文件副本引用所述第一文件副本的方式包括但不限于下述舉例,在fv2的文件屬性信息由鍵值對描述:base:fv1,或采用includexxx.h等方式進(jìn)行記錄。建立第二文件副本和第一副本文件之間的引用關(guān)系,使得第二文件副本在數(shù)據(jù)讀寫時可以從第一副本文件轉(zhuǎn)存或讀取自身沒有的數(shù)據(jù),從而快速切換副本使得寫失敗帶來延時減少。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述第二文件副本引用第一文件副本的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的第二文件副本引用第一文件副本的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,在步驟s12中元數(shù)據(jù)服務(wù)器根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本為空且引用所述第一文件副本。即元數(shù)據(jù)服務(wù)器根據(jù)用戶設(shè)備所發(fā)送的重映射請求,為目標(biāo)文件建立新的副本映射,并為新的副本分配相應(yīng)的副本服務(wù)器,從而將副本建立在服務(wù)器上,在此,所建立的新的副本即為第二文件副本,在建立初始其所存儲的數(shù)據(jù)為空,采用文件引用機(jī)制,這一機(jī)制即每個文件有基本屬性,指向另一個文件,這里即為每個新建立的副本文件均包含對在其之前副本文件的引用信息,例如設(shè)置每個文件有基本數(shù)據(jù),這里使用base屬性代稱,假設(shè)fv2的base是fv1,表示fv2是基于fv1的內(nèi)容修改完成。接上文舉例,如果寫入時fv1所在的副本服務(wù)器a發(fā)生異常,則客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2當(dāng)前是空文件,它的base指向fv1,其中,fv2為新建的空文件,用于接替出現(xiàn)寫入失敗的副本文件fv1,并假設(shè)fv2也有三個副本存放在d、e、f三臺副本服務(wù)器上,其中,新建的fv2即為第二副本文件,其剛建立時為空即投入使用不需要等待數(shù)據(jù)的轉(zhuǎn)儲,使得第二副本文件快速建立并接替fv1進(jìn)行目標(biāo)文件f的寫入,從而在寫入失敗進(jìn)一步降低延遲。
接著,在步驟s32中副本服務(wù)器根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本。即副本服務(wù)器被分配給第二文件副本后,根據(jù)元數(shù)據(jù)服務(wù)器所發(fā)送的副本建立請求,將第二文件副本建立在各自的服務(wù)器上。即接上文舉例,元數(shù)據(jù)服務(wù)器分配fv2三臺新的副本服務(wù)器,將fv2三個副本分別存放在d、e、f三臺副本服務(wù)器上。所建立的副本服務(wù)器上的第二副本文件均包含與第二文件副本的引用關(guān)系,即例如,fv2在三個副本服務(wù)器上的base屬性均指向fv1,從而基于任一臺副本服務(wù)器上的副本均能根據(jù)引用信息找到fv1的文件所在,進(jìn)而讀取其中的內(nèi)容。
接著,在步驟s13中元數(shù)據(jù)服務(wù)器將所述第二文件副本的信息提供至所述用戶設(shè)備;在步驟s22中元數(shù)據(jù)服務(wù)器用戶設(shè)備接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息。即元數(shù)據(jù)服務(wù)器在建立文件與第二文件副本的映射后將第二文件副本的信息提供給用戶設(shè)備,其中,所述第二文件副本的信息包括但不限于第二文件副本的名稱、第二文件副本服務(wù)器相關(guān)信息等。用戶設(shè)備接收重映射后的第二副本信息,從而在第二文件副本上進(jìn)行相應(yīng)的讀寫操作。接上文舉例,客戶端基于寫失敗請求重映射的完整過程即為如果fv1當(dāng)前寫入時a副本服務(wù)器出現(xiàn)異常,客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2當(dāng)前是空文件,它的base指向fv1,元數(shù)據(jù)服務(wù)器將fv2三個副本存放在d、e、f三臺副本服務(wù)器,并將這些信息返回給客戶端,是的客戶端可以科技與第二文件副本信息進(jìn)行讀寫操作,恢復(fù)因?qū)懯≡斐傻闹袛唷R驗榈诙北疚募⒂成浜蠹磳⑿畔⑻峁┙o用戶設(shè)備,使得用戶設(shè)備基于第二副本文件可以快速恢復(fù)讀寫。
優(yōu)選地,所述設(shè)備還包括步驟s14(未示出),在步驟s14中元數(shù)據(jù)服務(wù)器通過數(shù)據(jù)復(fù)制補(bǔ)足所述第一文件副本。所述第一文件副本在出現(xiàn)寫失敗后,其所在的多個副本服務(wù)器上的副本數(shù)據(jù)不一定處于一致狀態(tài),通過數(shù)據(jù)復(fù)制進(jìn)行數(shù)據(jù)補(bǔ)足,從而使得第一文件副本的有效數(shù)據(jù)不丟失,且在補(bǔ)足后副本處于可響應(yīng)狀態(tài),從而第二文件副本根據(jù)引用關(guān)系可對第一文件副本的數(shù)據(jù)進(jìn)行讀取或轉(zhuǎn)存。接上文舉例,即元數(shù)據(jù)服務(wù)器對fv1發(fā)起后臺復(fù)制,補(bǔ)足副本,從而使得fv1的有效數(shù)據(jù)丟失并處于可讀取狀態(tài),這一過程是對fv1進(jìn)行的,因此對恢復(fù)讀寫的時間基本無影響。
接著,在步驟s23中元數(shù)據(jù)服務(wù)器用戶設(shè)備向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本;在步驟s33中副本服務(wù)器接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。即用戶設(shè)備根據(jù)所受到的重新映射后的第二副本文件的信息進(jìn)行讀寫,讀寫時的副本為第二副本文件,因此將讀寫請求發(fā)送至第二副本文件所在的所有副本服務(wù)器。第二副本文件對應(yīng)的副本服務(wù)器接收到讀寫請求后即執(zhí)行具體的讀寫請求。接上文舉例,即為客戶端繼續(xù)將f的讀寫請求發(fā)送到d、e、f副本服務(wù)器,對fv2的請求讀寫,fv2開始接受所有f文件的讀寫請求,寫請求發(fā)送到d、e、f都寫成功后返回成功,讀請求發(fā)送到fv2副本后,如果數(shù)據(jù)范圍已存在于fv2文件內(nèi)則直接返回數(shù)據(jù),否則請求b、c上fv1的副本來讀取數(shù)據(jù)。第二副本文件所在副本服務(wù)器接收讀寫請求后讀寫操作即可恢復(fù),因為第二副本文件的副本服務(wù)器數(shù)量與之前第一副本文件等同,因此不會犧牲數(shù)據(jù)讀寫的可靠性,同時因為第二副本文件包含對第一副本文件的引用信息,在讀數(shù)據(jù)時可以直接從第一副本文件進(jìn)行讀取,從而節(jié)約了在重新讀寫之前的數(shù)據(jù)轉(zhuǎn)存時間,使得出現(xiàn)副本寫異常快速恢復(fù),保證在線寫入的低延遲。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述在第二文件副本服務(wù)器上響應(yīng)讀寫請求的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的在第二文件副本服務(wù)器上響應(yīng)讀寫請求的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
圖2示出根據(jù)本申請一個優(yōu)選實例的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法中的副本服務(wù)器端流程圖。所述副本服務(wù)器端包括步驟s31、步驟s32、步驟s33、步驟s34、步驟s35、步驟s36、步驟s37。
其中,在步驟s31中副本服務(wù)器接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;在步驟s32中副本服務(wù)器根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;在步驟s33中副本服務(wù)器接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求;在步驟s34中副本服務(wù)器根據(jù)所述用戶設(shè)備對所述第二文件副本的讀請求,讀取所述讀請求對應(yīng)的數(shù)據(jù);在步驟s35中副本服務(wù)器將所述讀請求對應(yīng)的數(shù)據(jù)返回至所述用戶設(shè)備;在步驟s36中副本服務(wù)器根據(jù)所述用戶設(shè)備對所述第二文件副本的寫請求,對所述第二文件副本執(zhí)行寫操作;在步驟s37中副本服務(wù)器若所述寫操作執(zhí)行成功,向所述用戶設(shè)備返回寫成功信息。
在此,圖2中的步驟s31、步驟s32、步驟s33與圖1中的步驟s31、步驟s32、步驟s33相同或相似,在此不再贅述。
具體地,副本服務(wù)器端所接受讀寫請求中,若為讀請求則在步驟s34中副本服務(wù)器根據(jù)所述用戶設(shè)備對所述第二文件副本的讀請求,讀取所述讀請求對應(yīng)的數(shù)據(jù);接著,在步驟s35中副本服務(wù)器將所述讀請求對應(yīng)的數(shù)據(jù)返回至所述用戶設(shè)備。即用戶設(shè)備在需要進(jìn)行讀操作時對第二文件副本所在的副本服務(wù)器發(fā)送度請求,副本服務(wù)器收到讀請求后進(jìn)行相應(yīng)的響應(yīng)。接上文舉例,即為客戶端向fv2所在的副本服務(wù)器d、e、f發(fā)送讀請求,副本服務(wù)器d、e、f接收到讀請求即在fv2查詢相應(yīng)數(shù)據(jù)進(jìn)行反饋,其中,fv2未有的數(shù)據(jù)可根據(jù)引用信息向之前的副本文件進(jìn)行查詢,從而對讀請求進(jìn)行反饋。
優(yōu)選地,在步驟s34中副本服務(wù)器若所述第二文件副本包含所述讀請求對應(yīng)的數(shù)據(jù),從所述第二文件副本讀取所述讀請求對應(yīng)的數(shù)據(jù);否則,從所述第一文件副本讀取所述讀請求對應(yīng)的數(shù)據(jù)。即當(dāng)副本服務(wù)器收到讀請求后會對第二文件副本的數(shù)據(jù)內(nèi)容進(jìn)行查找,若存在讀請求所需的所需數(shù)據(jù)則進(jìn)行相應(yīng)反饋,若不存在讀請求所需數(shù)據(jù)則根據(jù)第二文件副本中所包含的與第一文件副本的引用關(guān)系,到第一文件副本中進(jìn)行查找并對讀請求進(jìn)行反饋。其中,根據(jù)引用關(guān)系從第一文件副本讀取讀請求對應(yīng)數(shù)據(jù)的方法包括但不限于根據(jù)引用關(guān)系中的地址或其它指向數(shù)據(jù)向第一文件副本轉(zhuǎn)發(fā)讀請求,并由第一文件副本將數(shù)據(jù)反饋至第二文件副本進(jìn)而進(jìn)行進(jìn)一步反饋。接上文舉例,第二副本文件對應(yīng)的副本服務(wù)器接到讀請求后,如果讀請求的數(shù)據(jù)在fv2文件中存在,則fv2副本服務(wù)器直接返回結(jié)果;如果發(fā)現(xiàn)數(shù)據(jù)不存在,則需要從base的fv1讀取,它向fv1的副本服務(wù)器轉(zhuǎn)發(fā)讀請求,fv1副本服務(wù)器返回數(shù)據(jù)給fv2副本服務(wù)器,然后由fv2副本服務(wù)器返回給客戶端。根據(jù)第二文件副本中包含的與第一副本文件的引用關(guān)系,將第二文件副本所沒有的數(shù)據(jù)進(jìn)行讀取并反饋,使得第二文件副本可以正常對讀請求進(jìn)行響應(yīng),且不需要數(shù)據(jù)預(yù)先轉(zhuǎn)存即可以進(jìn)行操作,使得第二文件副本建立后恢復(fù)響應(yīng)的時間縮短。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述從第一文件副本讀取讀請求對應(yīng)數(shù)據(jù)的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的從第一文件副本讀取讀請求對應(yīng)數(shù)據(jù)的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述設(shè)備還包括步驟s38(未示出),在步驟s38中副本服務(wù)器將所述第一文件副本中的數(shù)據(jù)寫入所述第二文件副本。即將第二文件副本中沒有且第一文件副本中有的數(shù)據(jù)轉(zhuǎn)存或?qū)懟氐降诙募北荆瑥亩沟玫诙募北镜臄?shù)據(jù)被補(bǔ)足。其中,第一文件副本中數(shù)據(jù)寫入第二文件副本的方法包括但不限于,每次從第一副本文件讀取數(shù)據(jù)時啟動寫入,定期利用閑時進(jìn)行寫入等。接上文舉例,fv2副本服務(wù)器可以后臺主動將fv1的有用數(shù)據(jù)主動寫回到fv2副本,主要采用lazy寫回,主動寫回發(fā)生在總要從fv1拿數(shù)據(jù)的時候,相當(dāng)于readahead。在此,這一寫入可以寫入此時所需要讀的數(shù)據(jù),或就此持續(xù)進(jìn)行寫入,寫入的停止條件可以是檢測是否第一副本文件的所有有效數(shù)據(jù)是否都已經(jīng)在第二副本文件上。將所述第一文件副本中的數(shù)據(jù)寫入所述第二文件副本使得寫失敗之前的數(shù)據(jù)得以被轉(zhuǎn)存至新的副本,從而保證了數(shù)據(jù)的完整。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述第一文件副本中數(shù)據(jù)寫入第二文件副本的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的第一文件副本中數(shù)據(jù)寫入第二文件副本的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述設(shè)備還包括步驟s39(未示出),在步驟s39中副本服務(wù)器若所述第二文件副本已包括所述第一文件副本中所有數(shù)據(jù),刪除所述第二文件副本對所述第一文件副本的引用關(guān)系。即接上文所述,若檢測第一文件副本中所有數(shù)據(jù)均已寫入第二文件副本,則將第二文件副本中所包含的對第一文件副本的引用信息刪除。同時被引用的第一文件副本可對被引用的關(guān)系進(jìn)行記錄,在刪除時,第二文件副本和第一文件上引用和被應(yīng)用信息均被刪除,第一文件副本對被引用數(shù)目進(jìn)行監(jiān)測,若引用數(shù)變?yōu)榱?,則可以對第一文件副本進(jìn)行回收,從而釋放相應(yīng)資源,例如,當(dāng)發(fā)現(xiàn)所有有效數(shù)據(jù)已經(jīng)在fv2上時,可以解除對fv1的base關(guān)系,如果fv1被引用數(shù)變?yōu)?,fv1將被回收。
其中,第二文件副本與第一文件副本記錄引用信息采用的是文件引用機(jī)制,這一機(jī)制的使用可舉例為,每個文件會有基本屬性,例如base屬性,它指向另一個文件。假設(shè)文件f2的base是文件f1,表示f2是基于f1的內(nèi)容修改完成,當(dāng)讀f2的數(shù)據(jù)時,如果訪問數(shù)據(jù)已更新到f2上,f2直接返回數(shù)據(jù)給客戶端;如果f2上沒有這部分?jǐn)?shù)據(jù),表明數(shù)據(jù)當(dāng)前沒有更新,仍存儲在basef1文件里,f2會轉(zhuǎn)發(fā)請求給f1,讀取相應(yīng)的數(shù)據(jù)。f2可以選擇把從f1讀取的數(shù)據(jù)轉(zhuǎn)儲到自身,這樣后續(xù)從f2讀取數(shù)據(jù)不再需要轉(zhuǎn)發(fā)。如果f2發(fā)現(xiàn)所有依賴f1的數(shù)據(jù)都已存在于自身,它可以解除與f1的base關(guān)系。這樣如果f1沒有被其它文件引用,可以被刪除回收空間。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述文件引用機(jī)制僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的文件引用機(jī)制如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,副本服務(wù)器端所接受讀寫請求中,若為寫請求則在步驟s36中副本服務(wù)器根據(jù)所述用戶設(shè)備對所述第二文件副本的寫請求,對所述第二文件副本執(zhí)行寫操作;接著,在步驟s37中副本服務(wù)器若所述寫操作執(zhí)行成功,向所述用戶設(shè)備返回寫成功信息。優(yōu)選地,所述方法還包括步驟s24(未示出),在步驟s24中用戶設(shè)備若接收到所述重新分配的多個副本服務(wù)器中每個副本服務(wù)器返回的寫成功信息,確認(rèn)對應(yīng)寫請求完成。
即副本服務(wù)器接到用戶設(shè)備所發(fā)送的寫請求后,即對第二文件副本執(zhí)行寫操作,當(dāng)?shù)诙募北舅诘姆?wù)器均返回用戶設(shè)備寫成功后,用戶設(shè)備即認(rèn)為寫成功,并向用戶反饋寫成功的相關(guān)信息。接上文舉例,對fv2的寫與fv1一致,需要等d、e、f副本服務(wù)器都返回成功才返回用戶成功,從而完成多文件副本的寫入。
優(yōu)選地,所述設(shè)備還包括步驟s310(未示出),在步驟s310中副本服務(wù)器若所述寫操作執(zhí)行失敗,向所述用戶設(shè)備報告文件寫入異常。即,若在對第二副本文件的寫入過程出現(xiàn)寫失敗,則反饋寫入異常至用戶設(shè)備,進(jìn)而用戶設(shè)備再次向元數(shù)據(jù)服務(wù)器申請重映射重復(fù)上文所述的相關(guān)步驟。接上文舉例即為,如果fv2寫入過程中出現(xiàn)有副本服務(wù)器異常,由客戶端再次申請fv3的副本映射,由fv3接替fv2進(jìn)行讀寫操作,fv3中包含對fv2的引用,從而繼續(xù)進(jìn)行寫失敗的快速恢復(fù)處理。
圖3示出根據(jù)本申請另一個優(yōu)選實例的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的方法中的元數(shù)據(jù)服務(wù)器端以及用戶設(shè)備端配合工作流程圖。所述元數(shù)據(jù)服務(wù)器端包括步驟s15、步驟s16、步驟s17;所述用戶設(shè)備端包括步驟s25、步驟s26、步驟s27。
其中,在步驟s25中用戶設(shè)備向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送關(guān)于目標(biāo)文件的讀寫請求;在步驟s15中元數(shù)據(jù)服務(wù)器接收用戶設(shè)備發(fā)的送關(guān)于目標(biāo)文件的讀寫請求;在步驟s16中元數(shù)據(jù)服務(wù)器根據(jù)所述關(guān)于目標(biāo)文件的讀寫請求為所述用戶設(shè)備分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第一文件副本;在步驟s17中元數(shù)據(jù)服務(wù)器將所述第一文件副本的信息提供至所述用戶設(shè)備;在步驟s26中用戶設(shè)備接收所述元數(shù)據(jù)服務(wù)器基于所述關(guān)于目標(biāo)文件的讀寫請求發(fā)送的、所述目標(biāo)文件的第一文件副本的信息;在步驟s27中用戶設(shè)備向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第一文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第一文件副本。
具體地,在步驟s25中用戶設(shè)備向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送關(guān)于目標(biāo)文件的讀寫請求;在步驟s15中元數(shù)據(jù)服務(wù)器接收用戶設(shè)備發(fā)的送關(guān)于目標(biāo)文件的讀寫請求。是指在初次進(jìn)行讀寫時,用戶設(shè)備向元數(shù)據(jù)服務(wù)器發(fā)送讀寫請求,元數(shù)據(jù)服務(wù)器接收關(guān)于目標(biāo)文件的讀寫請求后對目標(biāo)文件的副本及其多個副本服務(wù)器進(jìn)行指定。例如假設(shè)用戶邏輯操作的文件名是f,副本服務(wù)器存儲f副本的名稱為fv1,元數(shù)據(jù)服務(wù)器提供f到fv1的映射關(guān)系,即客戶端向元數(shù)據(jù)服務(wù)器請求讀寫f,元數(shù)據(jù)服務(wù)器接收并進(jìn)行響應(yīng)。這一過程為目標(biāo)文件的讀寫啟動和準(zhǔn)備階段,設(shè)置副本保障數(shù)據(jù)安全,防止數(shù)據(jù)的丟失和損壞。
接著,在步驟s16中元數(shù)據(jù)服務(wù)器根據(jù)所述關(guān)于目標(biāo)文件的讀寫請求為所述用戶設(shè)備分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第一文件副本。是指元數(shù)據(jù)服務(wù)器基于所接收的讀寫請去,為目標(biāo)文件分配副本文件并建立相應(yīng)的映射,同時指定對應(yīng)的副本所在服務(wù)器,并將所分配的副本文件在每個服務(wù)器上進(jìn)行建立。例如,客戶端向元數(shù)據(jù)服務(wù)器請求讀寫f的時候,元數(shù)據(jù)服務(wù)器通過內(nèi)部查表得知當(dāng)前文件副本名稱為fv1,存儲在a、b、c三臺副本服務(wù)器上。分配副本服務(wù)器是的每個副本有相應(yīng)的服務(wù)器負(fù)責(zé),從而在某一臺服務(wù)器出現(xiàn)故障而導(dǎo)致寫失敗時或數(shù)據(jù)異常時,其它服務(wù)器上的副本數(shù)據(jù)不受影響。
接著,在步驟s17中元數(shù)據(jù)服務(wù)器將所述第一文件副本的信息提供至所述用戶設(shè)備;在步驟s26中用戶設(shè)備接收所述元數(shù)據(jù)服務(wù)器基于所述關(guān)于目標(biāo)文件的讀寫請求發(fā)送的、所述目標(biāo)文件的第一文件副本的信息。是指用戶設(shè)備接收到元數(shù)據(jù)服務(wù)器發(fā)送的相應(yīng)的映射的第一副本文件及其服務(wù)器信息,在此這一信息中包括但不限于服務(wù)器位置信息,從而可以基于此向相應(yīng)的副本服務(wù)器發(fā)送相應(yīng)的讀寫信息,開始對目標(biāo)文件的讀寫操作。例如,元數(shù)據(jù)服務(wù)器將fv1的相關(guān)信息及其副本服務(wù)器信息發(fā)送給客戶端,客戶端基于此進(jìn)行進(jìn)一步的讀寫操作。
接著,在步驟s27中用戶設(shè)備向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第一文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第一文件副本。即用戶設(shè)備向第一副本文件所在的副本服務(wù)器發(fā)送讀寫請求,從而相應(yīng)的服務(wù)器進(jìn)行執(zhí)行。例如,客戶端寫入請求直接發(fā)給a、b、c三個fv1的副本服務(wù)器,當(dāng)全部寫成功時返回用戶成功。
綜合上文所有舉例,整體的流程整體舉例如下:客戶端向元數(shù)據(jù)服務(wù)器請求讀寫文件f。元數(shù)據(jù)服務(wù)器內(nèi)部查表返回f當(dāng)前副本鏡像為fv1,存儲在a、b、c三臺副本服務(wù)器上。客戶端直接將讀寫請求發(fā)送到a、b、c副本服務(wù)器,對fv1請求讀寫。所有副本寫入成功后返回用戶成功。如果fv1當(dāng)前寫入時a副本服務(wù)器出現(xiàn)異常,客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2當(dāng)前是空文件,它的base指向fv1。元數(shù)據(jù)服務(wù)器將fv2三個副本存放在d、e、f三臺副本服務(wù)器,并將這些信息返回給客戶端。元數(shù)據(jù)服務(wù)器對fv1發(fā)起后臺復(fù)制,補(bǔ)足三個副本??蛻舳死^續(xù)將f的讀寫請求發(fā)送到d、e、f副本服務(wù)器,對fv2的請求讀寫。如果讀請求的數(shù)據(jù)在fv2文件中存在,則fv2副本服務(wù)器直接返回結(jié)果;如果發(fā)現(xiàn)數(shù)據(jù)不存在,則需要從base的fv1讀取,它向fv1的副本服務(wù)器轉(zhuǎn)發(fā)讀請求。fv1副本服務(wù)器返回數(shù)據(jù)給fv2副本服務(wù)器,然后由fv2副本服務(wù)器返回給客戶端。fv2副本服務(wù)器可以后臺主動將fv1的有用數(shù)據(jù)主動寫回到fv2副本,當(dāng)發(fā)現(xiàn)所有有效數(shù)據(jù)已經(jīng)在fv2上時,可以解除對fv1的base關(guān)系。如果fv1被引用數(shù)變成0,fv1將被回收。對fv2的寫與fv1一致,需要等d、e、f副本服務(wù)器都返回成功才返回用戶成功。如果fv2寫入過程中出現(xiàn)有副本服務(wù)器異常,需要進(jìn)行前述類似的恢復(fù)讀寫過程。
上述異常的恢復(fù)過程中,時間消耗非常小,保證了快速恢復(fù)寫的低延遲。通過引用機(jī)制,隨著數(shù)據(jù)不斷寫入和后臺轉(zhuǎn)儲,轉(zhuǎn)發(fā)會被直接讀取替代。最后,沒有日志帶來的每次寫數(shù)據(jù)的轉(zhuǎn)儲流量,只有在異常發(fā)生時才有轉(zhuǎn)儲發(fā)生,提高了系統(tǒng)的有效讀寫帶寬。
圖4示出根據(jù)本申請另一個方面的元數(shù)據(jù)服務(wù)器、用戶設(shè)備以及副本服務(wù)器配合實現(xiàn)的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的設(shè)備示意圖。所述元數(shù)據(jù)服務(wù)器包括重映射請求接收裝置111、副本服務(wù)器重分配裝置112、第二文件副本信息反饋裝置113;所述用戶設(shè)備包括重映射請求發(fā)送裝置121、第二文件副本信息接收裝置122、第二文件副本文件讀寫請求發(fā)送裝置123;所述副本服務(wù)器包括文件副本建立請求接受裝置131、第二文件副本建立裝置132、第二文件副本文件讀寫請求接受裝置133。
其中,用戶設(shè)備中重映射請求發(fā)送裝置121若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;元數(shù)據(jù)服務(wù)器中重映射請求接收裝置111接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常;元數(shù)據(jù)服務(wù)器中副本服務(wù)器重分配裝置112根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;副本服務(wù)器中文件副本建立請求接受裝置131接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;副本服務(wù)器中第二文件副本建立裝置132根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;元數(shù)據(jù)服務(wù)器中第二文件副本信息反饋裝置113將所述第二文件副本的信息提供至所述用戶設(shè)備;用戶設(shè)備中第二文件副本信息接收裝置122接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息;用戶設(shè)備中第二文件副本文件讀寫請求發(fā)送裝置123向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本;副本服務(wù)器中第二文件副本文件讀寫請求接受裝置133接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。
具體地,用戶設(shè)備中重映射請求發(fā)送裝置121若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;元數(shù)據(jù)服務(wù)器中重映射請求接收裝置111接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常。其中,所述用戶設(shè)備端即客戶端,多用于發(fā)起文件讀寫操作。所述元數(shù)據(jù)服務(wù)器端用于記錄文件屬性和對應(yīng)文件副本所在的副本服務(wù)器信息,在此副本服務(wù)器管理文件副本,提供對所管理文件副本的讀寫操作。所述目標(biāo)文件即為有讀寫需求的文件,在此用文件f代稱。所述第一文件副本是指目標(biāo)文件在寫入時所建立的寫入副本,多由用戶設(shè)備提出目標(biāo)文件的寫入請求以后由元數(shù)據(jù)服務(wù)器反饋指定并存儲在對應(yīng)的副本服務(wù)器上,在此用fv1代稱。例如,客戶端向元數(shù)據(jù)服務(wù)器請求讀寫文件f,元數(shù)據(jù)服務(wù)器內(nèi)部查表返回f當(dāng)前副本鏡像為fv1,即元數(shù)據(jù)服務(wù)器提供文件f至副本鏡像fv1的映射,存儲在a、b、c三臺副本服務(wù)器上。所述文件寫入異常即在目標(biāo)文件的寫入過程中發(fā)生的異常,包括但不限于網(wǎng)絡(luò)異常、副本服務(wù)器自身異常等。前述異常信息由用戶設(shè)備獲取后,用戶設(shè)備向元數(shù)據(jù)服務(wù)器發(fā)送建立新的目標(biāo)文件映射,建立新的副本與目標(biāo)文件的映射關(guān)系,其中,獲取方式包括但不限于用戶設(shè)備周期檢測,或由副本服務(wù)器上報等。接上文舉例,文件f的副本fv1在寫入時a副本服務(wù)器出現(xiàn)異常,獲取異常信息后客戶端將請求元數(shù)據(jù)服務(wù)器重新映射文件f的副本。用戶設(shè)備獲取第一副本文件執(zhí)行寫操作時發(fā)生的異常并與元數(shù)據(jù)服務(wù)器通信要求重新映射,會使得發(fā)生異常后重映射建立迅速,從而目標(biāo)文件得以在寫異常后迅速切換副本,繼續(xù)進(jìn)行寫入,保證快速恢復(fù)寫入縮短延遲。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述用戶設(shè)備向元數(shù)據(jù)服務(wù)器請求重映射的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的用戶設(shè)備向元數(shù)據(jù)服務(wù)器請求重映射的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,元數(shù)據(jù)服務(wù)器中副本服務(wù)器重分配裝置112根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;副本服務(wù)器中文件副本建立請求接受裝置131接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求。即元數(shù)據(jù)服務(wù)器根據(jù)用戶設(shè)備所發(fā)送的重映射請求,為目標(biāo)文件建立新的副本映射,并為新的副本分配相應(yīng)的副本服務(wù)器,從而將副本建立在服務(wù)器上。所述第二文件副本是指基于元數(shù)據(jù)服務(wù)器為目標(biāo)文件分配的新的映射所建立在各副本服務(wù)器上的的鏡像副本,在此以fv2代稱。所述副本服務(wù)器有一個以上,從而可以保障副本數(shù)據(jù)的安全,在某一副本服務(wù)器損壞或丟失后有備份可查。例如接上文舉例,fv1當(dāng)前寫入時a副本服務(wù)器出現(xiàn)異常,客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2包含了引用fv1的信息,在此假設(shè)fv2也有三個副本,對應(yīng)重新分配的d、e、f三臺副本服務(wù)器,元數(shù)據(jù)服務(wù)器將fv2三個副本需要存放在d、e、f三臺副本服務(wù)器上的請求發(fā)送給相應(yīng)的副本服務(wù)器,副本服務(wù)器d、e、f對請求進(jìn)行接收。在此,所述第二文件副本引用所述第一文件副本是指所述第二文件副本的信息中包含第一副本文件引用或指向信息,例如,設(shè)置每個文件副本基本屬性包含對另外文件的指向信息,這里用base屬性代稱,每個文件副本會有base屬性,它指向另一個文件,fv2的base是fv1即表示f2是基于f1的內(nèi)容修改完成,在此,所述文件副本的基本屬性可以進(jìn)行設(shè)置或是在現(xiàn)有的基本屬性上進(jìn)行添加但不限于此。所述第二文件副本引用所述第一文件副本的方式包括但不限于下述舉例,在fv2的文件屬性信息由鍵值對描述:base:fv1,或采用includexxx.h等方式進(jìn)行記錄。建立第二文件副本和第一副本文件之間的引用關(guān)系,使得第二文件副本在數(shù)據(jù)讀寫時可以從第一副本文件轉(zhuǎn)存或讀取自身沒有的數(shù)據(jù),從而快速切換副本使得寫失敗帶來延時減少。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述第二文件副本引用第一文件副本的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的第二文件副本引用第一文件副本的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述副本服務(wù)器重分配裝置112根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本為空且引用所述第一文件副本。即元數(shù)據(jù)服務(wù)器根據(jù)用戶設(shè)備所發(fā)送的重映射請求,為目標(biāo)文件建立新的副本映射,并為新的副本分配相應(yīng)的副本服務(wù)器,從而將副本建立在服務(wù)器上,在此,所建立的新的副本即為第二文件副本,在建立初始其所存儲的數(shù)據(jù)為空,采用文件引用機(jī)制,這一機(jī)制即每個文件有基本屬性,指向另一個文件,這里即為每個新建立的副本文件均包含對在其之前副本文件的引用信息,例如設(shè)置每個文件有基本數(shù)據(jù),這里使用base屬性代稱,假設(shè)fv2的base是fv1,表示fv2是基于fv1的內(nèi)容修改完成。接上文舉例,如果寫入時fv1所在的副本服務(wù)器a發(fā)生異常,則客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2當(dāng)前是空文件,它的base指向fv1,其中,fv2為新建的空文件,用于接替出現(xiàn)寫入失敗的副本文件fv1,并假設(shè)fv2也有三個副本存放在d、e、f三臺副本服務(wù)器上,其中,新建的fv2即為第二副本文件,其剛建立時為空即投入使用不需要等待數(shù)據(jù)的轉(zhuǎn)儲,使得第二副本文件快速建立并接替fv1進(jìn)行目標(biāo)文件f的寫入,從而在寫入失敗進(jìn)一步降低延遲。
接著,副本服務(wù)器中第二文件副本建立裝置132根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本。即副本服務(wù)器被分配給第二文件副本后,根據(jù)元數(shù)據(jù)服務(wù)器所發(fā)送的副本建立請求,將第二文件副本建立在各自的服務(wù)器上。即接上文舉例,元數(shù)據(jù)服務(wù)器分配fv2三臺新的副本服務(wù)器,將fv2三個副本分別存放在d、e、f三臺副本服務(wù)器上。所建立的副本服務(wù)器上的第二副本文件均包含與第二文件副本的引用關(guān)系,即例如,fv2在三個副本服務(wù)器上的base屬性均指向fv1,從而基于任一臺副本服務(wù)器上的副本均能根據(jù)引用信息找到fv1的文件所在,進(jìn)而讀取其中的內(nèi)容。
接著,元數(shù)據(jù)服務(wù)器中第二文件副本信息反饋裝置113將所述第二文件副本的信息提供至所述用戶設(shè)備;用戶設(shè)備中第二文件副本信息接收裝置122接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息。即元數(shù)據(jù)服務(wù)器在建立文件與第二文件副本的映射后將第二文件副本的信息提供給用戶設(shè)備,其中,所述第二文件副本的信息包括但不限于第二文件副本的名稱、第二文件副本服務(wù)器相關(guān)信息等。用戶設(shè)備接收重映射后的第二副本信息,從而在第二文件副本上進(jìn)行相應(yīng)的讀寫操作。接上文舉例,客戶端基于寫失敗請求重映射的完整過程即為如果fv1當(dāng)前寫入時a副本服務(wù)器出現(xiàn)異常,客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2當(dāng)前是空文件,它的base指向fv1,元數(shù)據(jù)服務(wù)器將fv2三個副本存放在d、e、f三臺副本服務(wù)器,并將這些信息返回給客戶端,是的客戶端可以科技與第二文件副本信息進(jìn)行讀寫操作,恢復(fù)因?qū)懯≡斐傻闹袛?。因為第二副本文件建立映射后即將信息提供給用戶設(shè)備,使得用戶設(shè)備基于第二副本文件可以快速恢復(fù)讀寫。
優(yōu)選地,所述設(shè)備還包括副本補(bǔ)足裝置114(未示出),所述副本補(bǔ)足裝置114通過數(shù)據(jù)復(fù)制補(bǔ)足所述第一文件副本。所述第一文件副本在出現(xiàn)寫失敗后,其所在的多個副本服務(wù)器上的副本數(shù)據(jù)不一定處于一致狀態(tài),通過數(shù)據(jù)復(fù)制進(jìn)行數(shù)據(jù)補(bǔ)足,從而使得第一文件副本的有效數(shù)據(jù)不丟失,且在補(bǔ)足后副本處于可響應(yīng)狀態(tài),從而第二文件副本根據(jù)引用關(guān)系可對第一文件副本的數(shù)據(jù)進(jìn)行讀取或轉(zhuǎn)存。接上文舉例,即元數(shù)據(jù)服務(wù)器對fv1發(fā)起后臺復(fù)制,補(bǔ)足副本,從而使得fv1的有效數(shù)據(jù)丟失并處于可讀取狀態(tài),這一過程是對fv1進(jìn)行的,因此對恢復(fù)讀寫的時間基本無影響。
接著,用戶設(shè)備中第二文件副本文件讀寫請求發(fā)送裝置123向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本;副本服務(wù)器中第二文件副本文件讀寫請求接受裝置133接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。即用戶設(shè)備根據(jù)所受到的重新映射后的第二副本文件的信息進(jìn)行讀寫,讀寫時的副本為第二副本文件,因此將讀寫請求發(fā)送至第二副本文件所在的所有副本服務(wù)器。第二副本文件對應(yīng)的副本服務(wù)器接收到讀寫請求后即執(zhí)行具體的讀寫請求。接上文舉例,即為客戶端繼續(xù)將f的讀寫請求發(fā)送到d、e、f副本服務(wù)器,對fv2的請求讀寫,fv2開始接受所有f文件的讀寫請求,寫請求發(fā)送到d、e、f都寫成功后返回成功,讀請求發(fā)送到fv2副本后,如果數(shù)據(jù)范圍已存在于fv2文件內(nèi)則直接返回數(shù)據(jù),否則請求b、c上fv1的副本來讀取數(shù)據(jù)。第二副本文件所在副本服務(wù)器接收讀寫請求后讀寫操作即可恢復(fù),因為第二副本文件的副本服務(wù)器數(shù)量與之前第一副本文件等同,因此不會犧牲數(shù)據(jù)讀寫的可靠性,同時因為第二副本文件包含對第一副本文件的引用信息,在讀數(shù)據(jù)時可以直接從第一副本文件進(jìn)行讀取,從而節(jié)約了在重新讀寫之前的數(shù)據(jù)轉(zhuǎn)存時間,使得出現(xiàn)副本寫異??焖倩謴?fù),保證在線寫入的低延遲。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述在第二文件副本服務(wù)器上響應(yīng)讀寫請求的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的在第二文件副本服務(wù)器上響應(yīng)讀寫請求的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
圖5示出根據(jù)本申請另一個優(yōu)選實例的一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的設(shè)備中副本服務(wù)器示意圖。所述副本服務(wù)器包括文件副本建立請求接受裝置231、第二文件副本建立裝置232、第二文件副本文件讀寫請求接受裝置233、讀請求響應(yīng)裝置234、讀請求反饋裝置235、寫請求響應(yīng)裝置236、寫請求反饋裝置237。
其中,文件副本建立請求接受裝置231接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;第二文件副本建立裝置232根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;第二文件副本文件讀寫請求接受裝置233接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求;讀請求響應(yīng)裝置234根據(jù)所述用戶設(shè)備對所述第二文件副本的讀請求,讀取所述讀請求對應(yīng)的數(shù)據(jù);讀請求反饋裝置235將所述讀請求對應(yīng)的數(shù)據(jù)返回至所述用戶設(shè)備;寫請求響應(yīng)裝置236根據(jù)所述用戶設(shè)備對所述第二文件副本的寫請求,對所述第二文件副本執(zhí)行寫操作;寫請求反饋裝置237若所述寫操作執(zhí)行成功,向所述用戶設(shè)備返回寫成功信息。
在此,圖5中的文件副本建立請求接受裝置231、第二文件副本建立裝置232、第二文件副本文件讀寫請求接受裝置233與圖4中的文件副本建立請求接受裝置131、第二文件副本建立裝置132、第二文件副本文件讀寫請求接受裝置133相同或相似,在此不再贅述。
具體地,副本服務(wù)器所接受讀寫請求中,若為讀請求則所述讀請求響應(yīng)裝置234根據(jù)所述用戶設(shè)備對所述第二文件副本的讀請求,讀取所述讀請求對應(yīng)的數(shù)據(jù);接著,讀請求反饋裝置235將所述讀請求對應(yīng)的數(shù)據(jù)返回至所述用戶設(shè)備。即用戶設(shè)備在需要進(jìn)行讀操作時對第二文件副本所在的副本服務(wù)器發(fā)送度請求,副本服務(wù)器收到讀請求后進(jìn)行相應(yīng)的響應(yīng)。接上文舉例,即為客戶端向fv2所在的副本服務(wù)器d、e、f發(fā)送讀請求,副本服務(wù)器d、e、f接收到讀請求即在fv2查詢相應(yīng)數(shù)據(jù)進(jìn)行反饋,其中,fv2未有的數(shù)據(jù)可根據(jù)引用信息向之前的副本文件進(jìn)行查詢,從而對讀請求進(jìn)行反饋。
優(yōu)選地,所述讀請求響應(yīng)裝置234若所述第二文件副本包含所述讀請求對應(yīng)的數(shù)據(jù),從所述第二文件副本讀取所述讀請求對應(yīng)的數(shù)據(jù);否則,從所述第一文件副本讀取所述讀請求對應(yīng)的數(shù)據(jù)。即當(dāng)副本服務(wù)器收到讀請求后會對第二文件副本的數(shù)據(jù)內(nèi)容進(jìn)行查找,若存在讀請求所需的所需數(shù)據(jù)則進(jìn)行相應(yīng)反饋,若不存在讀請求所需數(shù)據(jù)則根據(jù)第二文件副本中所包含的與第一文件副本的引用關(guān)系,到第一文件副本中進(jìn)行查找并對讀請求進(jìn)行反饋。其中,根據(jù)引用關(guān)系從第一文件副本讀取讀請求對應(yīng)數(shù)據(jù)的方法包括但不限于根據(jù)引用關(guān)系中的地址或其它指向數(shù)據(jù)向第一文件副本轉(zhuǎn)發(fā)讀請求,并由第一文件副本將數(shù)據(jù)反饋至第二文件副本進(jìn)而進(jìn)行進(jìn)一步反饋。接上文舉例,第二副本文件對應(yīng)的副本服務(wù)器接到讀請求后,如果讀請求的數(shù)據(jù)在fv2文件中存在,則fv2副本服務(wù)器直接返回結(jié)果;如果發(fā)現(xiàn)數(shù)據(jù)不存在,則需要從base的fv1讀取,它向fv1的副本服務(wù)器轉(zhuǎn)發(fā)讀請求,fv1副本服務(wù)器返回數(shù)據(jù)給fv2副本服務(wù)器,然后由fv2副本服務(wù)器返回給客戶端。根據(jù)第二文件副本中包含的與第一副本文件的引用關(guān)系,將第二文件副本所沒有的數(shù)據(jù)進(jìn)行讀取并反饋,使得第二文件副本可以正常對讀請求進(jìn)行響應(yīng),且不需要數(shù)據(jù)預(yù)先轉(zhuǎn)存即可以進(jìn)行操作,使得第二文件副本建立后恢復(fù)響應(yīng)的時間縮短。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述從第一文件副本讀取讀請求對應(yīng)數(shù)據(jù)的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的從第一文件副本讀取讀請求對應(yīng)數(shù)據(jù)的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述設(shè)備還包括數(shù)據(jù)寫入裝置238(未示出),所述數(shù)據(jù)寫入裝置238將所述第一文件副本中的數(shù)據(jù)寫入所述第二文件副本。即將第二文件副本中沒有且第一文件副本中有的數(shù)據(jù)轉(zhuǎn)存或?qū)懟氐降诙募北?,從而使得第二文件副本的?shù)據(jù)被補(bǔ)足。其中,第一文件副本中數(shù)據(jù)寫入第二文件副本的方法包括但不限于,每次從第一副本文件讀取數(shù)據(jù)時啟動寫入,定期利用閑時進(jìn)行寫入等。接上文舉例,fv2副本服務(wù)器可以后臺主動將fv1的有用數(shù)據(jù)主動寫回到fv2副本,主要采用lazy寫回,主動寫回發(fā)生在總要從fv1拿數(shù)據(jù)的時候,相當(dāng)于readahead。在此,這一寫入可以寫入此時所需要讀的數(shù)據(jù),或就此持續(xù)進(jìn)行寫入,寫入的停止條件可以是檢測是否第一副本文件的所有有效數(shù)據(jù)是否都已經(jīng)在第二副本文件上。將所述第一文件副本中的數(shù)據(jù)寫入所述第二文件副本使得寫失敗之前的數(shù)據(jù)得以被轉(zhuǎn)存至新的副本,從而保證了數(shù)據(jù)的完整。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述第一文件副本中數(shù)據(jù)寫入第二文件副本的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的第一文件副本中數(shù)據(jù)寫入第二文件副本的方式如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述設(shè)備還包括副本引用關(guān)系刪除裝置239(未示出),所述副本引用關(guān)系刪除裝置239若所述第二文件副本已包括所述第一文件副本中所有數(shù)據(jù),刪除所述第二文件副本對所述第一文件副本的引用關(guān)系。即接上文所述,若檢測第一文件副本中所有數(shù)據(jù)均已寫入第二文件副本,則將第二文件副本中所包含的對第一文件副本的引用信息刪除。同時被引用的第一文件副本可對被引用的關(guān)系進(jìn)行記錄,在刪除時,第二文件副本和第一文件上引用和被應(yīng)用信息均被刪除,第一文件副本對被引用數(shù)目進(jìn)行監(jiān)測,若引用數(shù)變?yōu)榱?,則可以對第一文件副本進(jìn)行回收,從而釋放相應(yīng)資源,例如,當(dāng)發(fā)現(xiàn)所有有效數(shù)據(jù)已經(jīng)在fv2上時,可以解除對fv1的base關(guān)系,如果fv1被引用數(shù)變?yōu)?,fv1將被回收。
其中,第二文件副本與第一文件副本記錄引用信息采用的是文件引用機(jī)制,這一機(jī)制的使用可舉例為,每個文件會有基本屬性,例如base屬性,它指向另一個文件。假設(shè)文件f2的base是文件f1,表示f2是基于f1的內(nèi)容修改完成,當(dāng)讀f2的數(shù)據(jù)時,如果訪問數(shù)據(jù)已更新到f2上,f2直接返回數(shù)據(jù)給客戶端;如果f2上沒有這部分?jǐn)?shù)據(jù),表明數(shù)據(jù)當(dāng)前沒有更新,仍存儲在basef1文件里,f2會轉(zhuǎn)發(fā)請求給f1,讀取相應(yīng)的數(shù)據(jù)。f2可以選擇把從f1讀取的數(shù)據(jù)轉(zhuǎn)儲到自身,這樣后續(xù)從f2讀取數(shù)據(jù)不再需要轉(zhuǎn)發(fā)。如果f2發(fā)現(xiàn)所有依賴f1的數(shù)據(jù)都已存在于自身,它可以解除與f1的base關(guān)系。這樣如果f1沒有被其它文件引用,可以被刪除回收空間。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述文件引用機(jī)制僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的文件引用機(jī)制如可適用于本申請,也應(yīng)包含在本申請保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
接著,副本服務(wù)器所接受讀寫請求中,若為寫請求則所述寫請求響應(yīng)裝置236根據(jù)所述用戶設(shè)備對所述第二文件副本的寫請求,對所述第二文件副本執(zhí)行寫操作;接著,寫請求反饋裝置237若所述寫操作執(zhí)行成功,向所述用戶設(shè)備返回寫成功信息。優(yōu)選地,所述設(shè)備還包括寫成功確認(rèn)裝置124(未示出),所述寫成功確認(rèn)裝置124若接收到所述重新分配的多個副本服務(wù)器中每個副本服務(wù)器返回的寫成功信息,確認(rèn)對應(yīng)寫請求完成。
即副本服務(wù)器接到用戶設(shè)備所發(fā)送的寫請求后,即對第二文件副本執(zhí)行寫操作,當(dāng)?shù)诙募北舅诘姆?wù)器均返回用戶設(shè)備寫成功后,用戶設(shè)備即認(rèn)為寫成功,并向用戶反饋寫成功的相關(guān)信息。接上文舉例,對fv2的寫與fv1一致,需要等d、e、f副本服務(wù)器都返回成功才返回用戶成功,從而完成多文件副本的寫入。
優(yōu)選地,所述設(shè)備還包括寫失敗反饋裝置2310(未示出),所述寫失敗反饋裝置2310若所述寫操作執(zhí)行失敗,向所述用戶設(shè)備報告文件寫入異常。即,若在對第二副本文件的寫入過程出現(xiàn)寫失敗,則反饋寫入異常至用戶設(shè)備,進(jìn)而用戶設(shè)備再次向元數(shù)據(jù)服務(wù)器申請重映射重復(fù)上文所述的相關(guān)步驟。接上文舉例即為,如果fv2寫入過程中出現(xiàn)有副本服務(wù)器異常,由客戶端再次申請fv3的副本映射,由fv3接替fv2進(jìn)行讀寫操作,fv3中包含對fv2的引用,從而繼續(xù)進(jìn)行寫失敗的快速恢復(fù)處理。
圖6示出根據(jù)本申請另一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中元數(shù)據(jù)服務(wù)器以及用戶設(shè)備配合使用示意圖。所述元數(shù)據(jù)服務(wù)器包括讀寫請求接收裝置315、副本服務(wù)器分配裝置316、第一文件副本信息反饋裝置317;所述用戶設(shè)備包括讀寫請求發(fā)送裝置325、第一文件副本信息接收裝置326、第一文件副本文件讀寫請求發(fā)送裝置327。
其中,用戶設(shè)備中讀寫請求發(fā)送裝置325向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送關(guān)于目標(biāo)文件的讀寫請求;元數(shù)據(jù)服務(wù)器中讀寫請求接收裝置315接收用戶設(shè)備發(fā)的送關(guān)于目標(biāo)文件的讀寫請求;元數(shù)據(jù)服務(wù)器中副本服務(wù)器分配裝置316根據(jù)所述關(guān)于目標(biāo)文件的讀寫請求為所述用戶設(shè)備分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第一文件副本;元數(shù)據(jù)服務(wù)器中第一文件副本信息反饋裝置317將所述第一文件副本的信息提供至所述用戶設(shè)備;用戶設(shè)備中第一文件副本信息接收裝置326接收所述元數(shù)據(jù)服務(wù)器基于所述關(guān)于目標(biāo)文件的讀寫請求發(fā)送的、所述目標(biāo)文件的第一文件副本的信息;用戶設(shè)備中第一文件副本文件讀寫請求發(fā)送裝置327向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第一文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第一文件副本。
具體地,用戶設(shè)備中讀寫請求發(fā)送裝置325向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送關(guān)于目標(biāo)文件的讀寫請求;元數(shù)據(jù)服務(wù)器中讀寫請求接收裝置315接收用戶設(shè)備發(fā)的送關(guān)于目標(biāo)文件的讀寫請求。是指在初次進(jìn)行讀寫時,用戶設(shè)備向元數(shù)據(jù)服務(wù)器發(fā)送讀寫請求,元數(shù)據(jù)服務(wù)器接收關(guān)于目標(biāo)文件的讀寫請求后對目標(biāo)文件的副本及其多個副本服務(wù)器進(jìn)行指定。例如假設(shè)用戶邏輯操作的文件名是f,副本服務(wù)器存儲f副本的名稱為fv1,元數(shù)據(jù)服務(wù)器提供f到fv1的映射關(guān)系,即客戶端向元數(shù)據(jù)服務(wù)器請求讀寫f,元數(shù)據(jù)服務(wù)器接收并進(jìn)行響應(yīng)。這一過程為目標(biāo)文件的讀寫啟動和準(zhǔn)備階段,設(shè)置副本保障數(shù)據(jù)安全,防止數(shù)據(jù)的丟失和損壞。
接著,元數(shù)據(jù)服務(wù)器中副本服務(wù)器分配裝置316根據(jù)所述關(guān)于目標(biāo)文件的讀寫請求為所述用戶設(shè)備分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第一文件副本。是指元數(shù)據(jù)服務(wù)器基于所接收的讀寫請去,為目標(biāo)文件分配副本文件并建立相應(yīng)的映射,同時指定對應(yīng)的副本所在服務(wù)器,并將所分配的副本文件在每個服務(wù)器上進(jìn)行建立。例如,客戶端向元數(shù)據(jù)服務(wù)器請求讀寫f的時候,元數(shù)據(jù)服務(wù)器通過內(nèi)部查表得知當(dāng)前文件副本名稱為fv1,存儲在a、b、c三臺副本服務(wù)器上。分配副本服務(wù)器是的每個副本有相應(yīng)的服務(wù)器負(fù)責(zé),從而在某一臺服務(wù)器出現(xiàn)故障而導(dǎo)致寫失敗時或數(shù)據(jù)異常時,其它服務(wù)器上的副本數(shù)據(jù)不受影響。
接著,元數(shù)據(jù)服務(wù)器中第一文件副本信息反饋裝置317將所述第一文件副本的信息提供至所述用戶設(shè)備;用戶設(shè)備中第一文件副本信息接收裝置326接收所述元數(shù)據(jù)服務(wù)器基于所述關(guān)于目標(biāo)文件的讀寫請求發(fā)送的、所述目標(biāo)文件的第一文件副本的信息。是指用戶設(shè)備接收到元數(shù)據(jù)服務(wù)器發(fā)送的相應(yīng)的映射的第一副本文件及其服務(wù)器信息,在此這一信息中包括但不限于服務(wù)器位置信息,從而可以基于此向相應(yīng)的副本服務(wù)器發(fā)送相應(yīng)的讀寫信息,開始對目標(biāo)文件的讀寫操作。例如,元數(shù)據(jù)服務(wù)器將fv1的相關(guān)信息及其副本服務(wù)器信息發(fā)送給客戶端,客戶端基于此進(jìn)行進(jìn)一步的讀寫操作。
接著,用戶設(shè)備中第一文件副本文件讀寫請求發(fā)送裝置327向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第一文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第一文件副本。即用戶設(shè)備向第一副本文件所在的副本服務(wù)器發(fā)送讀寫請求,從而相應(yīng)的服務(wù)器進(jìn)行執(zhí)行。例如,客戶端寫入請求直接發(fā)給a、b、c三個fv1的副本服務(wù)器,當(dāng)全部寫成功時返回用戶成功。
綜合上文所有舉例,整體的流程整體舉例如下:客戶端向元數(shù)據(jù)服務(wù)器請求讀寫文件f。元數(shù)據(jù)服務(wù)器內(nèi)部查表返回f當(dāng)前副本鏡像為fv1,存儲在a、b、c三臺副本服務(wù)器上??蛻舳酥苯訉⒆x寫請求發(fā)送到a、b、c副本服務(wù)器,對fv1請求讀寫。所有副本寫入成功后返回用戶成功。如果fv1當(dāng)前寫入時a副本服務(wù)器出現(xiàn)異常,客戶端請求元數(shù)據(jù)服務(wù)器重新映射f文件為fv2,fv2當(dāng)前是空文件,它的base指向fv1。元數(shù)據(jù)服務(wù)器將fv2三個副本存放在d、e、f三臺副本服務(wù)器,并將這些信息返回給客戶端。元數(shù)據(jù)服務(wù)器對fv1發(fā)起后臺復(fù)制,補(bǔ)足三個副本??蛻舳死^續(xù)將f的讀寫請求發(fā)送到d、e、f副本服務(wù)器,對fv2的請求讀寫。如果讀請求的數(shù)據(jù)在fv2文件中存在,則fv2副本服務(wù)器直接返回結(jié)果;如果發(fā)現(xiàn)數(shù)據(jù)不存在,則需要從base的fv1讀取,它向fv1的副本服務(wù)器轉(zhuǎn)發(fā)讀請求。fv1副本服務(wù)器返回數(shù)據(jù)給fv2副本服務(wù)器,然后由fv2副本服務(wù)器返回給客戶端。fv2副本服務(wù)器可以后臺主動將fv1的有用數(shù)據(jù)主動寫回到fv2副本,當(dāng)發(fā)現(xiàn)所有有效數(shù)據(jù)已經(jīng)在fv2上時,可以解除對fv1的base關(guān)系。如果fv1被引用數(shù)變成0,fv1將被回收。對fv2的寫與fv1一致,需要等d、e、f副本服務(wù)器都返回成功才返回用戶成功。如果fv2寫入過程中出現(xiàn)有副本服務(wù)器異常,需要進(jìn)行前述類似的恢復(fù)讀寫過程。
上述異常的恢復(fù)過程中,時間消耗非常小,保證了快速恢復(fù)寫的低延遲。通過引用機(jī)制,隨著數(shù)據(jù)不斷寫入和后臺轉(zhuǎn)儲,轉(zhuǎn)發(fā)會被直接讀取替代。最后,沒有日志帶來的每次寫數(shù)據(jù)的轉(zhuǎn)儲流量,只有在異常發(fā)生時才有轉(zhuǎn)儲發(fā)生,提高了系統(tǒng)的有效讀寫帶寬。
此外,本申請還提供了一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的元數(shù)據(jù)服務(wù)器,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機(jī)可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
接收對應(yīng)用戶設(shè)備基于文件寫入異常發(fā)送的關(guān)于目標(biāo)文件的重映射請求,其中,所述用戶設(shè)備在對所述目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得所述文件寫入異常;
根據(jù)所述重映射請求為所述用戶設(shè)備重新分配多個副本服務(wù)器,并在每個副本服務(wù)器上建立所述目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述第一文件副本;
將所述第二文件副本的信息提供至所述用戶設(shè)備。
此外,本申請還提供了一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的用戶設(shè)備,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機(jī)可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
若在對目標(biāo)文件的第一文件副本執(zhí)行寫操作時獲得文件寫入異常,向?qū)?yīng)元數(shù)據(jù)服務(wù)器發(fā)送對應(yīng)的重映射請求;
接收所述元數(shù)據(jù)服務(wù)器基于所述重映射請求發(fā)送的、所述目標(biāo)文件的第二文件副本的信息;
向所述元數(shù)據(jù)服務(wù)器為所述用戶設(shè)備重新分配的多個副本服務(wù)器分別發(fā)送關(guān)于所述第二文件副本的讀寫請求,其中,每個副本服務(wù)器分別存儲有所述第二文件副本。
此外,本申請還提供了一種用于在分布式系統(tǒng)中實現(xiàn)多文件副本讀寫的副本服務(wù)器,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機(jī)可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
接收對應(yīng)元數(shù)據(jù)服務(wù)器發(fā)送的文件副本建立請求;
根據(jù)所述文件副本建立請求建立對應(yīng)目標(biāo)文件的第二文件副本,其中,所述第二文件副本引用所述目標(biāo)文件的第一文件副本;
接收對應(yīng)用戶設(shè)備對所述第二文件副本的讀寫請求。
顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實施,例如,可采用專用集成電路(asic)、通用目的計算機(jī)或任何其他類似硬件設(shè)備來實現(xiàn)。在一個實施例中,本申請的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機(jī)可讀記錄介質(zhì)中,例如,ram存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
另外,本申請的一部分可被應(yīng)用為計算機(jī)程序產(chǎn)品,例如計算機(jī)程序指令,當(dāng)其被計算機(jī)執(zhí)行時,通過該計算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運行的計算機(jī)設(shè)備的工作存儲器中。在此,根據(jù)本申請的一個實施例包括一個裝置,該裝置包括用于存儲計算機(jī)程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計算機(jī)程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運行基于前述根據(jù)本申請的多個實施例的方法和/或技術(shù)方案。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實施例的細(xì)節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本申請。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。