欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

負(fù)載均衡方法及裝置與流程

文檔序號:12478441閱讀:477來源:國知局
負(fù)載均衡方法及裝置與流程

本公開涉及分布式技術(shù)領(lǐng)域,特別涉及一種負(fù)載均衡方法及裝置。



背景技術(shù):

隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,分布式文件系統(tǒng)的出現(xiàn)有效地解決了數(shù)據(jù)的存儲和管理難題。其中,在分布式文件系統(tǒng)中,數(shù)據(jù)存放在各個DataNode(數(shù)據(jù)節(jié)點)上。且每一個DataNode的數(shù)據(jù)存儲量會隨著分布式文件系統(tǒng)的使用而不斷增長,為了增加系統(tǒng)的存儲容量,通常需要在分布式文件系統(tǒng)加入新的DataNode。而新加入的DataNode的負(fù)載量會比之前存在的DataNode的負(fù)載量低很多,這時便需考慮到負(fù)載均衡的問題,以提升系統(tǒng)性能。

相關(guān)技術(shù)中,若各個DataNode(數(shù)據(jù)節(jié)點)之間出現(xiàn)負(fù)載不均衡的情況,一般采用數(shù)據(jù)遷移的方式實現(xiàn)各個DataNode之間數(shù)據(jù)存儲量的均衡。比如,將數(shù)據(jù)存儲量比較大的DataNode上的一部分Block遷移到數(shù)據(jù)存儲量比較少的DataNode上。其中,Block是分布式文件系統(tǒng)中最小存儲和處理單位。

在實現(xiàn)本公開的過程中,發(fā)明人發(fā)現(xiàn)相關(guān)技術(shù)至少存在以下問題:

在數(shù)據(jù)遷移的過程中,會涉及到大量的I/O(Input/Output,輸入/輸出)操作,這會耗費大量網(wǎng)絡(luò)流量,此外在數(shù)據(jù)遷移的過程中容易造成數(shù)據(jù)的丟失。



技術(shù)實現(xiàn)要素:

為克服相關(guān)技術(shù)中存在的問題,本公開提供一種負(fù)載均衡方法及裝置。

根據(jù)本公開實施例的第一方面,提供一種負(fù)載均衡方法,包括:

獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量;

為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值;

對于每一個數(shù)據(jù)節(jié)點,基于所述數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算所述數(shù)據(jù)節(jié)點的臨時磁盤用量;

在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量;

將待寫入的文件寫入到所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中。

在另一個實施例中,所述獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量,包括:

對于每一個數(shù)據(jù)節(jié)點,每隔預(yù)設(shè)時長獲取一次所述數(shù)據(jù)節(jié)點的磁盤用量信息,所述磁盤用量信息至少包括所述數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和所述數(shù)據(jù)節(jié)點的當(dāng)前元數(shù)據(jù)版本號,所述當(dāng)前磁盤用量由所述數(shù)據(jù)節(jié)點周期性獲取得到;

判斷所述當(dāng)前元數(shù)據(jù)版本號與本地存儲的所述數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號是否一致;

若所述當(dāng)前元數(shù)據(jù)版本號與本地存儲的所述數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號不一致,則將所述磁盤用量信息中包含的所述當(dāng)前磁盤用量存儲在本地。

在另一個實施例中,所述為每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量分別分配一個磁盤用量隨機數(shù)值,包括:

設(shè)置所述磁盤用量隨機數(shù)值的取值上限和取值下限;

在所述取值上限和所述取值下限所規(guī)定的取值范圍內(nèi),分別為每一個數(shù)據(jù)節(jié)點分配一個磁盤用量隨機數(shù)值;

所述基于所述數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和所述磁盤用量隨機數(shù)值,計算所述數(shù)據(jù)節(jié)點的臨時磁盤用量,包括:

計算所述當(dāng)前磁盤用量和所述磁盤用量隨機數(shù)值之和,得到所述數(shù)據(jù)節(jié)點的臨時磁盤用量。

在另一個實施例中,所述將待寫入的文件寫入到所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中,包括:

對于所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的每一個數(shù)據(jù)節(jié)點,在所述數(shù)據(jù)節(jié)點中創(chuàng)建Block(數(shù)據(jù)塊);

