本發(fā)明涉及分布式塊存儲技術(shù)領(lǐng)域,尤其涉及一種分布式塊數(shù)據(jù)的訪問方法和裝置。
背景技術(shù):
作為云存儲的核心基礎(chǔ)平臺,分布式存儲的重要性日益凸顯。分布式存儲系統(tǒng)通常采用多副本的方式來保存數(shù)據(jù)。數(shù)據(jù)的最小單元稱之為數(shù)據(jù)塊,同一個(gè)數(shù)據(jù)塊的多個(gè)副本分別存放在不同服務(wù)器節(jié)點(diǎn)上。這種機(jī)制主要用來提升系統(tǒng)的可用性,即在一個(gè)副本數(shù)據(jù)損壞后,還有其他副本數(shù)據(jù)備份可用。
用戶對數(shù)據(jù)的訪問是很消耗服務(wù)器資源的。如果某些訪問集中在當(dāng)前壓力很大的服務(wù)器節(jié)點(diǎn)上時(shí),就會導(dǎo)致負(fù)載的嚴(yán)重失衡,使得系統(tǒng)難以發(fā)揮出應(yīng)有的性能,上層業(yè)務(wù)受到影響。因此,需要一種能解決訪問數(shù)據(jù)副本的選擇的負(fù)載均衡算法。
當(dāng)前負(fù)載均衡有許多算法,如輪詢法、隨機(jī)法。
隨機(jī)法是通過系統(tǒng)隨機(jī)函數(shù),根據(jù)節(jié)點(diǎn)列表的編號來隨機(jī)選擇其中一臺進(jìn)行訪問。由概率統(tǒng)計(jì)理論可以得知,隨著調(diào)用量的增大,其實(shí)際效果越來越接近于平均分配流量到每一個(gè)節(jié)點(diǎn),也就是輪詢的效果,該算法沒有考慮每個(gè)服務(wù)器節(jié)點(diǎn)的動態(tài)負(fù)載,因此,會造成服務(wù)器節(jié)點(diǎn)的負(fù)載不均衡。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提供了一種分布式塊數(shù)據(jù)的訪問方法和裝置,能夠更好地實(shí)現(xiàn)均衡節(jié)點(diǎn)服務(wù)器的負(fù)載的效果。
為了實(shí)現(xiàn)上述目的,本發(fā)明采取了如下技術(shù)方案。
一種分布式塊數(shù)據(jù)的訪問方法,包括:
根據(jù)接收的數(shù)據(jù)訪問請求,獲取待訪問數(shù)據(jù)塊;
獲取所述待訪問數(shù)據(jù)塊的至少兩個(gè)副本分別所在的至少兩個(gè)節(jié)點(diǎn)服務(wù)器;
根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間;
在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);
根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器;
從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的一副本。
所述根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器的步驟包括:
從各個(gè)所述數(shù)值區(qū)間的最大值中,選取大于所述隨機(jī)數(shù)的最小的數(shù)值區(qū)間最大值;
獲取選取的所述數(shù)值區(qū)間最大值對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號;
根據(jù)所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。
所述根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器的步驟包括:
獲取所述隨機(jī)數(shù)所在的數(shù)值區(qū)間;
獲取所述隨機(jī)數(shù)所在的數(shù)值區(qū)間的最大值;
獲取所述隨機(jī)數(shù)所在的所述數(shù)值區(qū)間的最大值對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號;
根據(jù)所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。
所述根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間的步驟包括:
根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,分別計(jì)算數(shù)值區(qū)間的邊界值Interval[h];其中,h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤r,r為數(shù)據(jù)塊的至少兩個(gè)副本分別所在的節(jié)點(diǎn)服務(wù)器的總數(shù)量;
將Interval[h]作為第h個(gè)數(shù)值區(qū)間的最大值;將Interval[h-1]作為第h個(gè)數(shù)值區(qū)間的最小值,將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,形成至少兩個(gè)數(shù)值區(qū)間,并記錄所述數(shù)值區(qū)間的最大值與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系。
所述根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,分別計(jì)算數(shù)值區(qū)間的邊界值Interval[h]的步驟具體為根據(jù)以下公式計(jì)算:
其中,i為數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的序號,i為整數(shù),1≤i≤r;
loadi為第i個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值;
Max為所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值中的最大值。
所述根據(jù)所述隨機(jī)數(shù)所在的數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器的步驟包括:
獲取所述隨機(jī)數(shù)所在的數(shù)值區(qū)間;
根據(jù)所述數(shù)值區(qū)間的序號與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系,獲取所述數(shù)值區(qū)間所在的數(shù)值區(qū)間的序號對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號;
根據(jù)獲取的所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。
所述根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間的步驟包括:
根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,分別計(jì)算數(shù)值區(qū)間的邊界值Interval[h];h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤r,r為數(shù)據(jù)塊的至少兩個(gè)副本分別所在的節(jié)點(diǎn)服務(wù)器的總數(shù)量;
將Interval[h]作為第h個(gè)數(shù)值區(qū)間的最大值;將Interval[h-1]作為第h個(gè)數(shù)值區(qū)間的最小值,將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,形成至少兩個(gè)數(shù)值區(qū)間,并記錄所述數(shù)值區(qū)間的序號與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系。
所述獲取所述隨機(jī)數(shù)所在的數(shù)值區(qū)間的步驟包括:
當(dāng)所述隨機(jī)數(shù)為當(dāng)前數(shù)值區(qū)間的最小值時(shí),則將所述當(dāng)前數(shù)值區(qū)間作為所述隨機(jī)數(shù)所在的數(shù)值區(qū)間。
一種分布式塊數(shù)據(jù)的訪問裝置,包括:
第一獲取單元,根據(jù)接收的數(shù)據(jù)訪問請求,獲取待訪問數(shù)據(jù)塊;
第二獲取單元,獲取所述待訪問數(shù)據(jù)塊的至少兩個(gè)副本分別所在的至少兩個(gè)節(jié)點(diǎn)服務(wù)器;
第一生成單元,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,生成至少兩個(gè)數(shù)值區(qū)間;
第二生成單元,在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);
選擇單元,根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器;
訪問單元,從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。
所述選擇單元包括:
選取子單元,從各個(gè)所述數(shù)值區(qū)間的最大值中,選取大于所述隨機(jī)數(shù)的最小的數(shù)值區(qū)間最大值;
獲取子單元,獲取選取的所述數(shù)值區(qū)間最大值對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號;
選擇子單元,根據(jù)所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。
為所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值中的最大值。由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,本發(fā)明實(shí)施例中,獲取待訪問數(shù)據(jù)塊的至少兩個(gè)副本所在的至少兩個(gè)節(jié)點(diǎn)服務(wù)器;根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間;在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器;從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本,本發(fā)明能夠根據(jù)節(jié)點(diǎn)服務(wù)器的負(fù)載來選擇節(jié)點(diǎn)服務(wù)器,因此能夠比較好地均衡節(jié)點(diǎn)服務(wù)器的負(fù)載。
本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例一提供的一種分布式塊數(shù)據(jù)的訪問方法的處理流程圖;
圖2為本發(fā)明實(shí)施例二提供的一種分布式塊數(shù)據(jù)的訪問方法的處理流程圖;
圖3為本發(fā)明實(shí)施例三提供的一種分布式塊數(shù)據(jù)的訪問方法的處理流程圖;
圖4為本發(fā)明實(shí)施例四提供的一種分布式塊數(shù)據(jù)的訪問方法的處理流程圖;
圖5為本發(fā)明實(shí)施例五提供的一種分布式塊數(shù)據(jù)的訪問方法的處理流程圖;
圖6為本發(fā)明實(shí)施例提供的一種分布式塊數(shù)據(jù)的訪問方法的區(qū)間的示意圖;
圖7為本發(fā)明實(shí)施例五提供的一種分布式塊數(shù)據(jù)的訪問裝置的連接示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施方式,所述實(shí)施方式的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施方式是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學(xué)術(shù)語)具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣定義,不會用理想化或過于正式的含義來解釋。
為便于對本發(fā)明實(shí)施例的理解,下面將結(jié)合附圖以幾個(gè)具體實(shí)施例為例做進(jìn)一步的解釋說明,且各個(gè)實(shí)施例并不構(gòu)成對本發(fā)明實(shí)施例的限定。
實(shí)施例1:
該實(shí)施例以三個(gè)節(jié)點(diǎn)服務(wù)器為例,結(jié)合圖6進(jìn)行描述。
如圖1所示,為本發(fā)明所述的一種分布式塊數(shù)據(jù)的訪問方法,包括:
步驟11,根據(jù)接收的數(shù)據(jù)訪問請求,獲取待訪問數(shù)據(jù)塊;
步驟12,獲取所述待訪問數(shù)據(jù)塊的至少兩個(gè)副本所在的至少兩個(gè)節(jié)點(diǎn)服務(wù)器。本發(fā)明實(shí)施例中,以同一個(gè)數(shù)據(jù)塊有三個(gè)副本,三個(gè)副本分別分布在3個(gè)節(jié)點(diǎn)服務(wù)器上,也就是說,三個(gè)節(jié)點(diǎn)服務(wù)器分別存儲有同一數(shù)據(jù)塊的副本。
步驟13,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間;至少兩個(gè)數(shù)值區(qū)間之間為連續(xù)的。圖6中以連續(xù)區(qū)間為例。本發(fā)明實(shí)施例中,根據(jù)三個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成三個(gè)數(shù)值區(qū)間,三個(gè)數(shù)值區(qū)間分別為[0,Interval[1]],[Interval[1],Interval[2]],[Interval[2],Interval[3]]。
步驟14,在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);
步驟15,根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器。該實(shí)施例中,隨機(jī)數(shù)落在數(shù)值區(qū)間的位置如圖6中的箭頭所示,根據(jù)隨機(jī)數(shù)選擇第二節(jié)點(diǎn)服務(wù)器。
步驟16,從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。
上述實(shí)施例中,可以根據(jù)待訪問數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的負(fù)載值來選擇節(jié)點(diǎn)服務(wù)器,因此,能夠很好的均衡節(jié)點(diǎn)服務(wù)器的負(fù)載。
實(shí)施例2:
該實(shí)施例以同一個(gè)數(shù)據(jù)塊有三個(gè)副本,三個(gè)副本分別分布在3個(gè)節(jié)點(diǎn)服務(wù)器上為例,結(jié)合圖6進(jìn)行描述,與上一實(shí)施例相同的步驟不再贅述。
如圖2所示,為本發(fā)明所述的一種分布式塊數(shù)據(jù)的訪問方法,包括:
步驟21,根據(jù)接收的數(shù)據(jù)訪問請求,獲取待訪問數(shù)據(jù)塊;
步驟22,獲取所述待訪問數(shù)據(jù)塊的至少兩個(gè)副本所在的至少兩個(gè)節(jié)點(diǎn)服務(wù)器;
步驟23,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間;
其中,步驟23包括:
步驟231,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,分別計(jì)算數(shù)值區(qū)間的邊界值Interval[h];其中,h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤r,r為數(shù)據(jù)塊的至少兩個(gè)副本分別所在的節(jié)點(diǎn)服務(wù)器的總數(shù)量;
其中,步驟231具體為根據(jù)以下公式計(jì)算:
loadi為第i個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值;
Max為所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值中的最大值。
該實(shí)施例中,該步驟具體為:使用三個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,根據(jù)上述公式,計(jì)算得到Interval[1]、Interval[2]、Interval[3],其中,Interval[3]大于Interval[2],Interval[2]大于Interval[1]。
步驟232,將Interval[h]作為第h個(gè)數(shù)值區(qū)間的最大值;將Interval[h-1]作為第h個(gè)數(shù)值區(qū)間的最小值,將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,形成至少兩個(gè)數(shù)值區(qū)間,并記錄所述數(shù)值區(qū)間的最大值與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系。其中,數(shù)值區(qū)間的最大值和最小值為數(shù)值區(qū)間的邊界值。h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤r。該實(shí)施例中的該步驟具體為:將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,將Interval[1]作為第1個(gè)數(shù)值區(qū)間的最大值,形成第一數(shù)值區(qū)間;將Interval[1]作為第2個(gè)數(shù)值區(qū)間的最小值,將Interval[2]作為第2個(gè)數(shù)值區(qū)間的最大值,形成第2數(shù)值區(qū)間;將Interval[2]作為第3個(gè)數(shù)值區(qū)間的最小值,將Interval[3]作為第3個(gè)數(shù)值區(qū)間的最大值,形成第3數(shù)值區(qū)間;記錄各個(gè)數(shù)值區(qū)間的最大值與各個(gè)節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系,對應(yīng)關(guān)系具體為:Interval[1]與第一節(jié)點(diǎn)服務(wù)器對應(yīng),Interval[2]與第二節(jié)點(diǎn)服務(wù)器對應(yīng);Interval[3]與第三節(jié)點(diǎn)服務(wù)器對應(yīng)。
步驟24,在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);
步驟25,根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器;
其中,步驟25包括:
步驟251,從各個(gè)所述數(shù)值區(qū)間的最大值中,選取大于所述隨機(jī)數(shù)的最小的數(shù)值區(qū)間最大值。該實(shí)施例中的該步驟具體為:隨機(jī)數(shù)為箭頭所指的位置;大于所述隨機(jī)數(shù)的最小的數(shù)值區(qū)間最大值為Interval[2]。
步驟252,獲取選取的所述數(shù)值區(qū)間最大值對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號。該實(shí)施例中的該步驟具體為:Interval[2]對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號為2。
步驟253,根據(jù)所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。該實(shí)施例中的該步驟具體為:選擇第二節(jié)點(diǎn)服務(wù)器。
步驟26,從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。該實(shí)施例中的該步驟具體為:從第二節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。
上述實(shí)施例中,可以根據(jù)待訪問數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的負(fù)載值來選擇節(jié)點(diǎn)服務(wù)器,因此,能夠很好的均衡節(jié)點(diǎn)服務(wù)器的負(fù)載。
實(shí)施例3
本發(fā)明實(shí)施例中,同一個(gè)數(shù)據(jù)塊有三個(gè)副本,三個(gè)副本分別分布在3個(gè)節(jié)點(diǎn)服務(wù)器上,也就是說,三個(gè)節(jié)點(diǎn)服務(wù)器分別存儲有同一數(shù)據(jù)塊的副本。結(jié)合圖6進(jìn)行描述,與上一實(shí)施例相同的步驟不再贅述。
如圖3所示,為本發(fā)明所述的一種分布式塊數(shù)據(jù)的訪問方法,包括:
步驟31,根據(jù)接收的數(shù)據(jù)訪問請求,獲取待訪問數(shù)據(jù)塊;
步驟32,獲取所述待訪問數(shù)據(jù)塊的至少兩個(gè)副本所在的至少兩個(gè)節(jié)點(diǎn)服務(wù)器;
步驟33,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間;
其中,步驟33包括:
步驟331,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,分別計(jì)算數(shù)值區(qū)間的邊界值Interval[h];其中,h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤r,r為數(shù)據(jù)塊的至少兩個(gè)副本分別所在的節(jié)點(diǎn)服務(wù)器的總數(shù)量;
其中,步驟331具體為根據(jù)以下公式計(jì)算:
其中,i為數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的序號,i為整數(shù),1≤i≤r;
loadi為第i個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值;
Max為所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值中的最大值。
該實(shí)施例中,該步驟具體為:使用三個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,根據(jù)上述公式,計(jì)算得到Interval[1]、Interval[2]、Interval[3]。Interval[1]、Interval[2]、Interval[3]分別根據(jù)以下公式計(jì)算:
h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤3,i為數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的序號,i為整數(shù),1≤i≤3。
步驟332,將Interval[h]作為第h個(gè)數(shù)值區(qū)間的最大值;將Interval[h-1]作為第h個(gè)數(shù)值區(qū)間的最小值,將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,形成至少兩個(gè)數(shù)值區(qū)間,并記錄所述數(shù)值區(qū)間的最大值與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系;h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤r。該實(shí)施例中的該步驟具體為:將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,將Interval[1]作為第1個(gè)數(shù)值區(qū)間的最大值,形成第一數(shù)值區(qū)間;將Interval[1]作為第2個(gè)數(shù)值區(qū)間的最小值,將Interval[2]作為第2個(gè)數(shù)值區(qū)間的最大值,形成第2數(shù)值區(qū)間;將Interval[2]作為第3個(gè)數(shù)值區(qū)間的最小值,將Interval[3]作為第3個(gè)數(shù)值區(qū)間的最大值,形成第3數(shù)值區(qū)間;記錄各個(gè)數(shù)值區(qū)間的最大值與各個(gè)節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系,對應(yīng)關(guān)系具體為:Interval[1]與第一節(jié)點(diǎn)服務(wù)器對應(yīng),Interval[2]與第二節(jié)點(diǎn)服務(wù)器對應(yīng);Interval[3]與第三節(jié)點(diǎn)服務(wù)器對應(yīng)。
步驟34,在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);
步驟35,根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器;
其中,步驟35包括:
步驟351,獲取所述隨機(jī)數(shù)所在的數(shù)值區(qū)間;該實(shí)施例中的該步驟具體為:隨機(jī)數(shù)為圖6中所示箭頭所指的位置;隨機(jī)數(shù)所在的數(shù)值區(qū)間為第二數(shù)值區(qū)間。
步驟352,獲取所述隨機(jī)數(shù)所在的數(shù)值區(qū)間的最大值;該實(shí)施例中的該步驟具體為:獲取第二數(shù)值區(qū)間的最大值為Interval[2]。
步驟353,獲取所述隨機(jī)數(shù)所在的所述數(shù)值區(qū)間的最大值對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號;該實(shí)施例中的該步驟具體為:獲取Interval[2]對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號為2。
步驟354,根據(jù)所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。該實(shí)施例中的該步驟具體為:選擇第二節(jié)點(diǎn)服務(wù)器。
步驟36,從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。該實(shí)施例中的該步驟具體為:從第二節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。
上述實(shí)施例中,可以根據(jù)待訪問數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的負(fù)載值來選擇節(jié)點(diǎn)服務(wù)器,因此,能夠很好的均衡節(jié)點(diǎn)服務(wù)器的負(fù)載。
實(shí)施例4
本發(fā)明實(shí)施例中,同一個(gè)數(shù)據(jù)塊有三個(gè)副本,三個(gè)副本分別分布在3個(gè)節(jié)點(diǎn)服務(wù)器上,也就是說,三個(gè)節(jié)點(diǎn)服務(wù)器分別存儲有同一數(shù)據(jù)塊的副本。結(jié)合圖6進(jìn)行描述,與上一實(shí)施例相同的步驟不再贅述。
如圖4所示,為本發(fā)明所述的一種分布式塊數(shù)據(jù)的訪問方法,包括:
步驟41,根據(jù)接收的數(shù)據(jù)訪問請求,獲取待訪問數(shù)據(jù)塊;
步驟42,獲取所述待訪問數(shù)據(jù)塊的至少兩個(gè)副本所在的至少兩個(gè)節(jié)點(diǎn)服務(wù)器;
步驟43,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,形成至少兩個(gè)數(shù)值區(qū)間;
步驟43包括:
步驟431,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,分別計(jì)算數(shù)值區(qū)間的邊界值Interval[h];其中,i為數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的序號,i為整數(shù),1≤i≤r;r為數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的總數(shù)量;
其中,步驟431具體為根據(jù)以下公式計(jì)算:
其中,loadi為第i個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值;
Max為所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值中的最大值。
步驟432,將Interval[h]作為第h個(gè)數(shù)值區(qū)間的最大值;將Interval[h-1]作為第h個(gè)數(shù)值區(qū)間的最小值,將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,形成至少兩個(gè)數(shù)值區(qū)間,并記錄所述數(shù)值區(qū)間的序號與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系,h為數(shù)值區(qū)間的序號,h為整數(shù),1≤h≤r。該實(shí)施例中的該步驟具體為:Interval[3]大于Interval[2],Interval[2]大于Interval[1]。將第一個(gè)數(shù)值區(qū)間的最小值設(shè)為0,將Interval[1]作為第1個(gè)數(shù)值區(qū)間的最大值,形成第一數(shù)值區(qū)間;將Interval[1]作為第2個(gè)數(shù)值區(qū)間的最小值,將Interval[2]作為第2個(gè)數(shù)值區(qū)間的最大值,形成第2數(shù)值區(qū)間;將Interval[2]作為第3個(gè)數(shù)值區(qū)間的最小值,將Interval[3]作為第3個(gè)數(shù)值區(qū)間的最大值,形成第3數(shù)值區(qū)間;記錄所述數(shù)值區(qū)間的序號與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系,對應(yīng)關(guān)系具體為:Interval[1]與第一節(jié)點(diǎn)服務(wù)器對應(yīng),Interval[2]與第二節(jié)點(diǎn)服務(wù)器對應(yīng);Interval[3]與第三節(jié)點(diǎn)服務(wù)器對應(yīng)。
步驟44,在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);
步驟45,根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器;
步驟45包括:
步驟451,獲取所述隨機(jī)數(shù)所在的數(shù)值區(qū)間。當(dāng)所述隨機(jī)數(shù)落在數(shù)值區(qū)間的邊界時(shí),例如當(dāng)所述隨機(jī)數(shù)為當(dāng)前數(shù)值區(qū)間的最小值時(shí),則將所述當(dāng)前數(shù)值區(qū)間作為所述隨機(jī)數(shù)所在的數(shù)值區(qū)間。該實(shí)施例中的該步驟具體為:隨機(jī)數(shù)為圖6中所示箭頭所指的位置;隨機(jī)數(shù)所在的數(shù)值區(qū)間為第二數(shù)值區(qū)間。
步驟452,根據(jù)所述數(shù)值區(qū)間的序號與所述節(jié)點(diǎn)服務(wù)器的序號之間的對應(yīng)關(guān)系,獲取所述數(shù)值區(qū)間所在的數(shù)值區(qū)間的序號對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號。該實(shí)施例中的該步驟具體為:第二數(shù)值區(qū)間對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號為2。
步驟453,根據(jù)獲取的所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。該實(shí)施例中的該步驟具體為:選擇第二節(jié)點(diǎn)服務(wù)器。
步驟46,從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。
上述實(shí)施例中,可以根據(jù)待訪問數(shù)據(jù)塊的副本所在的節(jié)點(diǎn)服務(wù)器的負(fù)載值來選擇節(jié)點(diǎn)服務(wù)器,因此,能夠很好的均衡節(jié)點(diǎn)服務(wù)器的負(fù)載。
實(shí)施例5
本發(fā)明提供一種分布式塊存儲中的負(fù)載均衡方法,針對資源訪問熱度不均的問題,提供了一種簡單有效的負(fù)載均衡算法。本發(fā)明根據(jù)系統(tǒng)各節(jié)點(diǎn)的負(fù)載統(tǒng)計(jì),動態(tài)設(shè)置負(fù)載權(quán)重,并根據(jù)權(quán)重選擇出最適合的節(jié)點(diǎn),以此來解決負(fù)載均衡問題。
當(dāng)每次讀取數(shù)據(jù)(待訪問數(shù)據(jù)塊)時(shí),依據(jù)算法選出的節(jié)點(diǎn)服務(wù)器來讀取相應(yīng)的副本。假設(shè)當(dāng)前系統(tǒng)是三個(gè)副本,分別存放在三個(gè)節(jié)點(diǎn)服務(wù)器上,分別為node1,node2,node3。通過各節(jié)點(diǎn)服務(wù)器上的綜合負(fù)載狀態(tài),量化出三個(gè)節(jié)點(diǎn)的負(fù)載值分別為load1,load2,load3。負(fù)載值可以根據(jù)任務(wù)完成狀態(tài)統(tǒng)計(jì)得出,與系統(tǒng)的多種因素相關(guān),節(jié)點(diǎn)服務(wù)器的負(fù)載狀態(tài)與負(fù)載值成正比,負(fù)載越大,負(fù)載值越大。也就是說,負(fù)載值根據(jù)以下一個(gè)或者多個(gè)的因素綜合計(jì)算得到:節(jié)點(diǎn)服務(wù)器的CPU的大小和使用率、節(jié)點(diǎn)服務(wù)器的內(nèi)存的使用率、節(jié)點(diǎn)服務(wù)器的剩余存儲空間、當(dāng)前節(jié)點(diǎn)服務(wù)器與其他節(jié)點(diǎn)服務(wù)器通信的通道個(gè)數(shù)(連接數(shù))。
如圖5所示,該應(yīng)用場景的方法包括以下步驟:
首先,接收到訪問數(shù)據(jù)請求;
然后,訪問到對應(yīng)的數(shù)據(jù)塊;
然后,獲取數(shù)據(jù)塊對應(yīng)節(jié)點(diǎn)的負(fù)載值loadi,計(jì)算三個(gè)負(fù)載的最大值Max,即Max=max(load1,load2,load3)。
然后,取各個(gè)負(fù)載數(shù)值的倒數(shù),并依次排序形成一個(gè)區(qū)間,計(jì)算各個(gè)節(jié)點(diǎn)所對應(yīng)的區(qū)間。公式如下:
其中:
i為整數(shù),1≤i≤r,表示節(jié)點(diǎn)服務(wù)器的序號。
r為副本的總數(shù)量,也就是存儲同一副本的節(jié)點(diǎn)服務(wù)器的總數(shù)量,此處為3。
loadi表示第i個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值。
Interval[h]表示第i個(gè)節(jié)點(diǎn)服務(wù)器所在的區(qū)間的最大邊界值。
Max為負(fù)載值中的最大值,即Max=max(loadi)。
如果設(shè)區(qū)間的起點(diǎn)為0,可以得到如圖6所示的區(qū)間圖。
然后,當(dāng)讀取副本時(shí),生成區(qū)間內(nèi)的隨機(jī)數(shù),例如:在0和Interval[3]之間產(chǎn)生一個(gè)隨機(jī)數(shù);
然后,根據(jù)隨機(jī)數(shù)選出對應(yīng)節(jié)點(diǎn)。具體為:根據(jù)隨機(jī)數(shù)落在區(qū)間的位置,選取大于隨機(jī)數(shù)的最小Interval[h]所對應(yīng)的節(jié)點(diǎn)作為讀取副本節(jié)點(diǎn)。例如如圖6所示,隨機(jī)數(shù)落在Interval[1]和Interval[2]之間,則選取node2節(jié)點(diǎn)。
然后,訪問到對應(yīng)的節(jié)點(diǎn)。
此算法的整體思路是負(fù)載高的節(jié)點(diǎn),倒數(shù)后的值小,被選中的概率低,最終實(shí)現(xiàn)負(fù)載平衡。
如圖7所示,為本發(fā)明所述的分布式塊數(shù)據(jù)的訪問裝置,包括:
第一獲取單元71,根據(jù)接收的數(shù)據(jù)訪問請求,獲取待訪問數(shù)據(jù)塊;
第二獲取單元72,獲取存儲所述待訪問數(shù)據(jù)塊的至少兩個(gè)副本的至少兩個(gè)節(jié)點(diǎn)服務(wù)器;
第一生成單元73,根據(jù)所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器的負(fù)載值,生成至少兩個(gè)數(shù)值區(qū)間;
第二生成單元74,在所述至少兩個(gè)數(shù)值區(qū)間內(nèi)生成一個(gè)隨機(jī)數(shù);
選擇單元75,根據(jù)所述隨機(jī)數(shù)以及所述至少兩個(gè)數(shù)值區(qū)間,從所述至少兩個(gè)節(jié)點(diǎn)服務(wù)器中,選擇一節(jié)點(diǎn)服務(wù)器;
訪問單元76,從選擇的所述節(jié)點(diǎn)服務(wù)器,訪問所述待訪問數(shù)據(jù)塊的副本。
所述選擇單元75包括:
選取子單元,從各個(gè)所述數(shù)值區(qū)間的最大值中,選取大于所述隨機(jī)數(shù)的最小的數(shù)值區(qū)間最大值;
獲取子單元,獲取選取的所述數(shù)值區(qū)間最大值對應(yīng)的節(jié)點(diǎn)服務(wù)器的序號;
選擇子單元,根據(jù)所述節(jié)點(diǎn)服務(wù)器的序號,選擇一節(jié)點(diǎn)服務(wù)器。
本領(lǐng)域普通技術(shù)人員可以理解:附圖只是一個(gè)實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。
通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對于裝置或系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置及系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。