專利名稱:基于分布式文件系統(tǒng)的文件處理方法、系統(tǒng)及客戶端的制作方法
技術(shù)領(lǐng)域:
本申請涉及計算機存儲技術(shù)領(lǐng)域,特別是涉及一種基于分布式文件系統(tǒng)的文件處理方法、系統(tǒng)及客戶端。
背景技術(shù):
分布式文件系統(tǒng)(Distributed File System)是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機網(wǎng)絡(luò)與節(jié)點相連。分布式文件系統(tǒng)的設(shè)計基于客戶機/服務(wù)器模式。參見圖1A,為一種典型的分布式文件系統(tǒng)架構(gòu)示意圖,主要包括客戶端、元數(shù)據(jù)節(jié)點和數(shù)據(jù)存儲節(jié)點。其中,客戶端(Client)通常部署在業(yè)務(wù)應(yīng)用服務(wù)器上,業(yè)務(wù)應(yīng)用程序通過所在客戶端向分布式文件系統(tǒng)集群發(fā)送數(shù)據(jù)訪問請求;數(shù)據(jù)存儲節(jié) 點(chunk node)用于存放文件數(shù)據(jù),其中每個數(shù)據(jù)存儲節(jié)點上可能由若干存儲設(shè)備組成;分布式文件系統(tǒng)集群中的元數(shù)據(jù)節(jié)點(meta node)上保存了設(shè)備信息表和文件布局分配表,其中設(shè)備信息表中用于保存組成每個數(shù)據(jù)存儲節(jié)點的存儲設(shè)備的屬性信息,例如,存儲容量、可用容量等,文件布局分配表中保存了組成每個文件的每個數(shù)據(jù)塊所在的存儲設(shè)備,如圖IB所示,其中文件I由N個數(shù)據(jù)塊組成,以數(shù)據(jù)塊I為例,需要記錄該數(shù)據(jù)塊的數(shù)據(jù)塊id(標(biāo)識)、數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點的數(shù)據(jù)節(jié)點id和存儲設(shè)備id?,F(xiàn)有技術(shù),在進(jìn)行文件寫入操作時,元數(shù)據(jù)節(jié)點需要查找設(shè)備信息表中各個存儲設(shè)備的可用容量,以選擇合適的存儲設(shè)備,當(dāng)客戶端根據(jù)元數(shù)據(jù)節(jié)點選擇的存儲設(shè)備完成文件寫入后,將該文件的文件標(biāo)識,以及各個數(shù)據(jù)塊與所在存儲設(shè)備的對應(yīng)關(guān)系記錄到文件布局分配表中;在進(jìn)行文件讀取操作時,元數(shù)據(jù)節(jié)點根據(jù)文件標(biāo)識查找文件布局分配表,將獲取到的組成該文件的各個數(shù)據(jù)塊所在的位置信息返回給客戶端,由客戶端根據(jù)該位置信息到對應(yīng)的存儲設(shè)備上讀取文件數(shù)據(jù)。發(fā)明人在對現(xiàn)有技術(shù)的研究過程中發(fā)現(xiàn),現(xiàn)有技術(shù)要實現(xiàn)基于分布式文件系統(tǒng)的文件讀寫操作時,需要在元數(shù)據(jù)節(jié)點上通過文件布局分配表記錄每個文件的數(shù)據(jù)塊的存儲位置信息,當(dāng)分布式文件系統(tǒng)規(guī)模擴大時,文件數(shù)量將快速增長,相應(yīng)的文件布局分配表也相應(yīng)增大,因此增加了元數(shù)據(jù)節(jié)點為存儲文件布局分配表所占用的磁盤空間;并且,當(dāng)文件布局分配表增大時,對該文件布局分配表進(jìn)行1/0(輸入/輸出)操作的時間也將變長,由此降低了文件的讀寫性能。
發(fā)明內(nèi)容
本申請實施例提供了一種基于分布式文件系統(tǒng)的文件處理方法、系統(tǒng)及客戶端,以解決現(xiàn)有根據(jù)文件布局分配表進(jìn)行分布式文件的讀寫操作,導(dǎo)致占用磁盤存儲空間,文件讀寫性能不高的問題。為了解決上述技術(shù)問題,本申請實施例公開了如下技術(shù)方案—種基于分布式文件系統(tǒng)的文件處理方法,所述系統(tǒng)包括元數(shù)據(jù)節(jié)點、和與所述元數(shù)據(jù)節(jié)點分別通信的客戶端和數(shù)據(jù)存儲節(jié)點,每個數(shù)據(jù)存儲節(jié)點由至少一個存儲設(shè)備組成,客戶端內(nèi)保存基于虛擬節(jié)點的一致性哈希環(huán),其中每個存儲設(shè)備根據(jù)其存儲容量的大小對應(yīng)到所述一致性哈希環(huán)上的至少一個虛擬節(jié)點,每個虛擬節(jié)點保存所述虛擬節(jié)點所屬的存儲設(shè)備的設(shè)備標(biāo)識和使用狀態(tài),根據(jù)所述虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值,所述方法包括客戶端向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求;接收元數(shù)據(jù)節(jié)點根據(jù)所述文件寫入請求返回的為所述文件分配的文件標(biāo)識,以及組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子,所述選擇性因子初始化值為零;對于順序組成所述文件的每個數(shù)據(jù)塊,對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值;根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈 希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點;當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲。一種分布式文件系統(tǒng),包括元數(shù)據(jù)節(jié)點、和與所述元數(shù)據(jù)節(jié)點分別通信的客戶端和數(shù)據(jù)存儲節(jié)點,每個數(shù)據(jù)存儲節(jié)點由至少一個存儲設(shè)備組成,所述客戶端,用于保存基于虛擬節(jié)點的一致性哈希環(huán),其中每個存儲設(shè)備根據(jù)其存儲容量的大小對應(yīng)到所述一致性哈希環(huán)上的至少一個虛擬節(jié)點,每個虛擬節(jié)點保存所述虛擬節(jié)點所屬的存儲設(shè)備的設(shè)備標(biāo)識和使用狀態(tài),根據(jù)所述虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值;以及向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求;所述元數(shù)據(jù)節(jié)點,用于根據(jù)所述文件寫入請求向所述客戶端返回的為所述文件分配的文件標(biāo)識,以及組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子,所述選擇性因子初始化值為零;所述客戶端,還用于對于順序組成所述文件的每個數(shù)據(jù)塊,對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值;根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點;當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上;所述存儲設(shè)備,用于對所述客戶端發(fā)送的數(shù)據(jù)塊進(jìn)行保存。一種客戶端,應(yīng)用在分布式文件系統(tǒng)中,所述系統(tǒng)包括元數(shù)據(jù)節(jié)點,所述元數(shù)據(jù)節(jié)點分別與所述客戶端和數(shù)據(jù)存儲節(jié)點通信,每個數(shù)據(jù)節(jié)點由至少一個存儲設(shè)備組成,所述客戶端包括保存單元,用于保存基于虛擬節(jié)點的一致性哈希環(huán),其中每個存儲設(shè)備根據(jù)其存儲容量的大小對應(yīng)到所述一致性哈希環(huán)上的至少一個虛擬節(jié)點,每個虛擬節(jié)點保存所述虛擬節(jié)點所屬的存儲設(shè)備的設(shè)備標(biāo)識和使用狀態(tài),根據(jù)所述虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值;發(fā)送單元,用于向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求;
接收單元,用于接收元數(shù)據(jù)節(jié)點根據(jù)所述文件寫入請求返回的為所述文件分配的文件標(biāo)識,以及組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子,所述選擇性因子初始化值為零;運算單元,用于對于順序組成所述文件的每個數(shù)據(jù)塊,對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值;獲取單元,用于根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點;發(fā)送單元,還用于當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的 存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲。由上述實施例可以看出,本申請實施例中由客戶端向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求,接收元數(shù)據(jù)節(jié)點根據(jù)文件寫入請求返回的為該文件分配的文件標(biāo)識,以及組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及初始化值為零的選擇性因子,對于順序組成所述文件的每個數(shù)據(jù)塊,對文件的文件標(biāo)識、數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值,根據(jù)哈希值查找客戶端上保存的一致性哈希環(huán),獲取大于該哈希值的最小虛擬節(jié)點的值,從該虛擬節(jié)點開始在一致性哈希環(huán)上順時針選擇與副本數(shù)量一致的虛擬節(jié)點,當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到不同的存儲設(shè)備上進(jìn)行存儲。本申請實施例的分布式文件系統(tǒng)中,由于客戶端中保存了一致性哈希環(huán),因此在執(zhí)行寫入文件操作時,無需元數(shù)據(jù)節(jié)點預(yù)先通過文件布局分配表保存文件在各個存儲節(jié)點的存儲設(shè)備上的分布情況,將原本在元數(shù)據(jù)節(jié)點上執(zhí)行的文件分配和定位操作遷移到客戶端執(zhí)行,元數(shù)據(jù)節(jié)點只需要更新文件數(shù)據(jù)塊的選擇性因子,因此減少了對元數(shù)據(jù)節(jié)點存儲空間的占用;由于每個客戶端只需要在自身執(zhí)行寫入操作時根據(jù)一致性哈希環(huán)進(jìn)行存儲設(shè)備的定位,而不是由元數(shù)據(jù)節(jié)點對系統(tǒng)中的所有客戶端的寫入請求進(jìn)行定位,因此可以提高寫入數(shù)據(jù)時的定位速度;并且,通過對一致性哈希環(huán)上每個虛擬節(jié)點對應(yīng)的存儲設(shè)備的使用狀態(tài)進(jìn)行判斷從而自適應(yīng)進(jìn)行存儲設(shè)備的選擇,由此實現(xiàn)了根據(jù)磁盤的剩余容量使系統(tǒng)達(dá)到負(fù)載均衡。
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖IA為一種典型的分布式文件系統(tǒng)架構(gòu)示意圖;圖IB為現(xiàn)有技術(shù)中的文件布局分配表的結(jié)構(gòu)示意圖;圖2為本申請基于分布式文件系統(tǒng)的文件處理方法的第一實施例流程圖;圖3A為本申請基于分布式文件系統(tǒng)的文件處理方法的第二實施例流程圖;圖3B為本申請實施例中的存儲設(shè)備的鏈表示意圖;圖3C為本申請實施例中一致性哈希環(huán)的結(jié)構(gòu)示意圖;圖4為本申請基于分布式文件系統(tǒng)的文件處理方法的第三實施例流程圖;圖5為本申請基于分布式文件系統(tǒng)的文件處理方法的第四實施例流程圖6為本申請分布式文件系統(tǒng)的實施例框圖;圖7為本申請客戶端的實施例框圖。
具體實施例方式本發(fā)明如下實施例提供了一種基于分布式文件系統(tǒng)的式文件處理方法、系統(tǒng)及客戶端。為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明實施例中技術(shù)方案作進(jìn)一步詳細(xì)的說明。 本申請實施例中的分布式文件系統(tǒng)包括元數(shù)據(jù)節(jié)點,與元數(shù)據(jù)節(jié)點通信的若干客戶端,以及與元數(shù)據(jù)節(jié)點通信的若干數(shù)據(jù)存儲節(jié)點,其中每個數(shù)據(jù)存儲節(jié)點由至少一個存儲設(shè)備組成,每個存儲設(shè)備的存儲性能可能不同。參見圖2,為本申請基于分布式文件系統(tǒng)的文件處理方法的第一實施例流程圖步驟201 :客戶端內(nèi)保存基于虛擬節(jié)點的一致性哈希環(huán)。對于分布式文件系統(tǒng)中的數(shù)據(jù)存儲節(jié)點,其上的每個存儲設(shè)備根據(jù)其存儲容量的大小對應(yīng)到一致性哈希環(huán)上的至少一個虛擬節(jié)點,每個虛擬節(jié)點保存虛擬節(jié)點所屬的存儲設(shè)備的設(shè)備標(biāo)識和使用狀態(tài),根據(jù)虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值。進(jìn)一步,每兩個相鄰的虛擬節(jié)點不屬于同一個存儲設(shè)備,以便在寫入操作時,減少選擇到屬于同一存儲設(shè)備的虛擬節(jié)點的可能性。步驟202 :客戶端向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求。當(dāng)客戶端本地緩存內(nèi)的數(shù)據(jù)超過預(yù)設(shè)數(shù)量時,需要將這些數(shù)據(jù)以文件形式寫入數(shù)據(jù)存儲節(jié)點的存儲設(shè)備中,因此向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求。步驟203 :接收元數(shù)據(jù)節(jié)點根據(jù)文件寫入請求返回的為該文件分配的文件標(biāo)識,以及組成該文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子,選擇性因子初始化值為零。其中,為文件分配的文件標(biāo)識可以用File inode number表示;每個數(shù)據(jù)塊的標(biāo)識可以用stripe id表示,stripe id按照數(shù)據(jù)塊在文件中的順序進(jìn)行分配,在分布式文件系統(tǒng)中,文件一般按照預(yù)設(shè)大小進(jìn)行分塊;數(shù)據(jù)塊的副本數(shù)量可以用replication count表示,通常每個數(shù)據(jù)塊需要被保存多份,即副本數(shù)量,該副本數(shù)量可以由管理員進(jìn)行設(shè)定,通常同一數(shù)據(jù)塊的不同副本保存在不同節(jié)點的不同存儲設(shè)備上,以保證某個存儲設(shè)備故障時,不影響從其它存儲上讀取到該數(shù)據(jù)塊;選擇性因子用choice factor表示,其初始值為0,在對每個數(shù)據(jù)塊進(jìn)行哈希值計算時,可以根據(jù)需要進(jìn)行加一調(diào)整,以便在一致性哈希環(huán)上相應(yīng)的虛擬節(jié)點。步驟204 :對于順序組成該文件的每個數(shù)據(jù)塊,對該文件的文件標(biāo)識、數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值。步驟205 :根據(jù)哈希值查找一致性哈希環(huán),從一致性哈希環(huán)上獲取大于哈希值的最小虛擬節(jié)點的值,從該虛擬節(jié)點開始在一致性哈希環(huán)上順時針選擇與副本數(shù)量一致的虛擬節(jié)點。步驟206 :當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到不同的存儲設(shè)備上進(jìn)行存儲。進(jìn)一步,當(dāng)所述選擇的虛擬節(jié)點中的至少兩個虛擬節(jié)點屬于同一個數(shù)據(jù)存儲節(jié)點、或某個存儲設(shè)備的使用狀態(tài)不為可用狀態(tài),則可以將選擇性因子的值加一,然后返回步驟204,用當(dāng)前的選擇性因子的值計算哈希值,直至所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)。此時,客戶端可以將當(dāng)前的選擇性因子的值發(fā)送給元數(shù)據(jù)節(jié)點,由元數(shù)據(jù)節(jié)點將所記錄的數(shù)據(jù)塊的選擇性因子的值更新為該當(dāng)前的選擇性因子的值。參見圖3A,為本申請基于分布式文件系統(tǒng)的文件處理方法的第二實施例流程圖,該實施例示出了分布式文件系統(tǒng)中生成一致性哈希環(huán)的過程步驟301 :元數(shù)據(jù)節(jié)點中維護(hù)存儲設(shè)備的鏈表,該存儲設(shè)備的設(shè)備標(biāo)識按照加入 分布式文件系統(tǒng)的時間逆序添加到該鏈表中。在分布式文件系統(tǒng)中,包含了若干數(shù)據(jù)存儲節(jié)點,每個存儲節(jié)點上包含了若干的存儲設(shè)備,每個存儲設(shè)備分配有設(shè)備標(biāo)識,元數(shù)據(jù)節(jié)點中維護(hù)一個存儲設(shè)備的鏈表,該鏈表中記錄了所有存儲設(shè)備的設(shè)備的標(biāo)識,這些設(shè)備標(biāo)識按照設(shè)備加入系統(tǒng)的時間逆序添加到鏈表中,如圖3B所示,鏈表尾處是最先加入系統(tǒng)的存儲設(shè)備1,鏈表頭處是最新加入系統(tǒng)的存儲設(shè)備N。步驟302 :當(dāng)該分布式文件系統(tǒng)啟動時,以及啟動后每次達(dá)到預(yù)設(shè)時間間隔時,元數(shù)據(jù)節(jié)點接收該數(shù)據(jù)存儲節(jié)點上報的存儲狀態(tài)信息。在分布式文件系統(tǒng)初始啟動時,需要將系統(tǒng)中所有數(shù)據(jù)存儲節(jié)點的存儲設(shè)備的存儲狀態(tài)信息上報給元數(shù)據(jù)節(jié)點;當(dāng)系統(tǒng)啟動后,系統(tǒng)中存儲節(jié)點中的存儲設(shè)備的狀態(tài)可能發(fā)生變化,因此可以預(yù)先設(shè)置按照預(yù)設(shè)的時間間隔由數(shù)據(jù)存儲節(jié)點向元數(shù)據(jù)節(jié)點上報存儲設(shè)備的存儲狀態(tài)信息。其中,數(shù)據(jù)存儲節(jié)點上報的存儲狀態(tài)信息可以包括組成該存儲節(jié)點的每個存儲設(shè)備的設(shè)備標(biāo)識、設(shè)備容量、設(shè)備已用容量和可能性因子;其中,設(shè)備標(biāo)識用于唯一標(biāo)識系統(tǒng)中的一個存儲設(shè)備;設(shè)備容量表示該存儲設(shè)備的總存儲量大??;設(shè)備已用容量表示該存儲設(shè)備已用存儲量的大小,根據(jù)該已用容量可以確定存儲設(shè)備的使用狀態(tài),例如,如果已用容量占總存儲量的比例大于預(yù)設(shè)比例,則存儲設(shè)備的使用狀態(tài)為“已滿狀態(tài)”,如果小于預(yù)設(shè)比例,則使用狀態(tài)為“可用狀態(tài)”;可能性因子用于表示該存儲設(shè)備的性能,通常可以用O至I之間的數(shù)值表示,例如,高速存儲設(shè)備如固態(tài)硬盤等,其存儲性能較高,則可能性因子可以設(shè)置為“1”,低速存儲設(shè)備如SATA硬盤等,其存儲性能較低,則可能性因子可以設(shè)置為“O. 1”,在執(zhí)行寫入操作時,可以根據(jù)可能性因子選擇存儲性能較高的存儲設(shè)備,以提高寫入速度。步驟303 :元數(shù)據(jù)節(jié)點根據(jù)存儲狀態(tài)信息中存儲設(shè)備的設(shè)備標(biāo)識與鏈表中的設(shè)備標(biāo)識進(jìn)行比較。步驟304 :根據(jù)比較結(jié)果將新增加的存儲設(shè)備的設(shè)備標(biāo)識逆序添加到該鏈表中。當(dāng)分布式系統(tǒng)中新增加了存儲設(shè)備時,則可以按照其所在數(shù)據(jù)存儲節(jié)點的上報順序?qū)⑿略龅拇鎯υO(shè)備逆序添加到鏈表中。步驟305 :元數(shù)據(jù)節(jié)點遍歷該鏈表,根據(jù)鏈表中每個存儲設(shè)備的設(shè)備容量生成基于虛擬節(jié)點的一致性哈希環(huán),并為該一致性哈希環(huán)分配版本號。
其中,每個存儲設(shè)備根據(jù)其存儲容量大小對應(yīng)所述一致性哈希環(huán)上的至少一個虛擬節(jié)點,根據(jù)所述虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值。假設(shè)分布式文件系統(tǒng)中包含三個數(shù)據(jù)存儲節(jié)點,分別為N0deA、N0deB和NodeC,上述三個存儲節(jié)點中包含的存儲設(shè)備(Storage Device)和各個存儲設(shè)備的容量如下表I所示表I
權(quán)利要求
1.一種基于分布式文件系統(tǒng)的文件處理方法,所述系統(tǒng)包括元數(shù)據(jù)節(jié)點、和與所述元數(shù)據(jù)節(jié)點分別通信的客戶端和數(shù)據(jù)存儲節(jié)點,每個數(shù)據(jù)存儲節(jié)點由至少一個存儲設(shè)備組成,其特征在于,客戶端內(nèi)保存基于虛擬節(jié)點的一致性哈希環(huán),其中每個存儲設(shè)備根據(jù)其存儲容量的大小對應(yīng)到所述一致性哈希環(huán)上的至少一個虛擬節(jié)點,每個虛擬節(jié)點保存所述虛擬節(jié)點所屬的存儲設(shè)備的設(shè)備標(biāo)識和使用狀態(tài),根據(jù)所述虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值,所述方法包括 客戶端向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求; 接收元數(shù)據(jù)節(jié)點根據(jù)所述文件寫入請求返回的為所述文件分配的文件標(biāo)識,以及組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子,所述選擇性因子初始化值為零; 對于順序組成所述文件的每個數(shù)據(jù)塊,對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值; 根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點; 當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括 元數(shù)據(jù)節(jié)點中維護(hù)存儲設(shè)備的鏈表,所述存儲設(shè)備的設(shè)備標(biāo)識按照加入分布式文件系統(tǒng)的時間逆序添加到所述鏈表中; 當(dāng)所述分布式文件系統(tǒng)啟動時,以及啟動后每次達(dá)到預(yù)設(shè)時間間隔時,元數(shù)據(jù)節(jié)點接收所述數(shù)據(jù)存儲節(jié)點上報的存儲狀態(tài)信息,所述存儲狀態(tài)信息包括組成所述存儲節(jié)點的每個存儲設(shè)備的設(shè)備標(biāo)識、設(shè)備容量、設(shè)備已用容量和可能性因子; 元數(shù)據(jù)節(jié)點根據(jù)存儲狀態(tài)信息中存儲設(shè)備的設(shè)備標(biāo)識與鏈表中的設(shè)備標(biāo)識進(jìn)行比較,將新增加的存儲設(shè)備的設(shè)備標(biāo)識逆序添加到所述鏈表中; 元數(shù)據(jù)節(jié)點遍歷所述鏈表,并根據(jù)所述每個存儲設(shè)備的設(shè)備容量生成所述基于虛擬節(jié)點的一致性哈希環(huán),并為所述一致性哈希環(huán)分配版本號。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述客戶端向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求之前,還包括 客戶端向所述元數(shù)據(jù)節(jié)點發(fā)送當(dāng)前所保存的一致性哈希環(huán)的版本號; 所述元數(shù)據(jù)節(jié)點比較所述版本號與當(dāng)前已保存的版本號是否一致,當(dāng)不一致時,將與所述當(dāng)前已保存的版本號對應(yīng)的一致性哈希環(huán)和版本號發(fā)送到所述客戶端。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述每個虛擬節(jié)點還保存所述虛擬節(jié)點所屬的存儲設(shè)備的可能性因子; 當(dāng)所述選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,所述方法還包括 判斷所述存儲設(shè)備的可能性因子的隨機運算值是否為1,如果為I則執(zhí)行將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,還包括當(dāng)所述選擇的虛擬節(jié)點中的至少兩個虛擬節(jié)點屬于同一個數(shù)據(jù)存儲節(jié)點、或所述存儲設(shè)備的使用狀態(tài)不為可用狀態(tài)、或所述存儲設(shè)備的可能性因子的隨機運算值不為1,則將所述選擇性因子的值加一; 返回執(zhí)行對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值,直至所述選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài),且所述可能性因子的隨機運算值為I。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括 當(dāng)將所述數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲后,客戶端將當(dāng)前選擇性因子的值發(fā)送到所述元數(shù)據(jù)節(jié)點; 所述元數(shù)據(jù)節(jié)點將所述數(shù)據(jù)塊的選擇性因子的初始化值更新為所述當(dāng)前選擇性因子的值。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括 客戶端向所述元數(shù)據(jù)節(jié)點發(fā)送文件讀取請求,所述文件讀取請求中包含文件標(biāo)識;元數(shù)據(jù)節(jié)點根據(jù)所述文件標(biāo)識獲取組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子的值; 元數(shù)據(jù)節(jié)點將所述文件標(biāo)識、每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子發(fā)送給客戶端;對于順序組成所述文件的每個數(shù)據(jù)塊,客戶端根據(jù)所述文件標(biāo)識,每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子的值進(jìn)行哈希運算得到哈希值; 客戶端根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點; 客戶端根據(jù)查找到的虛擬節(jié)點,到其中一個虛擬節(jié)點對應(yīng)的存儲設(shè)備上讀取所述數(shù)據(jù)塊; 客戶端按照讀取的數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識將所有數(shù)據(jù)塊按照順序組成所述文件。
8.一種分布式文件系統(tǒng),包括元數(shù)據(jù)節(jié)點、和與所述元數(shù)據(jù)節(jié)點分別通信的客戶端和數(shù)據(jù)存儲節(jié)點,每個數(shù)據(jù)存儲節(jié)點由至少一個存儲設(shè)備組成,其特征在于, 所述客戶端,用于保存基于虛擬節(jié)點的一致性哈希環(huán),其中每個存儲設(shè)備根據(jù)其存儲容量的大小對應(yīng)到所述一致性哈希環(huán)上的至少一個虛擬節(jié)點,每個虛擬節(jié)點保存所述虛擬節(jié)點所屬的存儲設(shè)備的設(shè)備標(biāo)識和使用狀態(tài),根據(jù)所述虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值;以及向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求; 所述元數(shù)據(jù)節(jié)點,用于根據(jù)所述文件寫入請求向所述客戶端返回的為所述文件分配的文件標(biāo)識,以及組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子,所述選擇性因子初始化值為零; 所述客戶端,還用于對于順序組成所述文件的每個數(shù)據(jù)塊,對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值;根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點;當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上;所述存儲設(shè)備,用于對所述客戶端發(fā)送的數(shù)據(jù)塊進(jìn)行保存。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于, 所述元數(shù)據(jù)節(jié)點,還用于維護(hù)存儲設(shè)備的鏈表,所述存儲設(shè)備的設(shè)備標(biāo)識按照加入分布式文件系統(tǒng)的時間逆序添加到所述鏈表中; 所述數(shù)據(jù)存儲節(jié)點,用于當(dāng)所述分布式文件系統(tǒng)啟動時,以及啟動后每次達(dá)到預(yù)設(shè)時間間隔時,向所述元數(shù)據(jù)節(jié)點上報所述數(shù)據(jù)存儲節(jié)點的存儲狀態(tài)信息,所述存儲狀態(tài)信息包括組成所述存儲節(jié)點的每個存儲設(shè)備的設(shè)備標(biāo)識、設(shè)備容量、設(shè)備已用容量和可能性因子; 所述元數(shù)據(jù)節(jié)點,還用于根據(jù)存儲狀態(tài)信息中存儲設(shè)備的設(shè)備標(biāo)識與鏈表中的設(shè)備標(biāo)識進(jìn)行比較,將新增加的存儲設(shè)備的設(shè)備標(biāo)識逆序添加到所述鏈表中;遍歷所述鏈表,并根據(jù)所述每個存儲設(shè)備的設(shè)備容量生成所述基于虛擬節(jié)點的一致性哈希環(huán),并為所述一致性哈希環(huán)分配版本號;將所述一致性哈希環(huán)和所述版本號發(fā)送給所述客戶端。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于, 所述客戶端,還用于向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求之前,向所述元數(shù)據(jù)節(jié)點發(fā)送當(dāng)前所保存的一致性哈希環(huán)的版本號; 所述元數(shù)據(jù)節(jié)點,還用于比較所述版本號與當(dāng)前已保存的版本號是否一致,當(dāng)不一致時,將與所述當(dāng)前已保存的版本號對應(yīng)的一致性哈希環(huán)和版本號發(fā)送到所述客戶端。
11.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于, 所述客戶端,還用于當(dāng)每個虛擬節(jié)點還保存了所述虛擬節(jié)點所屬的存儲設(shè)備的可能性因子,則在當(dāng)所述選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,判斷所述存儲設(shè)備的可能性因子的隨機運算值是否為1,如果為I則執(zhí)行將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于, 所述客戶端,還用于當(dāng)所述選擇的虛擬節(jié)點中的至少兩個虛擬節(jié)點屬于同一個數(shù)據(jù)存儲節(jié)點、或所述存儲設(shè)備的使用狀態(tài)不為可用狀態(tài)、或所述存儲設(shè)備的可能性因子的隨機運算值不為1,則將所述選擇性因子的值加一;返回執(zhí)行對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值,直至所述選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài),且所述可能性因子的隨機運算值為I。
13.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于, 所述客戶端,還用于當(dāng)將所述數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲后,將當(dāng)前選擇性因子的值發(fā)送到所述元數(shù)據(jù)節(jié)點; 所述元數(shù)據(jù)節(jié)點,還用于將所述數(shù)據(jù)塊的選擇性因子的初始化值更新為所述當(dāng)前選擇性因子的值。
14.根據(jù)權(quán)利要求13所述的系統(tǒng),其特征在于, 所述客戶端,還用于向所述元數(shù)據(jù)節(jié)點發(fā)送文件讀取請求,所述文件讀取請求中包含文件標(biāo)識; 所述元數(shù)據(jù)節(jié)點,還用于根據(jù)所述文件標(biāo)識獲取組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子的值;將所述文件標(biāo)識、每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子發(fā)送給客戶端; 所述客戶端,還用于對于順序組成所述文件的每個數(shù)據(jù)塊,根據(jù)所述文件標(biāo)識,每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子的值進(jìn)行哈希運算得到哈希值;根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點;根據(jù)查找到的虛擬節(jié)點,到其中一個虛擬節(jié)點對應(yīng)的存儲設(shè)備上讀取所述數(shù)據(jù)塊;按照讀取的數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識將所有數(shù)據(jù)塊按照順序組成所述文件。
15.一種客戶端,應(yīng)用在分布式文件系統(tǒng)中,所述系統(tǒng)包括元數(shù)據(jù)節(jié)點,所述元數(shù)據(jù)節(jié)點分別與所述客戶端和數(shù)據(jù)存儲節(jié)點通信,每個數(shù)據(jù)節(jié)點由至少一個存儲設(shè)備組成,其特征在于,所述客戶端包括 保存單元,用于保存基于虛擬節(jié)點的一致性哈希環(huán),其中每個存儲設(shè)備根據(jù)其存儲容量的大小對應(yīng)到所述一致性哈希環(huán)上的至少一個虛擬節(jié)點,每個虛擬節(jié)點保存所述虛擬節(jié)點所屬的存儲設(shè)備的設(shè)備標(biāo)識和使用狀態(tài),根據(jù)所述虛擬節(jié)點的總數(shù)為每個虛擬節(jié)點分配虛擬節(jié)點的值; 發(fā)送單元,用于向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求; 接收單元,用于接收元數(shù)據(jù)節(jié)點根據(jù)所述文件寫入請求返回的為所述文件分配的文件標(biāo)識,以及組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子,所述選擇性因子初始化值為零; 運算單元,用于對于順序組成所述文件的每個數(shù)據(jù)塊,對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值; 獲取單元,用于根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點; 發(fā)送單元,還用于當(dāng)所選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲。
16.根據(jù)權(quán)利要求15所述的客戶端,其特征在于, 所述接收單元,還用于當(dāng)所述分布式文件系統(tǒng)啟動時,以及啟動后每次達(dá)到預(yù)設(shè)時間間隔時,接收所述元數(shù)據(jù)節(jié)點發(fā)送的一致性哈希環(huán)和所述一致性哈希環(huán)的版本號;其中,所述元數(shù)據(jù)節(jié)點用于維護(hù)存儲設(shè)備的的鏈表,所述存儲設(shè)備的設(shè)備標(biāo)識按照加入分布式文件系統(tǒng)的時間逆序添加到所述鏈表中,當(dāng)所述分布式文件系統(tǒng)啟動時,接收所述數(shù)據(jù)存儲節(jié)點上報的存儲狀態(tài)信息,所述存儲狀態(tài)信息包括組成所述存儲節(jié)點的每個存儲設(shè)備的設(shè)備標(biāo)識、設(shè)備容量、設(shè)備已用容量和可能性因子,根據(jù)存儲狀態(tài)信息中存儲設(shè)備的設(shè)備標(biāo)識與鏈表中的設(shè)備標(biāo)識進(jìn)行比較,將新增加的存儲設(shè)備的設(shè)備標(biāo)識逆序添加到所述鏈表中,遍歷所述鏈表,并根據(jù)所述每個存儲設(shè)備的設(shè)備容量生成所述基于虛擬節(jié)點的一致性哈希環(huán),并為所述一致性哈希環(huán)分配版本號; 所述發(fā)送單元,還用于向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求之前,向所述元數(shù)據(jù)節(jié)點發(fā)送當(dāng)前所保存的一致性哈希環(huán)的版本號; 所述接收單元,還用于在所述元數(shù)據(jù)節(jié)點比較所述版本號與當(dāng)前已保存的版本號不一致時,接收所述元數(shù)據(jù)節(jié)點發(fā)送的與所述當(dāng)前已保存的版本號對應(yīng)的一致性哈希環(huán)和版本號。
17.根據(jù)權(quán)利要求16所述的客戶端,其特征在于,還包括 判斷單元,用于當(dāng)所述每個虛擬節(jié)點還保存所述虛擬節(jié)點所屬的存儲設(shè)備的可能性因子,且當(dāng)所述選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述存儲設(shè)備的使用狀態(tài)為可用狀態(tài)時,判斷所述存儲設(shè)備的可能性因子的隨機運算值是否為I ; 所述發(fā)送單元,還用于當(dāng)所述判斷單元判斷所述隨機運算值為I時,將數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲。
18.根據(jù)權(quán)利要求17所述的客戶端,其特征在于, 所述運算單元,還用于當(dāng)所述選擇的虛擬節(jié)點中的至少兩個虛擬節(jié)點屬于同一個數(shù)據(jù)存儲節(jié)點、或所述存儲設(shè)備的使用狀態(tài)不為可用狀態(tài)、或所述存儲設(shè)備的可能性因子的隨機運算值不為1,則將所述選擇性因子的值加一,并返回執(zhí)行對所述文件的文件標(biāo)識、所述數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值,直至所述選擇的虛擬節(jié)點分別屬于不同的存儲設(shè)備,且所述不同的存儲設(shè)備的使用狀態(tài)為可用狀態(tài),且所述可能性因子的隨機運算值為I。
19.根據(jù)權(quán)利要求I所述的客戶端,其特征在于, 所述發(fā)送單元,還用于當(dāng)所述發(fā)送單元將所述數(shù)據(jù)塊發(fā)送到所述不同的存儲設(shè)備上進(jìn)行存儲后,將當(dāng)前選擇性因子的值發(fā)送到所述元數(shù)據(jù)節(jié)點,以使所述元數(shù)據(jù)節(jié)點將所述數(shù)據(jù)塊的選擇性因子的初始化值更新為所述當(dāng)前選擇性因子的值。
20.根據(jù)權(quán)利要求19所述的客戶端,其特征在于, 所述發(fā)送單元,還用于向所述元數(shù)據(jù)節(jié)點發(fā)送文件讀取請求,所述文件讀取請求中包含文件標(biāo)識; 所述接收單元,還用于接收所述元數(shù)據(jù)節(jié)點發(fā)送的根據(jù)所述文件標(biāo)識獲取的組成所述文件的每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子的值; 所述運算單元,還用于對于順序組成所述文件的每個數(shù)據(jù)塊,客戶端根據(jù)所述文件標(biāo)識,每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子的值進(jìn)行哈希運算得到哈希值; 所述獲取單元,還用于根據(jù)所述哈希值查找所述一致性哈希環(huán),從所述一致性哈希環(huán)上獲取大于所述哈希值的最小虛擬節(jié)點的值,從所述虛擬節(jié)點開始在所述一致性哈希環(huán)上順時針選擇與所述副本數(shù)量一致的虛擬節(jié)點; 所述客戶端還包括 讀取單元,根據(jù)查找到的虛擬節(jié)點,到其中一個虛擬節(jié)點對應(yīng)的存儲設(shè)備上讀取所述數(shù)據(jù)塊,并按照讀取的數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識將所有數(shù)據(jù)塊按照順序組成所述文件。
全文摘要
本申請公開了一種基于分布式文件系統(tǒng)的文件處理方法、系統(tǒng)及客戶端,該方法包括客戶端向元數(shù)據(jù)節(jié)點發(fā)送文件寫入請求;接收元數(shù)據(jù)節(jié)點返回的文件標(biāo)識,每個數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識、數(shù)據(jù)塊的副本數(shù)量以及選擇性因子;對文件的文件標(biāo)識、數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識和選擇性因子進(jìn)行哈希運算得到哈希值;根據(jù)哈希值查找一致性哈希環(huán),獲取大于該哈希值的最小虛擬節(jié)點的值,從該虛擬節(jié)點開始在一致性哈希環(huán)上順時針選擇與副本數(shù)量一致的虛擬節(jié)點;當(dāng)所選擇的虛擬節(jié)點滿足預(yù)設(shè)條件時,將數(shù)據(jù)塊發(fā)送到不同的存儲設(shè)備上進(jìn)行存儲。本申請減少了對元數(shù)據(jù)節(jié)點存儲空間的占用,可以提高寫入數(shù)據(jù)時的定位速度,實現(xiàn)了系統(tǒng)負(fù)載均衡。
文檔編號H04L29/06GK102843403SQ20111017221
公開日2012年12月26日 申請日期2011年6月23日 優(yōu)先權(quán)日2011年6月23日
發(fā)明者俞強華, 鄧明, 潘佳偉, 王本結(jié) 申請人:盛大計算機(上海)有限公司