向所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的主數(shù)據(jù)節(jié)點發(fā)送所述待寫入的文件,以使所述主數(shù)據(jù)節(jié)點在將所述待寫入的文件寫入創(chuàng)建的Block后,將所述待寫入的文件發(fā)送給所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的從數(shù)據(jù)節(jié)點,由所述從數(shù)據(jù)節(jié)點將所述待寫入的文件寫入創(chuàng)建的Block。

在另一個實施例中,所述在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,包括:

按照臨時磁盤用量由大到小的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第一排序結(jié)果選取所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點;

或按照臨時磁盤用量由小到大的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第二排序結(jié)果選取所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點。

根據(jù)本公開實施例的第二方面,提供一種負(fù)載均衡裝置,包括:

獲取模塊,被配置為獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量;

分配模塊,被配置為為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值;

計算模塊,被配置為對于每一個數(shù)據(jù)節(jié)點,基于所述數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算所述數(shù)據(jù)節(jié)點的臨時磁盤用量;

選取模塊,被配置為在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量;

寫入模塊,被配置為將待寫入的文件寫入到所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中。

在另一個實施例中,所述獲取模塊,被配置為對于每一個數(shù)據(jù)節(jié)點,每隔預(yù)設(shè)時長獲取一次所述數(shù)據(jù)節(jié)點的磁盤用量信息,所述磁盤用量信息至少包括所述數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和所述數(shù)據(jù)節(jié)點的當(dāng)前元數(shù)據(jù)版本號,所述當(dāng)前磁盤用量由所述數(shù)據(jù)節(jié)點周期性獲取得到;判斷所述當(dāng)前元數(shù)據(jù)版本號與本地存儲的所述數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號是否一致。

在另一個實施例中,所述分配模塊,被配置為設(shè)置所述磁盤用量隨機數(shù)值的取值上限和取值下限;在所述取值上限和所述取值下限所規(guī)定的取值范圍內(nèi),分別為每一個數(shù)據(jù)節(jié)點分配一個磁盤用量隨機數(shù)值;

所述計算模塊,被配置為計算所述當(dāng)前磁盤用量和所述磁盤用量隨機數(shù)值之和,得到所述數(shù)據(jù)節(jié)點的臨時磁盤用量。

在另一個實施例中,所述寫入模塊,被配置為對于所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的每一個數(shù)據(jù)節(jié)點,在所述數(shù)據(jù)節(jié)點中創(chuàng)建Block;向所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的主數(shù)據(jù)節(jié)點發(fā)送所述待寫入的文件,以使所述主數(shù)據(jù)節(jié)點在將所述待寫入的文件寫入創(chuàng)建的Block后,將所述待寫入的文件發(fā)送給所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的從數(shù)據(jù)節(jié)點,由所述從數(shù)據(jù)節(jié)點將所述待寫入的文件寫入創(chuàng)建的Block。

在另一個實施例中,所述選取模塊,被配置為按照臨時磁盤用量由大到小的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第一排序結(jié)果選取所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點;或按照臨時磁盤用量由小到大的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第二排序結(jié)果選取所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點。

根據(jù)本公開實施例的第三方面,提供一種負(fù)載均衡裝置,包括:

處理器;

用于存儲處理器可執(zhí)行指令的存儲器;

其中,所述處理器被配置為:獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量;為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值;對于每一個數(shù)據(jù)節(jié)點,基于所述數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算所述數(shù)據(jù)節(jié)點的臨時磁盤用量;在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量;將待寫入的文件寫入到所述預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中。

本公開的實施例提供的技術(shù)方案可以包括以下有益效果:

在獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量后,為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值,且基于每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算每一個數(shù)據(jù)節(jié)點的臨時磁盤用量,之后在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,該選取的預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量,最終將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中,由于客戶端在進(jìn)行數(shù)據(jù)寫入時直接選擇負(fù)載量比較低的數(shù)據(jù)節(jié)點寫入,從而使得各個數(shù)據(jù)節(jié)點的數(shù)據(jù)存儲量慢慢趨于平均,因此無需采用數(shù)據(jù)遷移的方式達(dá)到負(fù)載均衡,省略了I/O操作,節(jié)省了網(wǎng)絡(luò)流量,避免了數(shù)據(jù)遷移過程中造成的數(shù)據(jù)丟失,安全快捷,負(fù)載均衡效果較優(yōu)。

