本發(fā)明屬于數(shù)據(jù)存儲領(lǐng)域,尤其涉及分布式系統(tǒng)環(huán)境下數(shù)據(jù)存儲方法。
背景技術(shù):
一般情況下,一臺機器對外提供的吞吐最高也只能達(dá)到200MBps,若采用通常的機器鏡像即幾臺機器上的數(shù)據(jù)完全一致的方式,修復(fù)12TB的數(shù)據(jù)需要耗時20多個小時,考慮到正常的服務(wù)壓力,修復(fù)的時間將達(dá)到幾十個小時。
現(xiàn)有技術(shù)中提出了分布式存儲方式,將數(shù)據(jù)切分為多個庫,并復(fù)制幾份冗余,同一庫的不同冗余分布存儲于不同機器的不同位置,提高了修復(fù)速度。但是現(xiàn)有技術(shù)中將冗余數(shù)據(jù)分布在不同機器上時,采用的是隨機方式,對不同機器沒有加以選擇,造成了相同數(shù)據(jù)分布的機器都可能是故障頻發(fā)機器,因此造成數(shù)據(jù)維護困難和提高了數(shù)據(jù)丟失風(fēng)險。
基于上述問題,現(xiàn)在亟需一種新的分布式系統(tǒng)存儲方法,將節(jié)點按照存儲風(fēng)險值進(jìn)行分組,使得每個分組的平均存儲風(fēng)險值相對均衡,將冗余數(shù)據(jù)分布到每個分組中,方便了數(shù)據(jù)維護和降低了數(shù)據(jù)丟失風(fēng)險。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中的上述問題,本發(fā)明提出了一種分布式系統(tǒng)中數(shù)據(jù)存儲方法。
本發(fā)明采用的技術(shù)方案如下:
一種分布式系統(tǒng)中數(shù)據(jù)存儲方法,該方法包括如下步驟:
(1)將分布式系統(tǒng)中的m個節(jié)點i按照存儲容量、運行負(fù)載和故障頻率按照下述公式(a)計算確定每個節(jié)點的存儲風(fēng)險值Ri:
Ri=Si×Pi+1/Fi×Qi+Gi×Ti (a);
其中Si表示節(jié)點i的存儲容量,Pi表示存儲容量所對應(yīng)的權(quán)重,F(xiàn)i表示節(jié)點i的運行歷史中的最高系統(tǒng)運行負(fù)載,Qi表示運行負(fù)載所對應(yīng)的權(quán)重,Gi表示節(jié)點i的運行歷史中的故障頻率,Ti表示故障頻率所對應(yīng)的權(quán)重,且Pi,Qi,Gi>1;
(2)按照存儲風(fēng)險值從低到高的順序?qū)個節(jié)點排成一個有序排隊,將有序隊列中隊首第一個節(jié)點和隊尾最后一個節(jié)點取出構(gòu)成第一存儲分組,對于剩余節(jié)點構(gòu)成的有序隊列按照上述方式繼續(xù)處理構(gòu)成后續(xù)多個存儲分組,直至有序隊列中只有2個或3個節(jié)點,則將上述2個或3個節(jié)點作為一個存儲分組,最終m個節(jié)點分成k個存儲分組;
(3)當(dāng)系統(tǒng)接收到數(shù)據(jù)存儲請求時,將數(shù)據(jù)切分成k個數(shù)據(jù)片段,對每個數(shù)據(jù)片段復(fù)制,獲得k組數(shù)據(jù)片段分組,每組數(shù)據(jù)片段分組中包括一個數(shù)據(jù)片段和其對應(yīng)的復(fù)制數(shù)據(jù)片段;
(4)將一個數(shù)據(jù)片段分組中的數(shù)據(jù)片段和對應(yīng)的復(fù)制數(shù)據(jù)片段分別存儲到一個存儲分組中的兩個節(jié)點中,直到k組數(shù)據(jù)片段分組中的數(shù)據(jù)片段和復(fù)制數(shù)據(jù)片段都存儲到k個存儲分組中;
(5)當(dāng)存儲分組中的一個節(jié)點發(fā)生故障時,根據(jù)上述存儲分組中的另一個節(jié)點存儲的數(shù)據(jù)片段或復(fù)制數(shù)據(jù)片段,對上述發(fā)生故障的節(jié)點進(jìn)行修復(fù);
(6)對每個節(jié)點設(shè)置一對一的端口,當(dāng)節(jié)點發(fā)生故障時,上述節(jié)點對應(yīng)的端口自動關(guān)閉,當(dāng)發(fā)生故障的節(jié)點成功修復(fù)后,自動開啟上述節(jié)點對應(yīng)的端口。
本發(fā)明的有益效果包括:將多個節(jié)點進(jìn)行分組,每個分組中包括一個存儲風(fēng)險值較高的節(jié)點和一個存儲風(fēng)險值較低的節(jié)點,使得每個分組中的平均存儲風(fēng)險值相對均衡,避免了冗余數(shù)據(jù)分布的若干節(jié)點均為故障頻發(fā)的節(jié)點的情況,將冗余數(shù)據(jù)分布到這樣存儲風(fēng)險均衡的分組中,方便了數(shù)據(jù)維護和降低了數(shù)據(jù)丟失風(fēng)險。
【附圖說明】
此處所說明的附圖是用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,但并不構(gòu)成對本發(fā)明的不當(dāng)限定,在附圖中:
圖1是本發(fā)明分布式系統(tǒng)的結(jié)構(gòu)圖。
圖2是本發(fā)明分布式系統(tǒng)中數(shù)據(jù)存儲方法的流程圖。
【具體實施方式】
下面將結(jié)合附圖以及具體實施例來詳細(xì)說明本發(fā)明,其中的示意性實施例以及說明僅用來解釋本發(fā)明,但并不作為對本發(fā)明的限定。
參見附圖1,是本發(fā)明所應(yīng)用的分布式系統(tǒng),該系統(tǒng)包括多個計算節(jié)點。
參見附圖2,一種分布式系統(tǒng)中數(shù)據(jù)存儲方法,該方法包括如下步驟:
(1)將分布式系統(tǒng)中的m個節(jié)點i按照存儲容量、運行負(fù)載和故障頻率按照下述公式(a)計算確定每個節(jié)點的存儲風(fēng)險值Ri:
Ri=Si×Pi+1/Fi×Qi+Gi×Ti (a);
其中Si表示節(jié)點i的存儲容量,Pi表示存儲容量所對應(yīng)的權(quán)重,F(xiàn)i表示節(jié)點i的運行歷史中的最高系統(tǒng)運行負(fù)載,Qi表示運行負(fù)載所對應(yīng)的權(quán)重,Gi表示節(jié)點i的運行歷史中的故障頻率,Ti表示故障頻率所對應(yīng)的權(quán)重,且Pi,Qi,Gi>1;
其中,存儲容量、運行負(fù)載和故障頻率是分別影響一個節(jié)點存儲風(fēng)險值的不同因素,其中存儲容量表示一個節(jié)點的存儲能力,存儲容量越大、則上述節(jié)點因為數(shù)據(jù)存儲壓力造成的故障風(fēng)險越低,反之越高;一個節(jié)點的運行負(fù)載越大,則上述節(jié)點因為運行超負(fù)荷所造成的故障風(fēng)險越大,反之越低;一個節(jié)點在運行歷史周期內(nèi)發(fā)生的故障頻率越高,則表明上述節(jié)點在以后的周期內(nèi)發(fā)生故障的可能性越高,反之越低。
在一個實施方式中,存儲容量、運行負(fù)載和故障頻率記錄在一個表中,每個節(jié)點的存儲容量可以指其計算機硬盤存儲容量,將每個節(jié)點的存儲容量記錄在表中,監(jiān)視每個節(jié)點在預(yù)定時間周期內(nèi)的多次運行所占用的系統(tǒng)資源,并將運行所占用的最多系統(tǒng)資源作為最高系統(tǒng)運行負(fù)載記錄在上述表中,監(jiān)視每個節(jié)點在預(yù)定時間周期內(nèi)的故障發(fā)生次數(shù),作為故障頻率記錄在表中;
在計算節(jié)點的存儲風(fēng)險值Ri時,從表中讀取上述節(jié)點所對應(yīng)的存儲容量、運行負(fù)載和故障頻率按照上述公式(a)進(jìn)行計算。
(2)按照存儲風(fēng)險值從低到高的順序?qū)個節(jié)點排成一個有序排隊,將有序隊列中隊首第一個節(jié)點和隊尾最后一個節(jié)點取出構(gòu)成第一存儲分組,對于剩余節(jié)點構(gòu)成的有序隊列按照上述方式繼續(xù)處理構(gòu)成后續(xù)多個存儲分組,直至有序隊列中只有2個或3個節(jié)點,即對應(yīng)于m為偶數(shù)和奇數(shù)的情形,則將上述2個或3個節(jié)點作為一個存儲分組,最終m個節(jié)點分成k個存儲分組;
(3)當(dāng)系統(tǒng)接收到數(shù)據(jù)存儲請求時,將數(shù)據(jù)切分成k個數(shù)據(jù)片段,對每個數(shù)據(jù)片段復(fù)制,獲得k組數(shù)據(jù)片段分組,每組數(shù)據(jù)片段分組中包括一個數(shù)據(jù)片段和其對應(yīng)的復(fù)制數(shù)據(jù)片段;
(4)將一個數(shù)據(jù)片段分組中的數(shù)據(jù)片段和對應(yīng)的復(fù)制數(shù)據(jù)片段分別存儲到一個存儲分組中的兩個節(jié)點中,直到k組數(shù)據(jù)片段分組中的數(shù)據(jù)片段和復(fù)制數(shù)據(jù)片段都存儲到k個存儲分組中;
由于每個分組中包括一個存儲風(fēng)險值較高的節(jié)點和一個存儲風(fēng)險值較低的節(jié)點,使得每個分組中的平均存儲風(fēng)險值相對均衡,避免了冗余數(shù)據(jù)分布的若干節(jié)點均為故障頻發(fā)的節(jié)點的情況,將冗余數(shù)據(jù)分布到這樣存儲風(fēng)險均衡的分組中,方便了數(shù)據(jù)維護和降低了數(shù)據(jù)丟失風(fēng)險。
(5)當(dāng)存儲分組中的一個節(jié)點發(fā)生故障時,根據(jù)上述存儲分組中的另一個節(jié)點存儲的數(shù)據(jù)片段或復(fù)制數(shù)據(jù)片段,對上述發(fā)生故障的節(jié)點進(jìn)行修復(fù);
由此,將會大大提高修復(fù)數(shù)據(jù)的速度,縮短修復(fù)時間,當(dāng)多個節(jié)點發(fā)生故障時,對多個節(jié)點進(jìn)行并行修復(fù),一個數(shù)據(jù)片段分組中的數(shù)據(jù)片段和對應(yīng)的復(fù)制數(shù)據(jù)片段按照隨機方式存儲到一個存儲分組中的兩個節(jié)點中。在機器數(shù)量大于故障機器上的庫的數(shù)量時,整個修復(fù)過程的耗時通常僅需幾十分鐘,解決了數(shù)據(jù)高效自動修復(fù)的問題。
(6)對每個節(jié)點設(shè)置一對一的端口,當(dāng)節(jié)點發(fā)生故障時,上述節(jié)點對應(yīng)的端口自動關(guān)閉,當(dāng)發(fā)生故障的節(jié)點成功修復(fù)后,自動開啟上述節(jié)點對應(yīng)的端口。從而保障了數(shù)據(jù)的正確讀取,而且避免了使用錯誤列表訪問端口的問題。
通過上述方法,本發(fā)明將多個節(jié)點進(jìn)行分組,每個分組中包括一個存儲風(fēng)險值較高的節(jié)點和一個存儲風(fēng)險值較低的節(jié)點,使得每個分組中的平均存儲風(fēng)險值相對均衡,避免了冗余數(shù)據(jù)分布的若干節(jié)點均為故障頻發(fā)的節(jié)點的情況,將冗余數(shù)據(jù)分布到這樣存儲風(fēng)險均衡的分組中,方便了數(shù)據(jù)維護和降低了數(shù)據(jù)丟失風(fēng)險。
以上所述僅是本發(fā)明的較佳實施方式,故凡依本發(fā)明專利申請范圍所述的構(gòu)造、特征及原理所做的等效變化或修飾,均包括于本發(fā)明專利申請范圍內(nèi)。