本申請涉及計算機領(lǐng)域,尤其涉及一種用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的技術(shù)。
背景技術(shù):
隨著互聯(lián)網(wǎng)的普及,數(shù)據(jù)業(yè)務(wù)逐步增加,因此對分布式存儲系統(tǒng)的要求亦逐步提高,尤其是對文件寫入的吞吐量有一定的要求,在當前分布式存儲系統(tǒng)中,往往需要支持一個文件同時被多個進程度讀寫,即允許多個進程同時向一個文件寫入數(shù)據(jù),其數(shù)據(jù)的一致性即交給其中的一個數(shù)據(jù)設(shè)備管理端節(jié)點負責,例如微軟的azure系統(tǒng)即采用了這樣的措施。
然而,現(xiàn)有技術(shù)會因為每個文件只有一個對應(yīng)可以寫數(shù)據(jù)的數(shù)據(jù)塊使得吞吐量受限,同時當多個客戶端同時對一個文件進行寫入,若遇到寫入失敗時會導(dǎo)致寫入延時增長,降低系統(tǒng)的可用性,且遇到寫入失敗后會導(dǎo)致數(shù)據(jù)塊的長度小于期望值,而小數(shù)據(jù)塊的數(shù)量增加使得管理代價增大。
技術(shù)實現(xiàn)要素:
本申請的一個目的是提供一種用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法與設(shè)備,用以解決分布式存儲系統(tǒng)中單文件多進程寫入吞吐量低以及寫入失敗所致系統(tǒng)不穩(wěn)定的問題。
根據(jù)本申請的一個方面,本申請?zhí)峁┝艘环N在元數(shù)據(jù)管理設(shè)備端用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法,該方法解決了分布式存儲系統(tǒng)中單文件多進程寫入吞吐量低以及寫入失敗所致系統(tǒng)不穩(wěn)定的問題,該方法包括:
獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊;
將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N在用戶設(shè)備端用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法,該方法解決了分布式存儲系統(tǒng)中單文件多進程寫入吞吐量低以及寫入失敗所致系統(tǒng)不穩(wěn)定的問題,該方法包括:
向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊;
向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入。
根據(jù)本申請的另一個方面,本申請?zhí)峁┝艘环N在主數(shù)據(jù)管理設(shè)備端用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法,該方法解決了分布式存儲系統(tǒng)中單文件多進程寫入吞吐量低以及寫入失敗所致系統(tǒng)不穩(wěn)定的問題,該方法包括:
接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入;
若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求;
更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。
根據(jù)本申請的又一個方面,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的元數(shù)據(jù)管理設(shè)備,該設(shè)備解決了分布式存儲系統(tǒng)中單文件多進程寫入吞吐量低以及寫入失敗所致系統(tǒng)不穩(wěn)定的問題,該設(shè)備包括:
塊信息請求獲取裝置,用于獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
可寫數(shù)據(jù)塊確定裝置,用于根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊;
塊信息反饋裝置,用于將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備。
根據(jù)本申請的再一個方面,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的用戶設(shè)備,該設(shè)備解決了分布式存儲系統(tǒng)中單文件寫入吞吐量低下的問題,該設(shè)備包括:
塊信息請求發(fā)送裝置,用于向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
塊信息接受裝置,用于接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述目標文件對應(yīng)的多個可寫數(shù)據(jù)塊;
數(shù)據(jù)塊寫入請求發(fā)送裝置,用于向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入。
根據(jù)本申請的再一個方面,本申請?zhí)峁┝艘环N在主數(shù)據(jù)管理設(shè)備用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法,該方法解決了分布式存儲系統(tǒng)中單文件多進程寫入吞吐量低以及寫入失敗所致系統(tǒng)不穩(wěn)定的問題,該方法包括:
文件寫入執(zhí)行裝置,用于接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入;
寫入失敗處理裝置,用于若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求;
數(shù)據(jù)塊狀態(tài)更新裝置,用于更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。
根據(jù)本申請的再一個方面,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的元數(shù)據(jù)管理設(shè)備,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊;
將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備。
根據(jù)本申請的再一個方面,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的用戶設(shè)備,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊;
向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入。
根據(jù)本申請的再一個方面,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的主數(shù)據(jù)管理設(shè)備,其中,該設(shè)備包括:處理器;
以及被安排成存儲計算機可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入;
若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求;
更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。
根據(jù)本申請的再一方面,還提供了一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的系統(tǒng),解決了分布式存儲系統(tǒng)中單文件多進程寫入吞吐量低以及寫入失敗所致系統(tǒng)不穩(wěn)定的問題,其中,該系統(tǒng)包括如前所述根據(jù)本發(fā)明一個方面的一種用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的元數(shù)據(jù)管理設(shè)備,如前所述根據(jù)本發(fā)明另一個方面的一種用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的用戶設(shè)備,以及如前所述根據(jù)本發(fā)明另一個方面的一種用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的主數(shù)據(jù)管理設(shè)備。
與現(xiàn)有技術(shù)相比,本申請向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求,接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,并根據(jù)關(guān)于所述目標文件的寫入請求對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入,從而允許單個文件可對應(yīng)寫入多個數(shù)據(jù)塊,使得多個進程可同時對文件對應(yīng)的不同數(shù)據(jù)塊進行寫入從而使得寫入吞吐量增加,降低寫入熱點發(fā)生的概率。主數(shù)據(jù)管理設(shè)備在發(fā)生對數(shù)據(jù)塊執(zhí)行文件寫入失敗后,向用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求,并更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài),且用戶設(shè)備端在遇到寫入失敗后將不可寫數(shù)據(jù)塊直接刪除,選擇目標文件對應(yīng)的其它數(shù)據(jù)塊重新寫入,避免出現(xiàn)寫入失敗所致的寫入延時增長,減少小數(shù)據(jù)塊出現(xiàn)的概率,進而減輕用戶管理負擔。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
圖1示出根據(jù)本申請一個方面的元數(shù)據(jù)管理設(shè)備端、用戶設(shè)備端以及主數(shù)據(jù)管理設(shè)備端配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法流程圖;
圖2示出根據(jù)本申請一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法中的步驟s22流程圖;
圖3示出根據(jù)本申請一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法中的步驟s13流程圖;
圖4示出根據(jù)本申請另一個方面的元數(shù)據(jù)管理設(shè)備端、用戶設(shè)備端以及主數(shù)據(jù)管理設(shè)備端配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法中修改可寫塊數(shù)量閾值的流程圖;
圖5示出根據(jù)本申請另一個方面的元數(shù)據(jù)管理設(shè)備、用戶設(shè)備以及主數(shù)據(jù)管理設(shè)備配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備示意圖;
圖6示出根據(jù)本申請另一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中可寫數(shù)據(jù)塊確定裝置示意圖;
圖7示出根據(jù)本申請另一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中數(shù)據(jù)塊寫入請求發(fā)送裝置示意圖;
圖8示出根據(jù)本申請另一個方面的元數(shù)據(jù)管理設(shè)備以及用戶設(shè)備配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中實現(xiàn)修改可寫塊數(shù)量閾值功能的示意圖。
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實施方式
下面結(jié)合附圖對本申請作進一步詳細描述。
在本申請一個典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
圖1示出根據(jù)本申請一個方面的元數(shù)據(jù)管理設(shè)備端、用戶設(shè)備端以及主數(shù)據(jù)管理設(shè)備端配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法流程圖。其中,所述用戶設(shè)備端包括步驟s11、步驟s12、步驟s13;所述元數(shù)據(jù)管理設(shè)備包括步驟s21、步驟s22、步驟s23;所述主數(shù)據(jù)管理設(shè)備端包括步驟s31、步驟s32以及步驟s33。
其中,在步驟s11中用戶設(shè)備端向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;在步驟s21中元數(shù)據(jù)管理設(shè)備端獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;在步驟s22中元數(shù)據(jù)管理設(shè)備端根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊;在步驟s23中元數(shù)據(jù)管理設(shè)備端將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備;在步驟s12中用戶設(shè)備端接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊;在步驟s13中用戶設(shè)備端向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入;在步驟s31中主數(shù)據(jù)管理設(shè)備端接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入;在步驟s32中主數(shù)據(jù)管理設(shè)備端若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求;在步驟s33中主數(shù)據(jù)管理設(shè)備端更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。
具體地,在步驟s11中用戶設(shè)備端向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;在步驟s21中元數(shù)據(jù)管理設(shè)備端獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求。其中,所述用戶設(shè)備端是指分布式存儲系統(tǒng)中用于為用戶提供各種接口的端口模塊,以三端模式的分布式存儲系統(tǒng)為例,所述用戶設(shè)備端即為客戶端即client,下文這三種代稱均指代用戶設(shè)備端。所述元數(shù)據(jù)管理設(shè)備端是指分布式存儲系統(tǒng)中管理分布式存儲系統(tǒng)中元數(shù)據(jù)的模塊,以三端模式的分布式存儲系統(tǒng)為例,所述元數(shù)據(jù)管理設(shè)備端即為master也就是命名空間管理模塊。所述目標文件即為需要執(zhí)行寫入的文件,通常在分布式存儲系統(tǒng)中會預(yù)先創(chuàng)建好但不限于此,所有需要執(zhí)行寫入的文件均可成為目標文件。所述數(shù)據(jù)塊是指一段用戶邏輯數(shù)據(jù),以字節(jié)流的形式存儲,用于目標文件的數(shù)據(jù)寫入,以三端模式的分布式存儲系統(tǒng)為例,數(shù)據(jù)塊即為該系統(tǒng)中所稱的chunk。所述關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息是指可以用于執(zhí)行目標文件寫入的當前可寫的數(shù)據(jù)塊及其位置,數(shù)量等信息。所述提交和獲取請求的方法包括但不限于通過分布式存儲系統(tǒng)自有接口進行,以三端模式的分布式存儲系統(tǒng)為例,client客戶端啟動,在此因為是多進程同時對一個文件進行寫入,所以是多個客戶端均向master發(fā)送獲取目標文件f所有可以寫的chunk的信息的請求。通過上述動作,可以使得元數(shù)據(jù)管理設(shè)備端發(fā)起對目標文件可寫數(shù)據(jù)塊的塊信息的查找,從而使得文件寫入流程啟動。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述發(fā)送和獲取關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的發(fā)送和獲取關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟s22中元數(shù)據(jù)管理設(shè)備端根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊。即根據(jù)可寫塊數(shù)量閾值將與所述閾值比較的符合預(yù)置數(shù)目的目標文件可寫數(shù)據(jù)塊分配給所述用戶設(shè)備進行寫入,當若干用戶設(shè)備同時對目標文件進行寫入,所分配給用戶設(shè)備的可寫數(shù)據(jù)塊列表是一致的,例如,所述可寫塊數(shù)量閾值為m,則以三端模式的分布式存儲系統(tǒng)為例,元數(shù)據(jù)塊管理設(shè)備端master收到請求后在內(nèi)存中找到目標文件f所有可以寫的chunk的信息t和可以寫的chunk的數(shù)量m,若t大于或等于m則確定這t個可寫數(shù)據(jù)塊chunk為目標文件f所對應(yīng)的可寫數(shù)據(jù)塊。所述可寫塊數(shù)量閾值是指所設(shè)置的控制可寫數(shù)據(jù)塊數(shù)量的閾值,在此,塊即指代數(shù)據(jù)塊,此指代上下文均通用,所述可寫塊數(shù)量閾值可根據(jù)寫入吞吐量或速率的要求進行設(shè)置,本閾值的存在使得用戶不需要自己管理多路寫入的文件,只需要根據(jù)寫入的需求調(diào)整可寫數(shù)據(jù)塊的數(shù)量,此外,所述可寫塊數(shù)量閾值亦可以根據(jù)系統(tǒng)的要求設(shè)置系統(tǒng)自行調(diào)整,或進行初始設(shè)定。所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊是指每個寫入文件可以有一個以上的可寫數(shù)據(jù)塊,因此對其進行寫入的用戶設(shè)備也對應(yīng)多個可寫數(shù)據(jù)塊,在三端模式的分布式存儲系統(tǒng)中,現(xiàn)有技術(shù)僅支持每個目標文件在元數(shù)據(jù)塊管理設(shè)備端master有一個可寫數(shù)據(jù)塊,在本申請的實施例中可以通過對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置,使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊,從而能夠達到單文件寫入時支持多個數(shù)據(jù)塊同時寫入的目的,使得文件寫入不受限于單個機器的物理資源,進而提高單文件寫入的效率、降低寫入熱點的形成概率。
其中,在本申請的實施例中通過對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置的方法,以三端模式的分布式存儲系統(tǒng)為例,在元數(shù)據(jù)塊管理設(shè)備端master中設(shè)置如下:在面向用戶設(shè)備端client的服務(wù)和協(xié)議方面,對于獲取文件可寫數(shù)據(jù)塊chunk信息的服務(wù):擴展現(xiàn)有協(xié)議,增加對可寫的數(shù)據(jù)塊chunk有多個的支持;對于可寫數(shù)據(jù)塊chunk數(shù)量的服務(wù):增加設(shè)置文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議和服務(wù),增加獲取文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議和服務(wù)。在用戶設(shè)備端client中設(shè)置如下:在面向元數(shù)據(jù)塊管理設(shè)備端master協(xié)議方面:對于獲取文件可寫數(shù)據(jù)塊chunk信息的協(xié)議:擴展現(xiàn)有協(xié)議,增加對可寫的數(shù)據(jù)塊chunk有多個的支持;對于可寫數(shù)據(jù)塊chunk數(shù)量的接口:增加設(shè)置文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議,增加獲取文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議;在對于在面向用戶的接口方面:對于可寫數(shù)據(jù)塊chunk數(shù)量的接口:增加設(shè)置文件可寫數(shù)據(jù)塊chunk數(shù)量的接口,增加獲取文件可寫數(shù)據(jù)塊chunk數(shù)量的接口。以上設(shè)置使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊,從而能夠達到單文件寫入時支持多個數(shù)據(jù)塊同時寫入的目的,滿足用戶需求,同時在元數(shù)據(jù)塊管理設(shè)備端master只耗費了單個文件的內(nèi)存,沒有降低集群服務(wù)用戶的數(shù)量。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟s23中元數(shù)據(jù)管理設(shè)備端將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備;在步驟s12中用戶設(shè)備端接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊。即如上文所述確定所述目標文件對應(yīng)的多個可寫數(shù)據(jù)塊后將所述數(shù)據(jù)塊及其相關(guān)信息由元數(shù)據(jù)管理設(shè)備端返回至用戶設(shè)備端,所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊即返回的每個用戶設(shè)備所要寫入的申請目標文件所對應(yīng)的可寫數(shù)據(jù)塊,以三端模式的分布式存儲系統(tǒng)為例,接上文舉例,元數(shù)據(jù)管理設(shè)備端master將目標文件f所有可以寫的數(shù)據(jù)塊chunk的數(shù)量t及其相關(guān)信息從內(nèi)存中找到并進行反饋,反饋的方式包括但不限于通過分布式存儲系統(tǒng)自有接口進行。
其中,所述元數(shù)據(jù)管理設(shè)備端內(nèi)存中的所述目標文件對應(yīng)的可寫數(shù)據(jù)塊的數(shù)量以及相關(guān)信息的獲取方式包括但不限于在獲取每個在分布式存儲系統(tǒng)中文件后,元數(shù)據(jù)管理設(shè)備端即存儲其所有正在寫以及允許寫的數(shù)據(jù)塊信息,以三端模式的分布式存儲系統(tǒng)為例,元數(shù)據(jù)塊管理設(shè)備端master在文件的元數(shù)據(jù)存儲方面:負責存儲每個文件當前所有正在寫的數(shù)據(jù)塊chunk信息,例如數(shù)據(jù)塊的副本位置;負責存儲每個文件當前所允許的可寫數(shù)據(jù)塊chunk的數(shù)量。以上信息在元數(shù)據(jù)塊管理設(shè)備端master端都需要進行持久化的保存,宕機重啟后不會丟失,從而使得可以在用戶設(shè)備端需要目標文件是可以及時查找到。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述元數(shù)據(jù)管理設(shè)備端對每個文件數(shù)據(jù)塊存儲的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的元數(shù)據(jù)管理設(shè)備端對每個文件數(shù)據(jù)塊存儲的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟s13中用戶設(shè)備端向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入;在步驟s31中主數(shù)據(jù)管理設(shè)備端接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入。即因為所述目標文件有對應(yīng)的多個可寫數(shù)據(jù)塊,因此,在所述用戶設(shè)備端獲得所述可寫數(shù)據(jù)塊相關(guān)信息后將所述多個可寫數(shù)據(jù)塊進行排序,或按照默認順序依次在接受到目標文件的寫入請求后對應(yīng)的主數(shù)據(jù)管設(shè)備請求寫入。以三端模式的分布式存儲系統(tǒng)為例,用戶設(shè)備端client將所接到的目標文件f所有的對應(yīng)的可寫數(shù)據(jù)塊chunk之后,在按照默認或設(shè)置的順序?qū)δ骋籧hunk進行寫入時,尋找其相應(yīng)的數(shù)據(jù)塊服務(wù)器即chunksever進行相應(yīng)副本的寫入,其中,因為本實施例中是多進程寫入,因此,將寫入請求發(fā)往進行主導(dǎo)的主數(shù)據(jù)塊服務(wù)器即primarychunksever,進而主數(shù)據(jù)服務(wù)器在接受到寫入請求后,將所接受到的客戶端數(shù)據(jù)進行排序,在本地存儲數(shù)據(jù)的同時向從數(shù)據(jù)塊服務(wù)器即secondarychunksever進行轉(zhuǎn)發(fā),主從數(shù)據(jù)塊服務(wù)器的工作模式可以參考微軟azure中的底層分布式存儲系統(tǒng)中數(shù)據(jù)存儲節(jié)點的工作模式,主從數(shù)據(jù)塊服務(wù)器在收到寫入請求后即執(zhí)行對文件的寫入。在此,所舉例的數(shù)據(jù)塊服務(wù)器,以及chunksever均是指所述主數(shù)據(jù)管理設(shè)備或從數(shù)據(jù)管理設(shè)備,在上下文三種代稱通用。chunksever的信息的獲取方式包括但不限于由元數(shù)據(jù)管理設(shè)備端master記錄當前可寫chunk所在的所有chunkserver,這部分信息以緩存的形式存在,不需要持久化,宕機重啟后可以根據(jù)之前所記錄的信息恢復(fù)出來,也就是從所負責存儲的每個文件當前所有正在寫的數(shù)據(jù)塊chunk信息中進行恢復(fù);用戶設(shè)備端client存儲文件當前所有可寫的chunk信息,這部分信息以緩存的形式存在,不需要持久化,宕機重啟后從master端重新獲取。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述保存和獲取數(shù)據(jù)塊對應(yīng)數(shù)據(jù)塊服務(wù)器信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的保存和獲取數(shù)據(jù)塊對應(yīng)數(shù)據(jù)塊服務(wù)器信息的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,在步驟s32中主數(shù)據(jù)管理設(shè)備端若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求。其中,所述寫入失敗泛指造成寫失敗的場景,例如網(wǎng)絡(luò)延時高或網(wǎng)絡(luò)不通,以及磁盤延時高或無法寫入等。因為多個用戶設(shè)備同時對同一文件進行寫入操作,因此,當某一用戶設(shè)備對主數(shù)據(jù)管理設(shè)備發(fā)送寫入請求后,該主數(shù)據(jù)管理設(shè)備對數(shù)據(jù)塊寫入的過程中發(fā)生寫失敗的情況,則主數(shù)據(jù)管理設(shè)備反饋該用戶設(shè)備寫入失敗,同時拒絕所有用戶設(shè)備新發(fā)起的寫入請求,從而避免對寫失敗的數(shù)據(jù)塊再次發(fā)起寫入進而導(dǎo)致失敗。以三端模式的分布式存儲系統(tǒng)為例,即當primarychunkserver遇到failover的時候,一方面,對于已經(jīng)接受的請求,返回client失敗,拒絕所有client新發(fā)起的寫請求。
接著,在步驟s33中主數(shù)據(jù)管理設(shè)備端更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。即將當前寫失敗的數(shù)據(jù)塊設(shè)置為不可寫的狀態(tài),并將這一狀態(tài)反饋至元數(shù)據(jù)管理設(shè)備端,從而將其所存儲的所述數(shù)據(jù)塊進行更新,使得后續(xù)會導(dǎo)致寫入失敗的數(shù)據(jù)塊不會被再次寫入。以三端模式的分布式存儲系統(tǒng)為例,即primarychunkserver將寫入失敗的chunk狀態(tài)設(shè)置為不可寫,并持久化存儲,同時將該寫入失敗的chunk的狀態(tài)匯報給master,要求master進行持久化存儲。在此,數(shù)據(jù)塊不可寫的狀態(tài)的設(shè)置由主數(shù)據(jù)管理設(shè)備端和元數(shù)據(jù)管理設(shè)備端負責,避免了不必要的數(shù)據(jù)塊切換,降低了非全局寫入失敗場景下的寫延時的增長,提高了系統(tǒng)可用性。同時,因為避免了不必要的數(shù)據(jù)塊切換,減少了寫入不多即切換所產(chǎn)生的小數(shù)據(jù)塊的比例,提高了系統(tǒng)的服務(wù)規(guī)模。
優(yōu)選地,所述方法包括步驟s24(未示出),在步驟s24中元數(shù)據(jù)管理設(shè)備端接收對應(yīng)主數(shù)據(jù)管理設(shè)備發(fā)送的所述多個可寫數(shù)據(jù)塊之一的數(shù)據(jù)塊更新狀態(tài),其中,所述數(shù)據(jù)塊更新狀態(tài)為不可寫。即將上述主數(shù)據(jù)管理設(shè)備端發(fā)送的某個數(shù)據(jù)塊不可寫的狀態(tài)進行接收并在本地持久化存儲,例如,接上文舉例,master接收到primarychunkserver所匯報的某個數(shù)據(jù)塊被設(shè)置為不可寫的信息后,根據(jù)其要求對這一狀態(tài)進行本地持久化存儲,從而避免不可寫的數(shù)據(jù)塊再次被用戶設(shè)備端所獲取從而造成不必要的寫失敗。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述主數(shù)據(jù)管理設(shè)備端和元數(shù)據(jù)管理設(shè)備端處理寫失敗數(shù)據(jù)塊的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的主數(shù)據(jù)管理設(shè)備端和元數(shù)據(jù)管理設(shè)備端處理寫失敗數(shù)據(jù)塊的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述方法還包括步驟s14(未示出),在步驟s14中用戶設(shè)備端當所述多個可寫數(shù)據(jù)塊均為不可寫時,向所述元數(shù)據(jù)管理設(shè)備重新提交關(guān)于所述目標文件的可寫數(shù)據(jù)塊的塊信息請求。是指在對目標文件所對應(yīng)的數(shù)據(jù)塊進行寫入時,若遇到從元數(shù)據(jù)管理設(shè)備端所獲得的可寫數(shù)據(jù)塊均寫完或不可寫的情況,則需要向元數(shù)據(jù)管理設(shè)備重新提交獲取同樣目標文件的可寫數(shù)據(jù)及其相關(guān)信息的請求,此時,如前文中實施例所述,將之前的步驟重新進行一遍。以三端模式的分布式存儲系統(tǒng)為例,當client發(fā)現(xiàn)緩存中沒有可寫的chunk時,向master發(fā)送獲取文件f所有可以寫的chunk的信息的請求,重新分配獲取可寫chunk的數(shù)量,使得所述用戶設(shè)備端獲取目標文件所對應(yīng)的新的可寫數(shù)據(jù)塊,從而繼續(xù)進行文件的寫入。
優(yōu)選地,所述方法還包括步驟s15(未示出),在步驟s15中用戶設(shè)備端若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,將寫失敗對應(yīng)的所述目標文件對應(yīng)的數(shù)據(jù)塊信息刪除。其中,所述寫失敗的情況包括主數(shù)據(jù)管理設(shè)備對數(shù)據(jù)塊寫入所發(fā)生的失敗,也包括用戶設(shè)備端與主數(shù)據(jù)管理設(shè)備之間所發(fā)生的失敗情況,例如,兩者之間用于傳遞信息的網(wǎng)絡(luò)出現(xiàn)故障。在用戶設(shè)備端獲取到寫入失敗信息后,將這一數(shù)據(jù)塊信息直接進行刪除,進而直接在從元數(shù)據(jù)管理設(shè)備端所獲取的目標文件對應(yīng)的可寫數(shù)據(jù)塊中選擇另一個數(shù)據(jù)塊重新進行寫入。以三端模式的分布式存儲系統(tǒng)為例,當client遇到寫入失敗,將寫入失敗對應(yīng)的chunk信息從緩存中刪除,但不改變這個chunk的狀態(tài),進而從緩存中所有的當前可寫chunk中按順序選擇下一個chunk進行重試,從而避免了在,降低了非全局寫入失敗場景下的寫延時的增長。
圖2示出根據(jù)本申請一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法中的步驟s22流程圖。其中,所述步驟s22包括步驟s221、步驟s222、步驟s223。
其中,在步驟s221中元數(shù)據(jù)管理設(shè)備端確定所述目標文件對應(yīng)的所有可寫的數(shù)據(jù)塊;在步驟s222中元數(shù)據(jù)管理設(shè)備端若所述所有可寫的數(shù)據(jù)塊的數(shù)量等于或大于所述目標文件對應(yīng)的可寫塊數(shù)量閾值,則將所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊;否則,在步驟s223中元數(shù)據(jù)管理設(shè)備端為所述目標文件分配其他可寫的數(shù)據(jù)塊,并將所述其他可寫的數(shù)據(jù)塊及所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊的數(shù)量等于可寫塊數(shù)量閾值。
具體地,在步驟s221中元數(shù)據(jù)管理設(shè)備端確定所述目標文件對應(yīng)的所有可寫的數(shù)據(jù)塊。是指確定所述目標文件的所有可寫數(shù)據(jù)塊信息,獲取的方法包括如上文所述從所述元數(shù)據(jù)管理設(shè)備端所存儲的元數(shù)據(jù)信息中的每個文件當前所允許的可寫數(shù)據(jù)塊的數(shù)量,即以三端模式的分布式存儲系統(tǒng)為例,因為元數(shù)據(jù)塊管理設(shè)備端master在文件的元數(shù)據(jù)存儲方面:負責存儲每個文件當前所有正在寫的數(shù)據(jù)塊chunk信息,例如數(shù)據(jù)塊的副本位置;負責存儲每個文件當前所允許的可寫數(shù)據(jù)塊chunk的數(shù)量,因此可以從master端中找到目標文件f的所有可寫數(shù)據(jù)塊,假設(shè)所找到的目標文件f的所有可寫數(shù)據(jù)塊為t。
接著,在步驟s222中元數(shù)據(jù)管理設(shè)備端若所述所有可寫的數(shù)據(jù)塊的數(shù)量等于或大于所述目標文件對應(yīng)的可寫塊數(shù)量閾值,則將所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊。即將根據(jù)系統(tǒng)默認或用戶根據(jù)寫入要求所設(shè)置的可寫塊數(shù)量閾值與所獲得的目標文件的所有可寫數(shù)據(jù)塊數(shù)量進行比較,若所述目標文件的所有可寫數(shù)據(jù)塊數(shù)量不小于所述可寫塊數(shù)量閾值則將所述目標文件的所有可寫數(shù)據(jù)塊及其相關(guān)信息直接由元數(shù)據(jù)管理設(shè)備端反饋給用戶設(shè)備端,使之作為用戶設(shè)備需要寫入的所述目標文件對應(yīng)的可寫數(shù)據(jù)塊進行寫入。以三端模式的分布式存儲系統(tǒng)為例,如果當前目標文件f已有的chunk數(shù)量不小于可寫塊數(shù)量閾值m,則將這些chunk信息返回client。
接著,若所述所有可寫的數(shù)據(jù)塊的數(shù)量小于所述目標文件對應(yīng)的可寫塊數(shù)量閾值,在步驟s223中元數(shù)據(jù)管理設(shè)備端為所述目標文件分配其他可寫的數(shù)據(jù)塊,并將所述其他可寫的數(shù)據(jù)塊及所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊的數(shù)量等于可寫塊數(shù)量閾值。即將根據(jù)系統(tǒng)默認或用戶根據(jù)寫入要求所設(shè)置的可寫塊數(shù)量閾值與所獲得的目標文件的所有可寫數(shù)據(jù)塊數(shù)量進行比較,若所述目標文件的所有可寫數(shù)據(jù)塊數(shù)量小于所述可寫塊數(shù)量閾值,則重新由元數(shù)據(jù)管理設(shè)備端分配從所存儲或新被釋放的數(shù)據(jù)塊中分配差額數(shù)量的數(shù)據(jù)塊,使得所述目標文件的可寫數(shù)據(jù)塊數(shù)量與所述可寫塊數(shù)量閾值相等,進而發(fā)送給各用戶設(shè)備作為用戶設(shè)備對應(yīng)的若干可寫數(shù)據(jù)塊。以三端模式的分布式存儲系統(tǒng)為例,如果當前文件f已有的chunk數(shù)量小于可寫塊數(shù)量閾值m,則重新分配足夠數(shù)量的chunk,新分配的chunk數(shù)量加已有的chunk數(shù)量等于可寫塊數(shù)量閾值m,將所有chunk信息返回client。在此,每個由于單文件是多進程寫入,因此,每個client均保留一份完成的相對獨立的目標文件對應(yīng)的可寫chunk的信息,后期每個client各自維護各自緩存中的chunk信息,且每個之間的更新時間不同,隨著時間的推移會有些許差異。通過上述方式,可以通過可寫塊數(shù)量閾值控制,使得可寫數(shù)據(jù)塊維持在一定值,從而使得用戶不需要對文件寫入進行人工控制,減小用戶的管理成本。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述確定目標文件對應(yīng)可寫數(shù)據(jù)塊的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的目標文件對應(yīng)可寫數(shù)據(jù)塊的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述為所述目標文件分配其他可寫的數(shù)據(jù)塊包括:根據(jù)每個文件當前對應(yīng)的在寫數(shù)據(jù)塊及每個在寫數(shù)據(jù)塊對應(yīng)的塊服務(wù)器,為所述目標文件分配其他可寫的數(shù)據(jù)塊,其中,每個其他可寫的數(shù)據(jù)塊對應(yīng)的塊服務(wù)器與每個在寫數(shù)據(jù)塊對應(yīng)的塊服務(wù)器小于或等于預(yù)定的塊服務(wù)器重復(fù)閾值。即在分配新的可寫數(shù)據(jù)塊所對應(yīng)的數(shù)據(jù)塊服務(wù)器時,盡量避免其所分配的數(shù)據(jù)塊服務(wù)器是元數(shù)據(jù)管理設(shè)備端中已經(jīng)記錄的,從而減少數(shù)據(jù)塊服務(wù)器同時接受多個數(shù)據(jù)塊的寫入請求從而造成寫入熱點的情況。所述塊服務(wù)器是指chunksever,即數(shù)據(jù)管理模塊本文亦稱之為數(shù)據(jù)塊服務(wù)器或塊服務(wù)器,用于維護數(shù)據(jù)塊副本的模塊,提供數(shù)據(jù)塊副本的訪問的接口。所述塊服務(wù)器重復(fù)閾值是指允許塊服務(wù)器同時提供不同的數(shù)據(jù)塊進行寫入的數(shù)量,例如,所述塊服務(wù)器重復(fù)閾值為3,即每個塊服務(wù)器僅可對三個數(shù)據(jù)塊提供服務(wù)。對數(shù)據(jù)塊對應(yīng)的塊服務(wù)器的具體分配方式,以三端模式的分布式存儲系統(tǒng)為例,在元數(shù)據(jù)管理設(shè)備端對chunk位置的分配方面:記錄當前可寫chunk所在的所有chunkserver,這部分信息以緩存的形式存在,不需要持久化,宕機重啟后可以根據(jù)上面記錄的元數(shù)據(jù)信息恢復(fù)出來。分配新的chunk的時候,根據(jù)塊服務(wù)器重復(fù)閾值避免新分配的chunkserver與上述步驟記錄的chunkserver重復(fù)?;蛘哌@一步操作采用盡量而為的策略,當集群可寫的chunkserver數(shù)量太少,無法滿足不重復(fù)的要求的時候,也允許chunk的分配動作成功。文件內(nèi)部的數(shù)據(jù)分部信息可見,有效的避免多個chunk分布在相同的chunkserver上,消除熱點,保證了寫入吞吐量的實際效果。
圖3示出根據(jù)本申請一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法中的步驟s13流程圖。所述步驟s13包括步驟s131、步驟s132、步驟s133。
其中,在步驟s131中用戶設(shè)備端接收關(guān)于所述目標文件的寫入請求;在步驟s132中用戶設(shè)備端將所述寫入請求轉(zhuǎn)發(fā)至所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊對應(yīng)的主數(shù)據(jù)管理設(shè)備,以對所述當前第一個可寫數(shù)據(jù)塊對應(yīng)的一個或多個數(shù)據(jù)塊副本執(zhí)行文件寫入;在步驟s133中用戶設(shè)備端更新所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊。
具體地,在步驟s131中用戶設(shè)備端接收關(guān)于所述目標文件的寫入請求。即用戶設(shè)備端接受關(guān)于所述目標文件的寫入請求,因為所述目標文件可寫入的數(shù)據(jù)塊數(shù)量大于所述可寫塊數(shù)量閾值,因此支持用戶同時發(fā)起相應(yīng)數(shù)量的寫入請求。以三端模式的分布式存儲系統(tǒng)為例,支持用戶同時發(fā)起m個寫請求,m等于當前可寫chunk的數(shù)量。若干用戶設(shè)備端client同時接受若干關(guān)于單個文件的寫請求,使得單個文件的寫入速率提升,且多進程寫入過程中多個客戶端對同一個數(shù)據(jù)塊進行寫入,從而減小寫入失敗后重試所致的延時。
接著,在步驟s132中用戶設(shè)備端將所述寫入請求轉(zhuǎn)發(fā)至所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊對應(yīng)的主數(shù)據(jù)管理設(shè)備,以對所述當前第一個可寫數(shù)據(jù)塊對應(yīng)的一個或多個數(shù)據(jù)塊副本執(zhí)行文件寫入。即用戶設(shè)備端在接受到所述目標文件對應(yīng)的多個可寫數(shù)據(jù)塊后按照默認排序或依據(jù)一定的排序準則對所述可寫數(shù)據(jù)塊的主數(shù)據(jù)管理設(shè)備進行尋找,并傳達相應(yīng)的寫入請求,從而在數(shù)據(jù)塊及其副本上進行寫入。以三端模式的分布式存儲系統(tǒng)為例,client收到可寫chunk信息后按順序緩存,同時將下次可寫chunk的序號i設(shè)置為第一個可寫chunk的序號,client收到用戶的寫入請求,選取序號為i的chunk,將數(shù)據(jù)寫入請求發(fā)往這個chunk的所有primarychunkserver,同時將i序號修改為下一個可寫chunk的序號。
接著,在步驟s133中用戶設(shè)備端更新所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊。即用戶設(shè)備端按順序?qū)λ袑懭胝埱筮M行響應(yīng),即按順序?qū)λ鰯?shù)據(jù)塊執(zhí)行寫入,當所述數(shù)據(jù)塊排序所在的第一個可寫數(shù)據(jù)塊被執(zhí)行寫入后,將后續(xù)的所述可寫數(shù)據(jù)塊更新排序信息,例如上文舉例,client收到用戶的寫入請求,選取序號為i的chunk,將數(shù)據(jù)寫入請求發(fā)往這個chunk的所有primarychunkserver,同時將i序號修改為下一個可寫chunk的序號,即每當用戶發(fā)起寫請求的時候,根據(jù)序號i選擇相應(yīng)的chunk,同時將i指向下一個chunk,這樣以輪詢的方式訪問所有的chunk,避免某個chunk成為寫入的熱點。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述對可寫數(shù)據(jù)塊進行輪詢寫入的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的對可寫數(shù)據(jù)塊進行輪詢寫入的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,步驟s13還包括:步驟s134(未示出),在步驟s134中用戶設(shè)備端當接收到所述主數(shù)據(jù)管理設(shè)備返回的文件寫入成功信息,回收所述當前第一個可寫數(shù)據(jù)塊以接收關(guān)于所述目標文件的新寫入請求。是指在某個可寫數(shù)據(jù)塊及其副本進行寫入后,當主數(shù)據(jù)管理設(shè)備反饋寫入成功后,用戶設(shè)備端返回用戶該數(shù)據(jù)塊所對應(yīng)的寫入請求寫入成功,進而因為當前所述可寫數(shù)據(jù)塊沒有寫滿觸發(fā)重新分配可寫數(shù)據(jù)塊的情況,因此可重新接受用戶關(guān)于所述目標文件的寫入請求。以三端模式的分布式存儲系統(tǒng)為例,當某個chunk的對應(yīng)的primarychunkserver返回client成功的時候,client返回用戶成功,寫流程返回接收用戶新的請求的階段,從而充分利用可寫數(shù)據(jù)塊同時使得單文件的寫入保持在一定數(shù)量數(shù)據(jù)塊的同時寫入中,提升單文件寫入速率。
圖4示出根據(jù)本申請另一個方面的元數(shù)據(jù)管理設(shè)備端、用戶設(shè)備端以及主數(shù)據(jù)管理設(shè)備端配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的方法中修改可寫塊數(shù)量閾值的流程圖。為實現(xiàn)所述修改可寫塊數(shù)量閾值功能,所述用戶設(shè)備端包括步驟s16。所述元數(shù)據(jù)管理設(shè)備端包括步驟s25、步驟s26。
其中,在步驟s16中用戶設(shè)備端將用戶提交的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求發(fā)送至所述元數(shù)據(jù)管理設(shè)備,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值。在步驟s25中元主數(shù)據(jù)管理設(shè)備端接收所述用戶設(shè)備發(fā)送的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值;在步驟s26中元數(shù)據(jù)管理設(shè)備端根據(jù)所述新的可寫塊數(shù)量閾值更新所述可寫塊數(shù)量閾值。
具體地,在步驟s16中用戶設(shè)備端將用戶提交的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求發(fā)送至所述元數(shù)據(jù)管理設(shè)備,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值。接著,在步驟s25中元數(shù)據(jù)管理設(shè)備端接收所述用戶設(shè)備發(fā)送的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值;是指所述可寫塊數(shù)量閾值是可以根據(jù)用戶的寫入需求進行調(diào)整,將調(diào)整的具體數(shù)據(jù)和請求通過用戶設(shè)備端發(fā)送至元數(shù)據(jù)塊管理設(shè)備端即可。具體執(zhí)行中可比較當前可寫的數(shù)據(jù)塊數(shù)量與需要設(shè)置的所述可寫塊數(shù)量閾值是否相等,若相等則不進行修改,若不等,則將所述可寫塊數(shù)量閾值修改為所需的數(shù)值,但不限于此。以三端模式的分布式存儲系統(tǒng)為例,用戶根據(jù)寫入吞吐的要求,決定將可寫chunk的數(shù)量設(shè)置為m;用戶調(diào)用client接口,獲取當前可寫chunk的數(shù)量;client向master發(fā)起請求,獲取當前可寫chunk的數(shù)量;master收到client請求后在內(nèi)存中找到文件可寫chunk的數(shù)量n,將n返回client,cilent將當前可寫chunk數(shù)量n返回用戶;用戶根據(jù)n和m的值進行判斷,如果n==m,則無需修改;如果n!=m,則調(diào)用client接口,設(shè)置當前可寫chunk的數(shù)量為m;client向master發(fā)起請求,將可寫chunk數(shù)量設(shè)置為m。
接著,在步驟s26中元數(shù)據(jù)管理設(shè)備端根據(jù)所述新的可寫塊數(shù)量閾值更新所述可寫塊數(shù)量閾值。是指所述元數(shù)據(jù)塊管理設(shè)備端接受請求根據(jù)所述請求中的新的可寫塊數(shù)量閾值對歷史值進行更新或存儲。具體地,以三端模式的分布式存儲系統(tǒng)為例,master收到請求后將可寫chunk數(shù)量設(shè)置為m,同時將這個改動持久化。優(yōu)選地,可返回client改動成功;client返回用戶改動成功。通過以上方法為分布式文件系統(tǒng)添加了一種新的數(shù)據(jù)寫入方式,允許單個文件同時可以寫多個chunk,同時可寫chunk的個數(shù)支持動態(tài)調(diào)整,從而用戶不需要自己管理多路寫入的文件,只需要根據(jù)寫入的需求調(diào)整可寫數(shù)據(jù)塊的數(shù)量,節(jié)約用戶管理成本。
圖5示出根據(jù)本申請另一個方面的元數(shù)據(jù)管理設(shè)備、用戶設(shè)備以及主數(shù)據(jù)管理設(shè)備配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備示意圖。其中,所述用戶設(shè)備包括塊信息請求發(fā)送裝置111、塊信息接受裝置112、數(shù)據(jù)塊寫入執(zhí)行裝置113;所述元數(shù)據(jù)管理設(shè)備包括塊信息請求獲取裝置121、可寫數(shù)據(jù)塊確定裝置122、塊信息反饋裝置123;所述主數(shù)據(jù)管理設(shè)備端包括文件寫入執(zhí)行裝置131、寫入失敗處理裝置132以及數(shù)據(jù)塊狀態(tài)更新裝置133。
其中,塊信息請求發(fā)送裝置111向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;塊信息請求獲取裝置121獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;可寫數(shù)據(jù)塊確定裝置122根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊;塊信息反饋裝置123將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備;塊信息接受裝置112接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述目標文件對應(yīng)的多個可寫數(shù)據(jù)塊;數(shù)據(jù)塊寫入執(zhí)行裝置113向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入;文件寫入執(zhí)行裝置131接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入;寫入失敗處理裝置132若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求;數(shù)據(jù)塊狀態(tài)更新裝置133更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。
具體地,所述用戶設(shè)備中塊信息請求發(fā)送裝置111向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;所述元數(shù)據(jù)管理設(shè)備中塊信息請求獲取裝置121獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求。其中,所述用戶設(shè)備端是指分布式存儲系統(tǒng)中用于為用戶提供各種接口的端口模塊,以三端模式的分布式存儲系統(tǒng)為例,所述用戶設(shè)備端即為客戶端即client,下文這三種代稱均指代用戶設(shè)備端。所述元數(shù)據(jù)管理設(shè)備端是指分布式存儲系統(tǒng)中管理分布式存儲系統(tǒng)中元數(shù)據(jù)的模塊,以三端模式的分布式存儲系統(tǒng)為例,所述元數(shù)據(jù)管理設(shè)備端即為master也就是命名空間管理模塊。所述目標文件即為需要執(zhí)行寫入的文件,通常在分布式存儲系統(tǒng)中會預(yù)先創(chuàng)建好但不限于此,所有需要執(zhí)行寫入的文件均可成為目標文件。所述數(shù)據(jù)塊是指一段用戶邏輯數(shù)據(jù),以字節(jié)流的形式存儲,用于目標文件的數(shù)據(jù)寫入,以三端模式的分布式存儲系統(tǒng)為例,數(shù)據(jù)塊即為該系統(tǒng)中所稱的chunk。所述關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息是指可以用于執(zhí)行目標文件寫入的當前可寫的數(shù)據(jù)塊及其位置,數(shù)量等信息。所述提交和獲取請求的方法包括但不限于通過分布式存儲系統(tǒng)自有接口進行,以三端模式的分布式存儲系統(tǒng)為例,client客戶端啟動,在此因為是多進程同時對一個文件進行寫入,所以是多個客戶端均向master發(fā)送獲取目標文件f所有可以寫的chunk的信息的請求。通過上述動作,可以使得元數(shù)據(jù)管理設(shè)備端發(fā)起對目標文件可寫數(shù)據(jù)塊的塊信息的查找,從而使得文件寫入流程啟動。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述發(fā)送和獲取關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的發(fā)送和獲取關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,所述元數(shù)據(jù)管理設(shè)備中可寫數(shù)據(jù)塊確定裝置122根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊。即根據(jù)可寫塊數(shù)量閾值將與所述閾值比較的符合預(yù)置數(shù)目的目標文件可寫數(shù)據(jù)塊分配給所述用戶設(shè)備進行寫入,當若干用戶設(shè)備同時對目標文件進行寫入,所分配給用戶設(shè)備的可寫數(shù)據(jù)塊列表是一致的,例如,所述可寫塊數(shù)量閾值為m,則以三端模式的分布式存儲系統(tǒng)為例,元數(shù)據(jù)塊管理設(shè)備端master收到請求后在內(nèi)存中找到目標文件f所有可以寫的chunk的信息t和可以寫的chunk的數(shù)量m,若t大于或等于m則確定這t個可寫數(shù)據(jù)塊chunk為目標文件f所對應(yīng)的可寫數(shù)據(jù)塊。所述可寫塊數(shù)量閾值是指所設(shè)置的控制可寫數(shù)據(jù)塊數(shù)量的閾值,在此,塊即指代數(shù)據(jù)塊,此指代上下文均通用,所述可寫塊數(shù)量閾值可根據(jù)寫入吞吐量或速率的要求進行設(shè)置,本閾值的存在使得用戶不需要自己管理多路寫入的文件,只需要根據(jù)寫入的需求調(diào)整可寫數(shù)據(jù)塊的數(shù)量,此外,所述可寫塊數(shù)量閾值亦可以根據(jù)系統(tǒng)的要求設(shè)置系統(tǒng)自行調(diào)整,或進行初始設(shè)定。所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊是指每個寫入文件可以有一個以上的可寫數(shù)據(jù)塊,因此對其進行寫入的用戶設(shè)備也對應(yīng)多個可寫數(shù)據(jù)塊,在三端模式的分布式存儲系統(tǒng)中,現(xiàn)有技術(shù)僅支持每個目標文件在元數(shù)據(jù)塊管理設(shè)備端master有一個可寫數(shù)據(jù)塊,在本申請的實施例中可以通過對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置,使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊,從而能夠達到單文件寫入時支持多個數(shù)據(jù)塊同時寫入的目的,使得文件寫入不受限于單個機器的物理資源,進而提高單文件寫入的效率、降低寫入熱點的形成概率。
其中,在本申請的實施例中通過對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置的方法,以三端模式的分布式存儲系統(tǒng)為例,在元數(shù)據(jù)塊管理設(shè)備端master中設(shè)置如下:在面向用戶設(shè)備端client的服務(wù)和協(xié)議方面,對于獲取文件可寫數(shù)據(jù)塊chunk信息的服務(wù):擴展現(xiàn)有協(xié)議,增加對可寫的數(shù)據(jù)塊chunk有多個的支持;對于可寫數(shù)據(jù)塊chunk數(shù)量的服務(wù):增加設(shè)置文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議和服務(wù),增加獲取文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議和服務(wù)。在用戶設(shè)備端client中設(shè)置如下:在面向元數(shù)據(jù)塊管理設(shè)備端master協(xié)議方面:對于獲取文件可寫數(shù)據(jù)塊chunk信息的協(xié)議:擴展現(xiàn)有協(xié)議,增加對可寫的數(shù)據(jù)塊chunk有多個的支持;對于可寫數(shù)據(jù)塊chunk數(shù)量的接口:增加設(shè)置文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議,增加獲取文件可寫數(shù)據(jù)塊chunk數(shù)量的協(xié)議;在對于在面向用戶的接口方面:對于可寫數(shù)據(jù)塊chunk數(shù)量的接口:增加設(shè)置文件可寫數(shù)據(jù)塊chunk數(shù)量的接口,增加獲取文件可寫數(shù)據(jù)塊chunk數(shù)量的接口。以上設(shè)置使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊,從而能夠達到單文件寫入時支持多個數(shù)據(jù)塊同時寫入的目的,滿足用戶需求,同時在元數(shù)據(jù)塊管理設(shè)備端master只耗費了單個文件的內(nèi)存,沒有降低集群服務(wù)用戶的數(shù)量。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的對用戶設(shè)備端以及元數(shù)據(jù)管理設(shè)備端的接口間的協(xié)議進行設(shè)置使得每個目標文件在元數(shù)據(jù)塊管理設(shè)備端有多個可寫數(shù)據(jù)塊的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,所述元數(shù)據(jù)管理設(shè)備中塊信息反饋裝置123將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備;所述用戶設(shè)備中塊信息接受裝置112接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊。即如上文所述確定所述目標文件對應(yīng)的多個可寫數(shù)據(jù)塊后將所述數(shù)據(jù)塊及其相關(guān)信息由元數(shù)據(jù)管理設(shè)備端返回至用戶設(shè)備端,所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊即返回的每個用戶設(shè)備所要寫入的申請目標文件所對應(yīng)的可寫數(shù)據(jù)塊,以三端模式的分布式存儲系統(tǒng)為例,接上文舉例,元數(shù)據(jù)管理設(shè)備端master將目標文件f所有可以寫的數(shù)據(jù)塊chunk的數(shù)量t及其相關(guān)信息從內(nèi)存中找到并進行反饋,反饋的方式包括但不限于通過分布式存儲系統(tǒng)自有接口進行。
其中,所述元數(shù)據(jù)管理設(shè)備端內(nèi)存中的所述目標文件對應(yīng)的可寫數(shù)據(jù)塊的數(shù)量以及相關(guān)信息的獲取方式包括但不限于在獲取每個在分布式存儲系統(tǒng)中文件后,元數(shù)據(jù)管理設(shè)備端即存儲其所有正在寫以及允許寫的數(shù)據(jù)塊信息,以三端模式的分布式存儲系統(tǒng)為例,元數(shù)據(jù)塊管理設(shè)備端master在文件的元數(shù)據(jù)存儲方面:負責存儲每個文件當前所有正在寫的數(shù)據(jù)塊chunk信息,例如數(shù)據(jù)塊的副本位置;負責存儲每個文件當前所允許的可寫數(shù)據(jù)塊chunk的數(shù)量。以上信息在元數(shù)據(jù)塊管理設(shè)備端master端都需要進行持久化的保存,宕機重啟后不會丟失,從而使得可以在用戶設(shè)備端需要目標文件是可以及時查找到。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述元數(shù)據(jù)管理設(shè)備端對每個文件數(shù)據(jù)塊存儲的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的元數(shù)據(jù)管理設(shè)備端對每個文件數(shù)據(jù)塊存儲的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,所述用戶設(shè)備中數(shù)據(jù)塊寫入執(zhí)行裝置113向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入;所述主數(shù)據(jù)管理設(shè)備中文件寫入執(zhí)行裝置131接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入。即因為所述目標文件有對應(yīng)的多個可寫數(shù)據(jù)塊,因此,在所述用戶設(shè)備端獲得所述可寫數(shù)據(jù)塊相關(guān)信息后將所述多個可寫數(shù)據(jù)塊進行排序,或按照默認順序依次在接受到目標文件的寫入請求后對應(yīng)的主數(shù)據(jù)管設(shè)備請求寫入。以三端模式的分布式存儲系統(tǒng)為例,用戶設(shè)備端client將所接到的目標文件f所有的對應(yīng)的可寫數(shù)據(jù)塊chunk之后,在按照默認或設(shè)置的順序?qū)δ骋籧hunk進行寫入時,尋找其相應(yīng)的數(shù)據(jù)塊服務(wù)器即chunksever進行相應(yīng)副本的寫入,其中,因為本實施例中是多進程寫入,因此,將寫入請求發(fā)往進行主導(dǎo)的主數(shù)據(jù)塊服務(wù)器即primarychunksever,進而主數(shù)據(jù)服務(wù)器在接受到寫入請求后,將所接受到的客戶端數(shù)據(jù)進行排序,在本地存儲數(shù)據(jù)的同時向從數(shù)據(jù)塊服務(wù)器即secondarychunksever進行轉(zhuǎn)發(fā),主從數(shù)據(jù)塊服務(wù)器的工作模式可以參考微軟azure中的底層分布式存儲系統(tǒng)中數(shù)據(jù)存儲節(jié)點的工作模式,主從數(shù)據(jù)塊服務(wù)器在收到寫入請求后即執(zhí)行對文件的寫入。在此,所舉例的數(shù)據(jù)塊服務(wù)器,以及chunksever均是指所述主數(shù)據(jù)管理設(shè)備或從數(shù)據(jù)管理設(shè)備,在上下文三種代稱通用。chunksever的信息的獲取方式包括但不限于由元數(shù)據(jù)管理設(shè)備端master記錄當前可寫chunk所在的所有chunkserver,這部分信息以緩存的形式存在,不需要持久化,宕機重啟后可以根據(jù)之前所記錄的信息恢復(fù)出來,也就是從所負責存儲的每個文件當前所有正在寫的數(shù)據(jù)塊chunk信息中進行恢復(fù);用戶設(shè)備端client存儲文件當前所有可寫的chunk信息,這部分信息以緩存的形式存在,不需要持久化,宕機重啟后從master端重新獲取。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述保存和獲取數(shù)據(jù)塊對應(yīng)數(shù)據(jù)塊服務(wù)器信息的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的保存和獲取數(shù)據(jù)塊對應(yīng)數(shù)據(jù)塊服務(wù)器信息的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
接著,寫入失敗處理裝置132若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求。其中,所述寫入失敗泛指造成寫失敗的場景,例如網(wǎng)絡(luò)延時高或網(wǎng)絡(luò)不通,以及磁盤延時高或無法寫入等。因為多個用戶設(shè)備同時對同一文件進行寫入操作,因此,當某一用戶設(shè)備對主數(shù)據(jù)管理設(shè)備發(fā)送寫入請求后,該主數(shù)據(jù)管理設(shè)備對數(shù)據(jù)塊寫入的過程中發(fā)生寫失敗的情況,則主數(shù)據(jù)管理設(shè)備反饋該用戶設(shè)備寫入失敗,同時拒絕所有用戶設(shè)備新發(fā)起的寫入請求,從而避免對寫失敗的數(shù)據(jù)塊再次發(fā)起寫入進而導(dǎo)致失敗。以三端模式的分布式存儲系統(tǒng)為例,即當primarychunkserver遇到failover的時候,一方面,對于已經(jīng)接受的請求,返回client失敗,拒絕所有client新發(fā)起的寫請求。
接著,數(shù)據(jù)塊狀態(tài)更新裝置133更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。即將當前寫失敗的數(shù)據(jù)塊設(shè)置為不可寫的狀態(tài),并將這一狀態(tài)反饋至元數(shù)據(jù)管理設(shè)備端,從而將其所存儲的所述數(shù)據(jù)塊進行更新,使得后續(xù)會導(dǎo)致寫入失敗的數(shù)據(jù)塊不會被再次寫入。以三端模式的分布式存儲系統(tǒng)為例,即primarychunkserver將寫入失敗的chunk狀態(tài)設(shè)置為不可寫,并持久化存儲,同時將該寫入失敗的chunk的狀態(tài)匯報給master,要求master進行持久化存儲。在此,數(shù)據(jù)塊不可寫的狀態(tài)的設(shè)置由主數(shù)據(jù)管理設(shè)備端和元數(shù)據(jù)管理設(shè)備端負責,避免了不必要的數(shù)據(jù)塊切換,降低了非全局寫入失敗場景下的寫延時的增長,提高了系統(tǒng)可用性。同時,因為避免了不必要的數(shù)據(jù)塊切換,減少了寫入不多即切換所產(chǎn)生的小數(shù)據(jù)塊的比例,提高了系統(tǒng)的服務(wù)規(guī)模。
優(yōu)選地,所述設(shè)備包括數(shù)據(jù)塊狀態(tài)接受裝置124(未示出),所述元數(shù)據(jù)管理設(shè)備端中所述數(shù)據(jù)塊狀態(tài)接受裝置124接收對應(yīng)主數(shù)據(jù)管理設(shè)備發(fā)送的所述多個可寫數(shù)據(jù)塊之一的數(shù)據(jù)塊更新狀態(tài),其中,所述數(shù)據(jù)塊更新狀態(tài)為不可寫。即將上述主數(shù)據(jù)管理設(shè)備送的某個數(shù)據(jù)塊不可寫的狀態(tài)進行接收并在本地持久化存儲,例如,接上文舉例,master接收到primarychunkserver所匯報的某個數(shù)據(jù)塊被設(shè)置為不可寫的信息后,根據(jù)其要求對這一狀態(tài)進行本地持久化存儲,從而避免不可寫的數(shù)據(jù)塊再次被用戶設(shè)備端所獲取從而造成不必要的寫失敗。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述主數(shù)據(jù)管理設(shè)備端和元數(shù)據(jù)管理設(shè)備端處理寫失敗數(shù)據(jù)塊的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的主數(shù)據(jù)管理設(shè)備端和元數(shù)據(jù)管理設(shè)備端處理寫失敗數(shù)據(jù)塊的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述設(shè)備還包括數(shù)據(jù)塊寫盡處理裝置114(未示出),所述用戶設(shè)備中數(shù)據(jù)塊寫盡處理裝置114當所述多個可寫數(shù)據(jù)塊均為不可寫時,向所述元數(shù)據(jù)管理設(shè)備重新提交關(guān)于所述目標文件的可寫數(shù)據(jù)塊的塊信息請求。是指在對目標文件所對應(yīng)的數(shù)據(jù)塊進行寫入時,若遇到從元數(shù)據(jù)管理設(shè)備端所獲得的可寫數(shù)據(jù)塊均寫完或不可寫的情況,則需要向元數(shù)據(jù)管理設(shè)備重新提交獲取同樣目標文件的可寫數(shù)據(jù)及其相關(guān)信息的請求,此時,如前文中實施例所述,將之前的步驟重新進行一遍。以三端模式的分布式存儲系統(tǒng)為例,當client發(fā)現(xiàn)緩存中沒有可寫的chunk時,向master發(fā)送獲取文件f所有可以寫的chunk的信息的請求,重新分配獲取可寫chunk的數(shù)量,使得所述用戶設(shè)備端獲取目標文件所對應(yīng)的新的可寫數(shù)據(jù)塊,從而繼續(xù)進行文件的寫入。
優(yōu)選地,所述設(shè)備還包括寫入失敗刪除裝置115(未示出),所述用戶設(shè)備中寫入失敗刪除裝置115若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,將寫失敗對應(yīng)的所述目標文件對應(yīng)的數(shù)據(jù)塊信息刪除。其中,所述寫失敗的情況包括主數(shù)據(jù)管理設(shè)備對數(shù)據(jù)塊寫入所發(fā)生的失敗,也包括用戶設(shè)備端與主數(shù)據(jù)管理設(shè)備之間所發(fā)生的失敗情況,例如,兩者之間用于傳遞信息的網(wǎng)絡(luò)出現(xiàn)故障。在用戶設(shè)備端獲取到寫入失敗信息后,將這一數(shù)據(jù)塊信息直接進行刪除,進而直接在從元數(shù)據(jù)管理設(shè)備端所獲取的目標文件對應(yīng)的可寫數(shù)據(jù)塊中選擇另一個數(shù)據(jù)塊重新進行寫入。以三端模式的分布式存儲系統(tǒng)為例,當client遇到寫入失敗,將寫入失敗對應(yīng)的chunk信息從緩存中刪除,但不改變這個chunk的狀態(tài),進而從緩存中所有的當前可寫chunk中按順序選擇下一個chunk進行重試,從而避免了在,降低了非全局寫入失敗場景下的寫延時的增長。
圖6示出根據(jù)本申請另一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中可寫數(shù)據(jù)塊確定裝置示意圖。其中,所述可寫數(shù)據(jù)塊確定裝置122包括候選數(shù)據(jù)塊確定單元1221、直接反饋單元1222、重分配反饋單元1223。
其中,候選數(shù)據(jù)塊確定單元1221確定所述目標文件對應(yīng)的所有可寫的數(shù)據(jù)塊;直接反饋單元1222若所述所有可寫的數(shù)據(jù)塊的數(shù)量等于或大于所述目標文件對應(yīng)的可寫塊數(shù)量閾值,則將所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊;否則,重分配反饋單元1223為所述目標文件分配其他可寫的數(shù)據(jù)塊,并將所述其他可寫的數(shù)據(jù)塊及所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊的數(shù)量等于可寫塊數(shù)量閾值。
具體地,候選數(shù)據(jù)塊確定單元1221確定所述目標文件對應(yīng)的所有可寫的數(shù)據(jù)塊。是指確定所述目標文件的所有可寫數(shù)據(jù)塊信息,獲取的方法包括如上文所述從所述元數(shù)據(jù)管理設(shè)備端所存儲的元數(shù)據(jù)信息中的每個文件當前所允許的可寫數(shù)據(jù)塊的數(shù)量,即以三端模式的分布式存儲系統(tǒng)為例,因為元數(shù)據(jù)塊管理設(shè)備端master在文件的元數(shù)據(jù)存儲方面:負責存儲每個文件當前所有正在寫的數(shù)據(jù)塊chunk信息,例如數(shù)據(jù)塊的副本位置;負責存儲每個文件當前所允許的可寫數(shù)據(jù)塊chunk的數(shù)量,因此可以從master端中找到目標文件f的所有可寫數(shù)據(jù)塊,假設(shè)所找到的目標文件f的所有可寫數(shù)據(jù)塊為t。
接著,直接反饋單元1222若所述所有可寫的數(shù)據(jù)塊的數(shù)量等于或大于所述目標文件對應(yīng)的可寫塊數(shù)量閾值,則將所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊。即將根據(jù)系統(tǒng)默認或用戶根據(jù)寫入要求所設(shè)置的可寫塊數(shù)量閾值與所獲得的目標文件的所有可寫數(shù)據(jù)塊數(shù)量進行比較,若所述目標文件的所有可寫數(shù)據(jù)塊數(shù)量不小于所述可寫塊數(shù)量閾值則將所述目標文件的所有可寫數(shù)據(jù)塊及其相關(guān)信息直接由元數(shù)據(jù)管理設(shè)備端反饋給用戶設(shè)備端,使之作為用戶設(shè)備需要寫入的目標文件對應(yīng)的可寫數(shù)據(jù)塊進行寫入。以三端模式的分布式存儲系統(tǒng)為例,如果當前目標文件f已有的chunk數(shù)量不小于可寫塊數(shù)量閾值m,則將這些chunk信息返回client。
接著,若所述所有可寫的數(shù)據(jù)塊的數(shù)量小于所述目標文件對應(yīng)的可寫塊數(shù)量閾值,重分配反饋單元1223為所述目標文件分配其他可寫的數(shù)據(jù)塊,并將所述其他可寫的數(shù)據(jù)塊及所述所有可寫的數(shù)據(jù)塊作為所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊的數(shù)量等于可寫塊數(shù)量閾值。即將根據(jù)系統(tǒng)默認或用戶根據(jù)寫入要求所設(shè)置的可寫塊數(shù)量閾值與所獲得的目標文件的所有可寫數(shù)據(jù)塊數(shù)量進行比較,若所述目標文件的所有可寫數(shù)據(jù)塊數(shù)量小于所述可寫塊數(shù)量閾值,則重新由元數(shù)據(jù)管理設(shè)備端分配從所存儲或新被釋放的數(shù)據(jù)塊中分配差額數(shù)量的數(shù)據(jù)塊,使得所述目標文件的可寫數(shù)據(jù)塊數(shù)量與所述可寫塊數(shù)量閾值相等,進而發(fā)送給各用戶設(shè)備作為用戶設(shè)備對應(yīng)的若干可寫數(shù)據(jù)塊。以三端模式的分布式存儲系統(tǒng)為例,如果當前文件f已有的chunk數(shù)量小于可寫塊數(shù)量閾值m,則重新分配足夠數(shù)量的chunk,新分配的chunk數(shù)量加已有的chunk數(shù)量等于可寫塊數(shù)量閾值m,將所有chunk信息返回client。在此,每個由于單文件是多進程寫入,因此,每個client均保留一份完成的相對獨立的目標文件對應(yīng)的可寫chunk的信息,后期每個client各自維護各自緩存中的chunk信息,且每個之間的更新時間不同,隨著時間的推移會有些許差異。通過上述方式,可以通過可寫塊數(shù)量閾值控制,使得可寫數(shù)據(jù)塊維持在一定值,從而使得用戶不需要對文件寫入進行人工控制,減小用戶的管理成本。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述確定目標文件對應(yīng)可寫數(shù)據(jù)塊的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的目標文件對應(yīng)可寫數(shù)據(jù)塊的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述為所述目標文件分配其他可寫的數(shù)據(jù)塊包括:根據(jù)每個文件當前對應(yīng)的在寫數(shù)據(jù)塊及每個在寫數(shù)據(jù)塊對應(yīng)的塊服務(wù)器,為所述目標文件分配其他可寫的數(shù)據(jù)塊,其中,每個其他可寫的數(shù)據(jù)塊對應(yīng)的塊服務(wù)器與每個在寫數(shù)據(jù)塊對應(yīng)的塊服務(wù)器小于或等于預(yù)定的塊服務(wù)器重復(fù)閾值。即在分配新的可寫數(shù)據(jù)塊所對應(yīng)的數(shù)據(jù)塊服務(wù)器時,盡量避免其所分配的數(shù)據(jù)塊服務(wù)器是元數(shù)據(jù)管理設(shè)備端中已經(jīng)記錄的,從而減少數(shù)據(jù)塊服務(wù)器同時接受多個數(shù)據(jù)塊的寫入請求從而造成寫入熱點的情況。所述塊服務(wù)器是指chunksever,即數(shù)據(jù)管理模塊本文亦稱之為數(shù)據(jù)塊服務(wù)器或塊服務(wù)器,用于維護數(shù)據(jù)塊副本的模塊,提供數(shù)據(jù)塊副本的訪問的接口。所述塊服務(wù)器重復(fù)閾值是指允許塊服務(wù)器同時提供不同的數(shù)據(jù)塊進行寫入的數(shù)量,例如,所述塊服務(wù)器重復(fù)閾值為3,即每個塊服務(wù)器僅可對三個數(shù)據(jù)塊提供服務(wù)。對數(shù)據(jù)塊對應(yīng)的塊服務(wù)器的具體分配方式,以三端模式的分布式存儲系統(tǒng)為例,在元數(shù)據(jù)管理設(shè)備端對chunk位置的分配方面:記錄當前可寫chunk所在的所有chunkserver,這部分信息以緩存的形式存在,不需要持久化,宕機重啟后可以根據(jù)上面記錄的元數(shù)據(jù)信息恢復(fù)出來。分配新的chunk的時候,根據(jù)塊服務(wù)器重復(fù)閾值避免新分配的chunkserver與上述步驟記錄的chunkserver重復(fù)?;蛘哌@一步操作采用盡量而為的策略,當集群可寫的chunkserver數(shù)量太少,無法滿足不重復(fù)的要求的時候,也允許chunk的分配動作成功。文件內(nèi)部的數(shù)據(jù)分部信息可見,有效的避免多個chunk分布在相同的chunkserver上,消除熱點,保證了寫入吞吐量的實際效果。
圖7示出根據(jù)本申請另一個優(yōu)選實例的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中數(shù)據(jù)塊寫入請求發(fā)送裝置示意圖。所述數(shù)據(jù)塊寫入執(zhí)行裝置113包括寫入請求接受單元1131、數(shù)據(jù)塊寫入請求發(fā)送單元1132、數(shù)據(jù)塊更新單元1133。
其中,寫入請求接受單元1131接收關(guān)于所述目標文件的寫入請求;數(shù)據(jù)塊寫入請求發(fā)送單元1132將所述寫入請求轉(zhuǎn)發(fā)至所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊對應(yīng)的主數(shù)據(jù)管理設(shè)備,以對所述當前第一個可寫數(shù)據(jù)塊對應(yīng)的一個或多個數(shù)據(jù)塊副本執(zhí)行文件寫入;數(shù)據(jù)塊更新單元1133更新所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊。
具體地,寫入請求接受單元1131接收關(guān)于所述目標文件的寫入請求。即用戶設(shè)備端接受關(guān)于所述目標文件的寫入請求,因為所述目標文件可寫入的數(shù)據(jù)塊數(shù)量大于所述可寫塊數(shù)量閾值,因此支持用戶同時發(fā)起相應(yīng)數(shù)量的寫入請求。以三端模式的分布式存儲系統(tǒng)為例,支持用戶同時發(fā)起m個寫請求,m等于當前可寫chunk的數(shù)量。若干用戶設(shè)備端client同時接受若干關(guān)于單個文件的寫請求,使得單個文件的寫入速率提升,且多進程寫入過程中多個客戶端對同一個數(shù)據(jù)塊進行寫入,從而減小寫入失敗后重試所致的延時。
接著,數(shù)據(jù)塊寫入請求發(fā)送單元1132將所述寫入請求轉(zhuǎn)發(fā)至所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊對應(yīng)的主數(shù)據(jù)管理設(shè)備,以對所述當前第一個可寫數(shù)據(jù)塊對應(yīng)的一個或多個數(shù)據(jù)塊副本執(zhí)行文件寫入。即用戶設(shè)備端在接受到所述目標文件對應(yīng)的多個可寫數(shù)據(jù)塊后按照默認排序或依據(jù)一定的排序準則對所述可寫數(shù)據(jù)塊的主數(shù)據(jù)管理設(shè)備進行尋找,并傳達相應(yīng)的寫入請求,從而在數(shù)據(jù)塊及其副本上進行寫入。以三端模式的分布式存儲系統(tǒng)為例,client收到可寫chunk信息后按順序緩存,同時將下次可寫chunk的序號i設(shè)置為第一個可寫chunk的序號,client收到用戶的寫入請求,選取序號為i的chunk,將數(shù)據(jù)寫入請求發(fā)往這個chunk的所有primarychunkserver,同時將i序號修改為下一個可寫chunk的序號。
接著,數(shù)據(jù)塊更新單元1133更新所述多個可寫數(shù)據(jù)塊中當前第一個可寫數(shù)據(jù)塊。即用戶設(shè)備端按順序?qū)λ袑懭胝埱筮M行響應(yīng),即按順序?qū)λ鰯?shù)據(jù)塊執(zhí)行寫入,當所述數(shù)據(jù)塊排序所在的第一個可寫數(shù)據(jù)塊被執(zhí)行寫入后,將后續(xù)的所述可寫數(shù)據(jù)塊更新排序信息,例如上文舉例,client收到用戶的寫入請求,選取序號為i的chunk,將數(shù)據(jù)寫入請求發(fā)往這個chunk的所有primarychunkserver,同時將i序號修改為下一個可寫chunk的序號,即每當用戶發(fā)起寫請求的時候,根據(jù)序號i選擇相應(yīng)的chunk,同時將i指向下一個chunk,這樣以輪詢的方式訪問所有的chunk,避免某個chunk成為寫入的熱點。
本領(lǐng)域技術(shù)人員應(yīng)能理解上述對可寫數(shù)據(jù)塊進行輪詢寫入的方式僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的對可寫數(shù)據(jù)塊進行輪詢寫入的方式如可適用于本申請,也應(yīng)包含在本申請保護范圍以內(nèi),并在此以引用方式包含于此。
優(yōu)選地,所述數(shù)據(jù)塊寫入執(zhí)行裝置113還包括:新寫入請求接受單元1134(未示出),所述新寫入請求接受單元1134當接收到所述主數(shù)據(jù)管理設(shè)備返回的文件寫入成功信息,回收所述當前第一個可寫數(shù)據(jù)塊以接收關(guān)于所述目標文件的新寫入請求。是指在某個可寫數(shù)據(jù)塊及其副本進行寫入后,當主數(shù)據(jù)管理設(shè)備反饋寫入成功后,用戶設(shè)備端返回用戶該數(shù)據(jù)塊所對應(yīng)的寫入請求寫入成功,進而因為當前所述可寫數(shù)據(jù)塊沒有寫滿觸發(fā)重新分配可寫數(shù)據(jù)塊的情況,因此可重新接受用戶關(guān)于所述目標文件的寫入請求。以三端模式的分布式存儲系統(tǒng)為例,當某個chunk的對應(yīng)的primarychunkserver返回client成功的時候,client返回用戶成功,寫流程返回接收用戶新的請求的階段,從而充分利用可寫數(shù)據(jù)塊同時使得單文件的寫入保持在一定數(shù)量數(shù)據(jù)塊的同時寫入中,提升單文件寫入速率。
圖8示出根據(jù)本申請另一個方面的元數(shù)據(jù)管理設(shè)備以及用戶設(shè)備配合實現(xiàn)的一種實現(xiàn)在分布式存儲系統(tǒng)中執(zhí)行文件寫入的設(shè)備中實現(xiàn)修改可寫塊數(shù)量閾值功能的示意圖。為實現(xiàn)所述修改可寫塊數(shù)量閾值功能,所述用戶設(shè)備包括可寫塊數(shù)量閾值設(shè)置請求發(fā)送裝置116。所述元數(shù)據(jù)管理設(shè)備包括可寫塊數(shù)量閾值設(shè)置請求接受裝置125、可寫塊數(shù)量閾值更新裝置126。
其中,可寫塊數(shù)量閾值設(shè)置請求發(fā)送裝置116將用戶提交的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求發(fā)送至所述元數(shù)據(jù)管理設(shè)備,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值??蓪憠K數(shù)量閾值設(shè)置請求接受裝置125接收所述用戶設(shè)備發(fā)送的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值;可寫塊數(shù)量閾值更新裝置126根據(jù)所述新的可寫塊數(shù)量閾值更新所述可寫塊數(shù)量閾值。
具體地,可寫塊數(shù)量閾值設(shè)置請求發(fā)送裝置116將用戶提交的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求發(fā)送至所述元數(shù)據(jù)管理設(shè)備,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值。接著,可寫塊數(shù)量閾值設(shè)置請求接受裝置125接收所述用戶設(shè)備發(fā)送的關(guān)于所述目標文件的可寫塊數(shù)量閾值設(shè)置請求,其中,所述可寫塊數(shù)量閾值設(shè)置請求包括關(guān)于所述目標文件的新的可寫塊數(shù)量閾值;是指所述可寫塊數(shù)量閾值是可以根據(jù)用戶的寫入需求進行調(diào)整,將調(diào)整的具體數(shù)據(jù)和請求通過用戶設(shè)備端發(fā)送至元數(shù)據(jù)塊管理設(shè)備端即可。具體執(zhí)行中可比較當前可寫的數(shù)據(jù)塊數(shù)量與需要設(shè)置的所述可寫塊數(shù)量閾值是否相等,若相等則不進行修改,若不等,則將所述可寫塊數(shù)量閾值修改為所需的數(shù)值,但不限于此。以三端模式的分布式存儲系統(tǒng)為例,用戶根據(jù)寫入吞吐的要求,決定將可寫chunk的數(shù)量設(shè)置為m;用戶調(diào)用client接口,獲取當前可寫chunk的數(shù)量;client向master發(fā)起請求,獲取當前可寫chunk的數(shù)量;master收到client請求后在內(nèi)存中找到文件可寫chunk的數(shù)量n,將n返回client,cilent將當前可寫chunk數(shù)量n返回用戶;用戶根據(jù)n和m的值進行判斷,如果n==m,則無需修改;如果n?。絤,則調(diào)用client接口,設(shè)置當前可寫chunk的數(shù)量為m;client向master發(fā)起請求,將可寫chunk數(shù)量設(shè)置為m。
接著,可寫塊數(shù)量閾值更新裝置126根據(jù)所述新的可寫塊數(shù)量閾值更新所述可寫塊數(shù)量閾值。是指所述元數(shù)據(jù)塊管理設(shè)備端接受請求根據(jù)所述請求中的新的可寫塊數(shù)量閾值對歷史值進行更新或存儲。具體地,以三端模式的分布式存儲系統(tǒng)為例,master收到請求后將可寫chunk數(shù)量設(shè)置為m,同時將這個改動持久化。優(yōu)選地,可返回client改動成功;client返回用戶改動成功。通過以上方法為分布式文件系統(tǒng)添加了一種新的數(shù)據(jù)寫入方式,允許單個文件同時可以寫多個chunk,同時可寫chunk的個數(shù)支持動態(tài)調(diào)整,從而用戶不需要自己管理多路寫入的文件,只需要根據(jù)寫入的需求調(diào)整可寫數(shù)據(jù)塊的數(shù)量,節(jié)約用戶管理成本。
此外,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的元數(shù)據(jù)管理設(shè)備,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
獲取用戶設(shè)備提交的關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
根據(jù)所述目標文件對應(yīng)的可寫塊數(shù)量閾值確定所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊,其中,所述多個可寫數(shù)據(jù)塊包括已分配給所述目標文件的其他用戶設(shè)備的可寫數(shù)據(jù)塊或新分配的可寫數(shù)據(jù)塊;
將所述多個可寫數(shù)據(jù)塊返回至所述用戶設(shè)備。
此外,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的用戶設(shè)備,其中,該設(shè)備包括:
處理器;
以及被安排成存儲計算機可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
向元數(shù)據(jù)管理設(shè)備提交關(guān)于目標文件的可寫數(shù)據(jù)塊的塊信息請求;
接收所述元數(shù)據(jù)管理設(shè)備基于所述塊信息請求返回的、所述用戶設(shè)備對應(yīng)的多個可寫數(shù)據(jù)塊;
向?qū)?yīng)主數(shù)據(jù)管理設(shè)備發(fā)送關(guān)于所述目標文件的寫入請求以對所述多個可寫數(shù)據(jù)塊中之一執(zhí)行文件寫入。
此外,本申請?zhí)峁┝艘环N用于在分布式存儲系統(tǒng)中執(zhí)行文件寫入的主數(shù)據(jù)管理設(shè)備,其中,該設(shè)備包括:處理器;
以及被安排成存儲計算機可執(zhí)行指令的存儲器,所述可執(zhí)行指令在被執(zhí)行時使所述處理器:
接收用戶設(shè)備發(fā)送的對數(shù)據(jù)塊執(zhí)行文件寫入的請求,并執(zhí)行對所述數(shù)據(jù)塊的文件寫入;
若發(fā)生對所述數(shù)據(jù)塊執(zhí)行文件寫入的失敗,向所述用戶設(shè)備報告失敗信息,并拒絕與所述用戶設(shè)備對應(yīng)同一文件的其他用戶設(shè)備對所述數(shù)據(jù)塊執(zhí)行文件寫入的請求;
更新所述數(shù)據(jù)塊的狀態(tài)為不可寫,并向?qū)?yīng)元數(shù)據(jù)管理設(shè)備報告所述數(shù)據(jù)塊更新后的狀態(tài)。
顯然,本領(lǐng)域的技術(shù)人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
顯然,本領(lǐng)域的技術(shù)人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實施,例如,可采用專用集成電路(asic)、通用目的計算機或任何其他類似硬件設(shè)備來實現(xiàn)。在一個實施例中,本申請的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機可讀記錄介質(zhì)中,例如,ram存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
另外,本申請的一部分可被應(yīng)用為計算機程序產(chǎn)品,例如計算機程序指令,當其被計算機執(zhí)行時,通過該計算機的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運行的計算機設(shè)備的工作存儲器中。在此,根據(jù)本申請的一個實施例包括一個裝置,該裝置包括用于存儲計算機程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當該計算機程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運行基于前述根據(jù)本申請的多個實施例的方法和/或技術(shù)方案。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實施例的細節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本申請。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。