應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開。

附圖說明

此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本發(fā)明的實施例,并與說明書一起用于解釋本發(fā)明的原理。

圖1是根據(jù)一示例性實施例示出的一種分布式文件系統(tǒng)的架構(gòu)圖。

圖2是根據(jù)一示例性實施例示出的一種負(fù)載均衡方法的流程圖。

圖3是根據(jù)一示例性實施例示出的一種負(fù)載均衡方法的流程圖。

圖4是根據(jù)一示例性實施例示出的一種負(fù)載均衡裝置的框圖。

圖5是根據(jù)一示例性實施例示出的一種負(fù)載均衡裝置的框圖。

具體實施方式

這里將詳細(xì)地對示例性實施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。

在對本公開實施例進(jìn)行詳細(xì)的解釋說明之前,先對本公開實施例涉及的分布式文件系統(tǒng)的架構(gòu)進(jìn)行簡單介紹。參見圖1,該分布式文件系統(tǒng)的架構(gòu)中包括客戶端(Client)、主節(jié)點(MasterNode)、從節(jié)點(SlaveNode)、數(shù)據(jù)節(jié)點(DataNode)以及磁盤(Storage)。

其中,客戶端負(fù)責(zé)提供文件的讀寫接口。需要說明的是,此處的客戶端并不等同于一般意義上的個人固定終端或個人移動終端等客戶端,其本質(zhì)上為分布式文件系統(tǒng)提供的應(yīng)用服務(wù)器。主節(jié)點和從節(jié)點構(gòu)成了MHA(Master High Availability,主節(jié)點高可用)架構(gòu),其中主節(jié)點對外提供寫服務(wù),一個從節(jié)點作為備選主節(jié)點,從節(jié)點提供讀服務(wù),一旦主節(jié)點宕機,將會把備選從節(jié)點提升為新的主節(jié)點繼續(xù)工作。

此外,主節(jié)點負(fù)責(zé)存儲分布式文件系統(tǒng)的相關(guān)元數(shù)據(jù)信息,包括數(shù)據(jù)塊(Block)的分布信息和當(dāng)前所有數(shù)據(jù)節(jié)點的信息。數(shù)據(jù)節(jié)點負(fù)責(zé)存儲文件的數(shù)據(jù)和相關(guān)的元數(shù)據(jù)信息,按Block的方式存儲,文件占用Block的一部分。Block按照多副本的方式存放在多個數(shù)據(jù)節(jié)點上,一個數(shù)據(jù)節(jié)點上可能有多個磁盤。本公開實施例對上述Block副本個數(shù)及數(shù)據(jù)節(jié)點上的磁盤數(shù)量均不進(jìn)行具體限定。在本公開實施例中,為了實現(xiàn)各個數(shù)據(jù)節(jié)點上負(fù)載量的均衡,客戶端在向各個數(shù)據(jù)節(jié)點寫入數(shù)據(jù)時,直接選擇負(fù)載量比較低的數(shù)據(jù)節(jié)點進(jìn)行寫入,無需在數(shù)據(jù)寫入后再進(jìn)行數(shù)據(jù)遷移,詳細(xì)的負(fù)載均衡過程請參見下述實施例。

圖2是根據(jù)一示例性實施例示出的一種負(fù)載均衡方法的流程圖,如圖2所示,該方法用于客戶端中,包括以下步驟。

在步驟201中,獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量。

在步驟202中,為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值。

在步驟203中,對于每一個數(shù)據(jù)節(jié)點,基于該數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算該數(shù)據(jù)節(jié)點的臨時磁盤用量。

在步驟204中,在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中,該預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量。

本公開實施例提供的方法,在獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量后,為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值,且基于每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算每一個數(shù)據(jù)節(jié)點的臨時磁盤用量,之后在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,該選取的預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量,最終將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中,由于客戶端在進(jìn)行數(shù)據(jù)寫入時直接選擇負(fù)載量比較低的數(shù)據(jù)節(jié)點寫入,從而使得各個數(shù)據(jù)節(jié)點的數(shù)據(jù)存儲量慢慢趨于平均,因此無需采用數(shù)據(jù)遷移的方式達(dá)到負(fù)載均衡,省略了I/O操作,節(jié)省了網(wǎng)絡(luò)流量,避免了數(shù)據(jù)遷移過程中造成的數(shù)據(jù)丟失,安全快捷,負(fù)載均衡效果較優(yōu)。

