分布式文件系統(tǒng)和實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式計算技術(shù)領(lǐng)域,特別涉及一種分布式文件系統(tǒng)和實現(xiàn)方法。
【背景技術(shù)】
[0002]隨著云計算的興起,分布式計算技術(shù)越來越受到重視;特別是海量數(shù)據(jù)的處理變成一種常態(tài)之后,對分布式文件系統(tǒng)和分布式計算模型的研究非?;钴S。在海量數(shù)據(jù)處理的問題上,如何存儲海量數(shù)據(jù)是最基本的問題;G00gle(谷歌)在2003年發(fā)表了《The GoogleFile System》論文,描述了 Google文件系統(tǒng)(Google File System, GFS)如何成功的解決了海量數(shù)據(jù)的存儲問題?;凇禩he Google File System》的思想,開源社區(qū)構(gòu)建了一個Hadoop DFS (即HDFS)。利用HDFS,可以像Google文件系統(tǒng)一樣存儲海量數(shù)據(jù),在這個數(shù)據(jù)爆炸性增長的時代,HDFS為各個企業(yè)特別是互聯(lián)網(wǎng)企業(yè)提供了一個高可靠、高可用的分布式文件系統(tǒng)。
[0003]雖然HDFS具有優(yōu)秀的伸縮性,但是在某些應(yīng)用領(lǐng)域HDFS單名字節(jié)點(diǎn)的設(shè)計使其伸縮性受到一定的制約。每個文件在名字節(jié)點(diǎn)中都有一個一百字節(jié)左右的名字信息數(shù)據(jù)與之關(guān)聯(lián)。名字節(jié)點(diǎn)通過管理這些名字信息數(shù)據(jù)來實現(xiàn)文件的管理。在存儲文本、圖片和音頻等幾十兆字節(jié)以下的小文件時,由于存儲的文件數(shù)量巨大,這樣名字節(jié)點(diǎn)需要大量的內(nèi)存來處理文件的名字信息數(shù)據(jù)。例如存儲1G( 10億)個文件,名字節(jié)點(diǎn)需要100B*1G=100GB的內(nèi)存;目前很多互聯(lián)網(wǎng)企業(yè)存儲的文件數(shù)量都超過了 10億這個數(shù)量級,若要提供100億個文件的存儲量,名字節(jié)點(diǎn)至少需要1000GB的內(nèi)存,目前幾乎沒有服務(wù)器能達(dá)到這個級別??梢娫谶@些應(yīng)用場景下,名字節(jié)點(diǎn)的內(nèi)存配置直接影響了分布式文件系統(tǒng)的伸縮性。
[0004]目前提高分布式文件系統(tǒng)名字節(jié)點(diǎn)伸縮性的主要思路是用水平伸縮的方法把名字信息數(shù)據(jù)分配到多臺服務(wù)器進(jìn)行管理。具體方法有:
[0005](I)把名字節(jié)點(diǎn)的名字信息數(shù)據(jù)交給一個分布式緩存系統(tǒng)進(jìn)行存儲,分布式緩存系統(tǒng)可以滿足名字節(jié)點(diǎn)在各種應(yīng)用下的內(nèi)存需求。這種方案的缺點(diǎn)是名字節(jié)點(diǎn)依然是系統(tǒng)的單點(diǎn),而且其負(fù)載能力制約了應(yīng)該規(guī)模的增長。
[0006](2)把名字信息數(shù)據(jù)從名字節(jié)點(diǎn)中剝離出來,交由名字信息服務(wù)器進(jìn)行存儲和管理,名字節(jié)點(diǎn)服務(wù)器只需做名字空間和權(quán)限的管理即可。與前一種方案相比,這種方案不單只提高了名字節(jié)點(diǎn)的伸縮性,還提高了系統(tǒng)的負(fù)載能力;但是,與前一方案一樣,名字節(jié)點(diǎn)依然是系統(tǒng)的單點(diǎn),系統(tǒng)的可用性受到影響。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的發(fā)明人發(fā)現(xiàn)上述現(xiàn)有技術(shù)中存在問題,并因此針對所述問題中的至少一個問題提出了一種新的技術(shù)方案。
[0008]本發(fā)明的一個目的是提供一種用于分布式文件系統(tǒng)的技術(shù)方案。
[0009]根據(jù)本發(fā)明的第一方面,提供了一種分布式文件系統(tǒng),包括多個名字節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn);
[0010]名字節(jié)點(diǎn),用于存儲其他名字節(jié)點(diǎn)信息,負(fù)責(zé)數(shù)據(jù)節(jié)點(diǎn)的接入和數(shù)據(jù)節(jié)點(diǎn)的元數(shù)據(jù)的存儲、訪問;接收來自數(shù)據(jù)節(jié)點(diǎn)的加入請求,向數(shù)據(jù)節(jié)點(diǎn)返回接受或拒絕結(jié)果,存儲加入的數(shù)據(jù)節(jié)點(diǎn)的元數(shù)據(jù);
[0011]數(shù)字節(jié)點(diǎn),用于基于自組織能力從多個名字節(jié)點(diǎn)中選擇候選名字節(jié)點(diǎn),向候選名字節(jié)點(diǎn)發(fā)送加入請求;接收來自候選名字節(jié)點(diǎn)的接受或者拒絕結(jié)果,從接受的候選名字節(jié)點(diǎn)中確定主名字節(jié)點(diǎn)和備用名字節(jié)點(diǎn),主名字節(jié)點(diǎn)和備用名字節(jié)點(diǎn)具備相互切換的能力。
[0012]可選地,每個名字節(jié)點(diǎn)存儲其他臨近名字節(jié)點(diǎn)的信息。
[0013]可選地,系統(tǒng)還包括至少I個全局名字節(jié)點(diǎn),全局名字節(jié)點(diǎn)存儲所有名字節(jié)點(diǎn)的信息;每個名字節(jié)點(diǎn)至少存儲I個全局名字節(jié)點(diǎn)信息。
[0014]可選地,名字節(jié)點(diǎn)用于接收文件讀取請求,根據(jù)文件屬性在本地存儲的數(shù)據(jù)節(jié)點(diǎn)的元數(shù)據(jù)中進(jìn)行檢索,如果未能檢索到文件,則向本地存儲的名字節(jié)點(diǎn)泛洪文件讀取請求。
[0015]可選地,數(shù)據(jù)節(jié)點(diǎn)通過地址匹配自主選擇候選名字節(jié)點(diǎn),向候選名字節(jié)點(diǎn)發(fā)送加入請求;候選名字節(jié)點(diǎn)接收來自數(shù)字節(jié)點(diǎn)的加入請求,基于自身負(fù)載情況向數(shù)字節(jié)點(diǎn)返回接受或拒絕結(jié)果。
[0016]可選地,加入請求中還包括拒絕次數(shù);候選名字節(jié)點(diǎn)確定拒絕次數(shù)大于閾值,則接受數(shù)字節(jié)點(diǎn)的加入請求。
[0017]可選地,數(shù)據(jù)節(jié)點(diǎn)還用于將備用名字節(jié)點(diǎn)的地址信息發(fā)給主名字節(jié)點(diǎn);
[0018]主名字節(jié)點(diǎn)和備用名字節(jié)點(diǎn)進(jìn)行通信,并都把雙方的地址信息和信任關(guān)系保存在本地,形成一個名字節(jié)點(diǎn)的拓?fù)浔怼?br>[0019]根據(jù)本發(fā)明的另一方面,提供一種分布式文件系統(tǒng)實現(xiàn)方法,系統(tǒng)包括多個名字節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其中,名字節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)節(jié)點(diǎn)的接入和數(shù)據(jù)節(jié)點(diǎn)的元數(shù)據(jù)的存儲、訪問,并存儲其他名字節(jié)點(diǎn)信息;
[0020]方法包括:
[0021]數(shù)字節(jié)點(diǎn)基于自組織能力從多個名字節(jié)點(diǎn)中選擇候選名字節(jié)點(diǎn),向候選名字節(jié)點(diǎn)發(fā)送加入請求;
[0022]候選名字節(jié)點(diǎn)接收來自數(shù)據(jù)節(jié)點(diǎn)的加入請求,向數(shù)據(jù)節(jié)點(diǎn)返回接受或拒絕結(jié)果,存儲接受加入的數(shù)據(jù)節(jié)點(diǎn)的元數(shù)據(jù);
[0023]數(shù)據(jù)節(jié)點(diǎn)接收來自候選名字節(jié)點(diǎn)的接受或者拒絕結(jié)果,從接受的候選名字節(jié)點(diǎn)中確定主名字節(jié)點(diǎn)和備用名字節(jié)點(diǎn),主名字節(jié)點(diǎn)和備用名字節(jié)點(diǎn)具備相互切換的能力。
[0024]可選地,每個名字節(jié)點(diǎn)存儲其他臨近名字節(jié)點(diǎn)的信息。
[0025]可選地,每個名字節(jié)點(diǎn)至少存儲I個全局名字節(jié)點(diǎn)信息,其中,全局名字節(jié)點(diǎn)存儲所有名字節(jié)點(diǎn)的信息;。
[0026]可選地,該方法還包括:名字節(jié)點(diǎn)接收文件讀取請求,根據(jù)文件屬性在本地存儲的數(shù)據(jù)節(jié)點(diǎn)的元數(shù)據(jù)中進(jìn)行檢索,如果檢索到文件,則返回檢索到的文件;如果未能檢索到文件,則向本地存儲的名字節(jié)點(diǎn)泛洪文件讀取請求。
[0027]可選地,數(shù)字節(jié)點(diǎn)基于自組織能力從多個名字節(jié)點(diǎn)中選擇候選名字節(jié)點(diǎn)包括:數(shù)據(jù)節(jié)點(diǎn)通過地址匹配選擇匹配度高的名字節(jié)點(diǎn)為候選名字節(jié)點(diǎn);候選名字節(jié)點(diǎn)接收來自數(shù)據(jù)節(jié)點(diǎn)的加入請求、向數(shù)據(jù)節(jié)點(diǎn)返回接受或拒絕結(jié)果包括:候選名字節(jié)點(diǎn)接收來自數(shù)字節(jié)點(diǎn)的加入請求,基于自身負(fù)載情況向數(shù)字節(jié)點(diǎn)返回接受或拒絕結(jié)果。
[0028]可選地,加入請求中還包括拒絕次數(shù);方法還包括:候選名字節(jié)點(diǎn)確定拒絕次數(shù)大于閾值,則接受數(shù)字節(jié)點(diǎn)的加入請求。
[0029]可選地,該方法還包括:數(shù)據(jù)節(jié)點(diǎn)將備用名字節(jié)點(diǎn)的地址信息發(fā)給主名字節(jié)點(diǎn);主名字節(jié)點(diǎn)和備用名字節(jié)點(diǎn)進(jìn)行通信,并都把雙方的地址信息和信任關(guān)系保存在本地,形成一個名字節(jié)點(diǎn)的拓?fù)浔怼?br>[0030]本發(fā)明的一個優(yōu)點(diǎn)在于,分布式文件系統(tǒng)中包括多個名字節(jié)點(diǎn),名字節(jié)點(diǎn)和數(shù)字節(jié)點(diǎn)間實現(xiàn)自組織機(jī)制實現(xiàn)組織和管理,提高了分布式文件系統(tǒng)的魯棒性和伸縮性。
[0031]通過以下參照附圖對本發(fā)明的示例性實施例的詳細(xì)描述,本發(fā)明的其它特征及其優(yōu)點(diǎn)將會變得清楚。
【附圖說明】
[0032]構(gòu)成說明書的一部分的附圖描述了本發(fā)明的實施例,并且連同說明書一起用于解釋本發(fā)明的原理。
[0033]參照附圖,根據(jù)下面的詳細(xì)描述,可以更加清楚地理解本發(fā)明,其中:
[0034]圖1示出根據(jù)本發(fā)明的分布式文件系統(tǒng)的一個實施例的結(jié)構(gòu)圖;
[0035]圖2示出根據(jù)本發(fā)明的分布式文件系統(tǒng)實現(xiàn)方法的一個實施例的流程圖;
[0036]圖3示出一個實施例中主名字節(jié)點(diǎn)故障后切換的示意圖;
[0037]圖4示出一個實施例中備用名字節(jié)點(diǎn)故障后切換的示意圖。
【具體實施方式】
[0038]現(xiàn)在將參照附圖來詳細(xì)描述本發(fā)明的各種示例性實施例。應(yīng)注意到:除非另外具體說明,否則在這些實施例中闡述的部件和步驟的相對布置、數(shù)字表達(dá)式和數(shù)值不限制本發(fā)明的范圍。
[0039]同時,應(yīng)當(dāng)明白,為了便于描述,附圖中所示出的各個部分的尺寸并不是按照實際的比例關(guān)系繪制的。
[0040]以下對至少一個示例性實施例的描述實際上僅僅是說明性的,決不作為對本發(fā)明及其應(yīng)用或使用的任何限制。
[0041]對于相關(guān)領(lǐng)域普通技術(shù)人員已知的技術(shù)、方法和設(shè)備可能不作詳細(xì)討論,但在適當(dāng)情況下,所述技術(shù)、方法和設(shè)備應(yīng)當(dāng)被視為授權(quán)說明書的一部分。
[0042]在這里示出和討論的所有示例中,任何具體值應(yīng)被解釋為僅僅