在另一個實施例中,獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量,包括:

對于每一個數(shù)據(jù)節(jié)點,每隔預(yù)設(shè)時長獲取一次數(shù)據(jù)節(jié)點的磁盤用量信息,磁盤用量信息至少包括數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和數(shù)據(jù)節(jié)點的當(dāng)前元數(shù)據(jù)版本號,當(dāng)前磁盤用量由數(shù)據(jù)節(jié)點周期性獲取得到;

判斷當(dāng)前元數(shù)據(jù)版本號與本地存儲的數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號是否一致;

若當(dāng)前元數(shù)據(jù)版本號與本地存儲的數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號不一致,則將磁盤用量信息中包含的當(dāng)前磁盤用量存儲在本地。

在另一個實施例中,為每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量分別分配一個磁盤用量隨機數(shù)值,包括:

設(shè)置磁盤用量隨機數(shù)值的取值上限和取值下限;

在取值上限和取值下限所規(guī)定的取值范圍內(nèi),分別為每一個數(shù)據(jù)節(jié)點分配一個磁盤用量隨機數(shù)值;

基于數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算數(shù)據(jù)節(jié)點的臨時磁盤用量,包括:

計算當(dāng)前磁盤用量和磁盤用量隨機數(shù)值之和,得到數(shù)據(jù)節(jié)點的臨時磁盤用量。

在另一個實施例中,將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中,包括:

對于預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的每一個數(shù)據(jù)節(jié)點,在數(shù)據(jù)節(jié)點中創(chuàng)建Block;

向預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的主數(shù)據(jù)節(jié)點發(fā)送待寫入的文件,以使主數(shù)據(jù)節(jié)點在將待寫入的文件寫入創(chuàng)建的Block后,將待寫入的文件發(fā)送給預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的從數(shù)據(jù)節(jié)點,由從數(shù)據(jù)節(jié)點將待寫入的文件寫入創(chuàng)建的Block。

在另一個實施例中,在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,包括:

按照臨時磁盤用量由大到小的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第一排序結(jié)果選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點;

或按照臨時磁盤用量由小到大的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第二排序結(jié)果選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點。

上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本公開的可選實施例,在此不再一一贅述。

圖3是根據(jù)一示例性實施例示出的一種負(fù)載均衡方法的流程圖,包括如下步驟。

在步驟301中,分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點周期性計算當(dāng)前磁盤用量,并將當(dāng)前磁盤用量存儲到數(shù)據(jù)庫中。

在本公開實施例中,數(shù)據(jù)節(jié)點可通過自身的數(shù)據(jù)接口對當(dāng)前磁盤用量進(jìn)行讀取,讀取的當(dāng)前磁盤用量可以用百分?jǐn)?shù)進(jìn)行表示,本公開實施例對此不進(jìn)行具體限定。對于一個數(shù)據(jù)節(jié)點來說,在獲取到自身的當(dāng)前磁盤用量后,會將當(dāng)前磁盤用量存儲到數(shù)據(jù)庫中。其中,數(shù)據(jù)節(jié)點可每隔10s或20s計算一次當(dāng)前磁盤用量,本公開實施例對此同樣不進(jìn)行具體限定。

需要說明的是,在數(shù)據(jù)庫對每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量進(jìn)行存儲時,還會為每一個數(shù)據(jù)節(jié)點分配一個元數(shù)據(jù)版本號。其中,元數(shù)據(jù)版本號與當(dāng)前磁盤用量一一對應(yīng),也即不同的當(dāng)前磁盤用量會對應(yīng)不同的元數(shù)據(jù)版本號。每當(dāng)一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量發(fā)生變化時,便使用新的元數(shù)據(jù)版本號對該數(shù)據(jù)節(jié)點進(jìn)行編號,以保證每次磁盤用量變化均對應(yīng)不同的元數(shù)據(jù)版本號。

其中,上述提及的數(shù)據(jù)庫存在于圖1所示的主節(jié)點上。每當(dāng)一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量發(fā)生變化時,該數(shù)據(jù)節(jié)點對應(yīng)的元數(shù)據(jù)版本號便會更新到數(shù)據(jù)庫中,以保證數(shù)據(jù)庫中存儲的該數(shù)據(jù)節(jié)點的磁盤用量是最新的。在本公開實例中,對于每一個數(shù)據(jù)節(jié)點來說,數(shù)據(jù)庫會將該數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和對應(yīng)的元數(shù)據(jù)版本號作為該數(shù)據(jù)節(jié)點的磁盤用量信息進(jìn)行存儲。此外,為了對各個數(shù)據(jù)節(jié)點進(jìn)行區(qū)分,可使用不同的ID(Identity,身份標(biāo)識)對各個數(shù)據(jù)節(jié)點進(jìn)行標(biāo)識,比如數(shù)據(jù)庫可維護(hù)一個數(shù)據(jù)節(jié)點ID與磁盤用量信息之間的對應(yīng)關(guān)系表,本公開實施例對此不進(jìn)行具體限定。

在步驟302中,客戶端每隔預(yù)設(shè)時長獲取一次數(shù)據(jù)庫中每一個數(shù)據(jù)節(jié)點的磁盤用量信息;對于每一個數(shù)據(jù)節(jié)點,客戶端判斷該數(shù)據(jù)節(jié)點的磁盤用量信息中包括的當(dāng)前元數(shù)據(jù)版本號與本地存儲的該數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號是否一致;若不一致,則將該磁盤用量信息中包含的當(dāng)前磁盤用量存儲在本地;若一致,則直接執(zhí)行下述步驟303。

其中,本地存儲的該數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號指的是,上一次客戶端從數(shù)據(jù)庫中獲取到的該數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號。這樣,本次客戶端在獲取到該數(shù)據(jù)節(jié)點的當(dāng)前元數(shù)據(jù)版本號后,只需將其與本地存儲的該數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號進(jìn)行對比即可。其中,元數(shù)據(jù)版本號可存儲在本地cache(緩存)中,本公開實施例對此不進(jìn)行具體限定。

在本公開實施例中,元數(shù)據(jù)主要描述數(shù)據(jù)的屬性,如用來指示存儲位置、歷史數(shù)據(jù)、磁盤用量及文件記錄等,這里我們僅根據(jù)磁盤用量的變化來更新元數(shù)據(jù)版本號。對于每一個數(shù)據(jù)節(jié)點來說,當(dāng)數(shù)據(jù)庫中存儲的當(dāng)前元數(shù)據(jù)版本號與本地緩存的元數(shù)據(jù)版本號不同時,說明該數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量發(fā)生了變化,需要緩存新的元數(shù)據(jù)版本號到本地。同時,刪除之前緩存的元數(shù)據(jù)版本號對應(yīng)的磁盤用量,并將當(dāng)前獲取到的磁盤用量信息中包括的當(dāng)前磁盤用量更新至本地。

在步驟303中,若該數(shù)據(jù)節(jié)點的磁盤用量信息中包括的當(dāng)前元數(shù)據(jù)版本號與本地存儲的該數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號一致,則客戶端為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值。

其中,在為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值時,可采取下述方式實現(xiàn):

設(shè)置磁盤用量隨機數(shù)值的取值上限和取值下限;在該取值上限和該取值下限所規(guī)定的取值范圍內(nèi),分別為每一個數(shù)據(jù)節(jié)點分配一個磁盤用量隨機數(shù)值。

需要說明的是,每一個數(shù)據(jù)節(jié)點對應(yīng)的磁盤用量隨機數(shù)值均不同。

在本公開實施例中,以FLAGS_balance_factor標(biāo)識取值上限,random_num標(biāo)識磁盤用量隨機數(shù)值為例,對于每一個數(shù)據(jù)節(jié)點,客戶端為其選取的磁盤用量隨機數(shù)值滿足條件0<random_num<FLAGS_balance_factor,其中0也即指代取值下限。例如,取值上限設(shè)置為1,取值下限設(shè)置為0,則選取的磁盤用量隨機數(shù)值可為0.5及0.6等。例如,取值上限設(shè)置為2,取值下限設(shè)置為0,則選取的磁盤用量隨機數(shù)值可為0.6及1.5等。其中,客戶端可以通過設(shè)置取值上限和取值下限來控制磁盤用量隨機數(shù)值的取值范圍,取值范圍越大,可選取的磁盤用量隨機數(shù)值越多。

在步驟304中,對于每一個數(shù)據(jù)節(jié)點,客戶端基于該數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算該數(shù)據(jù)節(jié)點的臨時磁盤用量;客戶端在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點。

以tmp_usage標(biāo)識臨時磁盤用量為例,則客戶端在基于該數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值計算該數(shù)據(jù)節(jié)點的臨時磁盤用量時,具體計算當(dāng)前磁盤用量usage和磁盤用量隨機數(shù)值random_num之和,得到該數(shù)據(jù)節(jié)點的臨時磁盤用量tmp_usage。也即,tmp_usage=usage+random_num。例如,當(dāng)前磁盤用量為0.4,磁盤用量隨機數(shù)值為0.2,則臨時磁盤用量為0.4+0.2=0.6;例如,磁盤用量為0.5,隨機數(shù)為1.3,則臨時用量為0.5+1.3=1.8。

在得到每一個數(shù)據(jù)節(jié)點的臨時磁盤用量后,可根據(jù)下述方式實現(xiàn)對預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的選?。?/p>

第一種方式、按照臨時磁盤用量由大到小的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第一排序結(jié)果選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點。

其中,選取的數(shù)據(jù)節(jié)點為第一排序結(jié)果中末尾預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,例如,臨時用量分別為0.7、0.3及1.5,預(yù)設(shè)數(shù)目為1,則從大到小排序為1.5、0.7、0.3,選擇臨時用量為0.3的數(shù)據(jù)節(jié)點。

第二種方式、按照臨時磁盤用量由小到大的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第二排序結(jié)果選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點。

其中,選取的數(shù)據(jù)節(jié)點為第二排序結(jié)果首端預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,例如,臨時用量分別為0.7、0.3及1.5,預(yù)設(shè)數(shù)目為2,則從小到大排序為0.3、0.7、1.5,選擇臨時用量為0.3和0.7的數(shù)據(jù)節(jié)點。

其中,本公開實施例對磁盤用量隨機數(shù)值、排序原則及預(yù)設(shè)數(shù)目均不進(jìn)行具體限定。其中,預(yù)設(shè)數(shù)目指代Block的副本個數(shù)。采用usage+random_num的數(shù)據(jù)節(jié)點選取方式,可以使得客戶端有一定的幾率選擇到當(dāng)前磁盤用量usage比較大的DataNode,而不是一直選擇usage最小的3個DataNode;而且客戶端可以設(shè)置取值上限FLAGS_balance_factor的取值來修改控制這個幾率。其中,通過取值上限FLAGS_balance_factor越大,選到當(dāng)前磁盤用量比較大的數(shù)據(jù)節(jié)點的幾率越大。

在步驟305中,客戶端將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中。

在本公開實施例中,客戶端在進(jìn)行文件寫入時,首先在預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中選取主數(shù)據(jù)節(jié)點,之后對于預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的每一個數(shù)據(jù)節(jié)點,在該數(shù)據(jù)節(jié)點中創(chuàng)建數(shù)據(jù)塊Block,詳細(xì)過程為:客戶端向主數(shù)據(jù)節(jié)點發(fā)送創(chuàng)建Block請求;主數(shù)據(jù)節(jié)點將該創(chuàng)建Block請求鏈?zhǔn)絺鬏斀o從數(shù)據(jù)節(jié)點;預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點分別按策略選擇一個可用磁盤,并將可用磁盤標(biāo)識的磁盤標(biāo)識storage id返回給客戶端,得到預(yù)設(shè)數(shù)目的標(biāo)識對(datanode id,storage id)。之后客戶端為每個標(biāo)識對生成一個唯一識別碼作為Block id,并以Block id為key(鍵)將預(yù)設(shè)數(shù)目的標(biāo)識對(datanode id,storage id)存放到數(shù)據(jù)庫中,進(jìn)而完成Block創(chuàng)建過程。

客戶端在進(jìn)行文件寫入時,首先向選取的主數(shù)據(jù)節(jié)點發(fā)送寫入數(shù)據(jù)請求,該寫入數(shù)據(jù)請求中至少包括待寫入的文件;之后,通過該主數(shù)據(jù)節(jié)點將該寫數(shù)據(jù)請求鏈?zhǔn)絺鬏斀o預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的從數(shù)據(jù)節(jié)點,其中鏈?zhǔn)絺鬏數(shù)暮x是主數(shù)據(jù)節(jié)點在將待寫入的文件寫入創(chuàng)建的Block后,將待寫入的文件發(fā)送給預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的一個從數(shù)據(jù)節(jié)點,由該從數(shù)據(jù)節(jié)點將待寫入的文件寫入創(chuàng)建的Block后,再次傳輸給下一個從數(shù)據(jù)節(jié)點,直至將待寫入的文件傳輸給全部的從數(shù)據(jù)節(jié)點。鏈?zhǔn)絺鬏敂?shù)據(jù)保證每一個從數(shù)據(jù)節(jié)點均會將待寫入的數(shù)據(jù)寫入到創(chuàng)建的Block中,以保證數(shù)據(jù)的覆蓋。

之后,客戶端根據(jù)策略對完成數(shù)據(jù)寫入的Block進(jìn)行判斷,判斷該Block是否可用;若該Block可用,則將該Block放入本地空閑鏈表中。其中,本地空閑鏈表中可包括每個Block的Block id,以及每一個Block所在的的數(shù)據(jù)節(jié)點的datanode id、存儲該Block的磁盤的storage id之間的對應(yīng)關(guān)系。本地空間鏈表實質(zhì)上用于標(biāo)識本地中當(dāng)前有剩余存儲空間,可用于數(shù)據(jù)存儲的Block。

其中,客戶端在根據(jù)策略判斷Block是否可用時,可采取的策略可為查看創(chuàng)建的Block在存放待寫入的文件后,剩余的空閑用量是否還可以滿足下一次存儲數(shù)據(jù)的可能要求;如果剩余的空閑用量過小,則不計入本地空閑鏈表中。本公開實施例對客戶端判斷Block是否可用的策略和數(shù)據(jù)傳輸?shù)姆绞讲贿M(jìn)行具體限定。

本公開實施例提供的方法,在獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量后,為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值,且基于每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算每一個數(shù)據(jù)節(jié)點的臨時磁盤用量,之后在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,該選取的預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量,最終將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中,由于客戶端在進(jìn)行數(shù)據(jù)寫入時直接選擇負(fù)載量比較低的數(shù)據(jù)節(jié)點寫入,從而使得各個數(shù)據(jù)節(jié)點的數(shù)據(jù)存儲量慢慢趨于平均,因此無需采用數(shù)據(jù)遷移的方式達(dá)到負(fù)載均衡,省略了I/O操作,節(jié)省了網(wǎng)絡(luò)流量,避免了數(shù)據(jù)遷移過程中造成的數(shù)據(jù)丟失,安全快捷,負(fù)載均衡效果較優(yōu)。

圖4是根據(jù)一示例性實施例示出的一種負(fù)載均衡裝置的框圖。參照圖4,該裝置包括獲取模塊401,分配模塊402,計算模塊403,選取模塊404和寫入模塊405。

該獲取模塊401被配置為獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量;

該分配模塊402被配置為為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值;

該計算模塊403被配置為對于每一個數(shù)據(jù)節(jié)點,基于該數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算該數(shù)據(jù)節(jié)點的臨時磁盤用量;

該選取模塊404被配置為在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量;

該寫入模塊405被配置為將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中。

在另一個實施例中,獲取模塊401,被配置為對于每一個數(shù)據(jù)節(jié)點,每隔預(yù)設(shè)時長獲取一次數(shù)據(jù)節(jié)點的磁盤用量信息,磁盤用量信息至少包括數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和數(shù)據(jù)節(jié)點的當(dāng)前元數(shù)據(jù)版本號,當(dāng)前磁盤用量由數(shù)據(jù)節(jié)點周期性獲取得到;判斷當(dāng)前元數(shù)據(jù)版本號與本地存儲的數(shù)據(jù)節(jié)點的元數(shù)據(jù)版本號是否一致。

在另一個實施例中,分配模塊402,被配置為設(shè)置磁盤用量隨機數(shù)值的取值上限和取值下限;在取值上限和取值下限所規(guī)定的取值范圍內(nèi),分別為每一個數(shù)據(jù)節(jié)點分配一個磁盤用量隨機數(shù)值;

計算模塊403,被配置為計算當(dāng)前磁盤用量和磁盤用量隨機數(shù)值之和,得到數(shù)據(jù)節(jié)點的臨時磁盤用量。

在另一個實施例中,寫入模塊405,被配置為對于預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的每一個數(shù)據(jù)節(jié)點,在數(shù)據(jù)節(jié)點中創(chuàng)建數(shù)據(jù)塊Block;向預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的主數(shù)據(jù)節(jié)點發(fā)送待寫入的文件,以使主數(shù)據(jù)節(jié)點在將待寫入的文件寫入創(chuàng)建的Block后,將待寫入的文件發(fā)送給預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中的從數(shù)據(jù)節(jié)點,由從數(shù)據(jù)節(jié)點將待寫入的文件寫入創(chuàng)建的Block。

在另一個實施例中,選取模塊404,被配置為按照臨時磁盤用量由大到小的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第一排序結(jié)果選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點;或按照臨時磁盤用量由小到大的順序,將每一個數(shù)據(jù)節(jié)點的臨時磁盤用量進(jìn)行排序,基于得到的第二排序結(jié)果選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點。

本公開實施例提供的裝置,在獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量后,為每一個數(shù)據(jù)節(jié)點分別分配一個磁盤用量隨機數(shù)值,且基于每一個數(shù)據(jù)節(jié)點的當(dāng)前磁盤用量和磁盤用量隨機數(shù)值,計算每一個數(shù)據(jù)節(jié)點的臨時磁盤用量,之后在全部數(shù)據(jù)節(jié)點中選取預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點,該選取的預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點的臨時磁盤用量小于其他數(shù)據(jù)節(jié)點的臨時磁盤用量,最終將待寫入的文件寫入到預(yù)設(shè)數(shù)目的數(shù)據(jù)節(jié)點中,由于在進(jìn)行數(shù)據(jù)寫入時直接選擇負(fù)載量比較低的數(shù)據(jù)節(jié)點寫入,從而使得各個數(shù)據(jù)節(jié)點的數(shù)據(jù)存儲量慢慢趨于平均,因此無需采用數(shù)據(jù)遷移的方式達(dá)到負(fù)載均衡,省略了I/O操作,節(jié)省了網(wǎng)絡(luò)流量,避免了數(shù)據(jù)遷移過程中造成的數(shù)據(jù)丟失,安全快捷,負(fù)載均衡效果較優(yōu)。

關(guān)于上述實施例中的裝置,其中各個模塊執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說明。

圖5是根據(jù)一示例性實施例示出的一種負(fù)載均衡裝置500的框圖。例如,裝置500可以被提供為一服務(wù)器。參照圖5,裝置500包括處理組件522,其進(jìn)一步包括一個或多個處理器,以及由存儲器532所代表的存儲器資源,用于存儲可由處理組件522的執(zhí)行的指令,例如應(yīng)用程序。存儲器532中存儲的應(yīng)用程序可以包括一個或一個以上的每一個對應(yīng)于一組指令的模塊。此外,處理組件522被配置為執(zhí)行指令,以執(zhí)行上述數(shù)據(jù)均衡方法。

裝置500還可以包括一個電源組件526被配置為執(zhí)行裝置500的電源管理,一個有線或無線網(wǎng)絡(luò)接口550被配置為將裝置500連接到網(wǎng)絡(luò),和一個輸入輸出(I/O)接口558。裝置500可以操作基于存儲在存儲器532的操作系統(tǒng),例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM或類似。

本領(lǐng)域技術(shù)人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實施方案。本申請旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本公開未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。

應(yīng)當(dāng)理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來限制。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
正定县| 南华县| 大新县| 宜兰市| 昌平区| 石河子市| 大名县| 仁布县| 出国| 东安县| 浦东新区| 馆陶县| 麻栗坡县| 库伦旗| 汉沽区| 旌德县| 泰州市| 太谷县| 合作市| 六枝特区| 保亭| 兴城市| 南乐县| 洞头县| 塔河县| 茌平县| 冀州市| 舟山市| 南靖县| 烟台市| 金溪县| 浮山县| 澎湖县| 锡林郭勒盟| 京山县| 襄城县| 栾川县| 阿合奇县| 博罗县| 米易县| 花垣县|