本發(fā)明涉及分布式存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及一種分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法。
背景技術(shù):
在分布式存儲(chǔ)系統(tǒng)中,包含有多個(gè)節(jié)點(diǎn),其中的一個(gè)為中心節(jié)點(diǎn),多個(gè)節(jié)點(diǎn)協(xié)同工作完成各種任務(wù)。在具體實(shí)施中,為了提高系統(tǒng)的可靠性,通常需要提高數(shù)據(jù)的冗余度。當(dāng)發(fā)生寫數(shù)據(jù)塊的操作時(shí),不僅首節(jié)點(diǎn)要存儲(chǔ)該數(shù)據(jù)塊,而且需要其它的節(jié)點(diǎn)存儲(chǔ)該數(shù)據(jù)塊的副本。這里的首節(jié)點(diǎn)是指發(fā)起寫請(qǐng)求的客戶端所在的節(jié)點(diǎn),即被直接寫入數(shù)據(jù)塊的節(jié)點(diǎn)。
現(xiàn)有技術(shù)中,對(duì)于同一個(gè)數(shù)據(jù)塊的副本的防止方法主要包括兩種。一種是順序放置策略,一種是隨機(jī)放置策略。順序放置策略:通常是把各個(gè)節(jié)點(diǎn)看成是邏輯有序的,在對(duì)副本進(jìn)行分配時(shí)先將同一數(shù)據(jù)塊的所有副本進(jìn)行編號(hào),然后采用固定的映射方式將各個(gè)副本放置到對(duì)應(yīng)序號(hào)的節(jié)點(diǎn)上。其缺點(diǎn)是當(dāng)有節(jié)點(diǎn)進(jìn)出(即結(jié)點(diǎn)增加或者刪除,如故障、擴(kuò)減容)時(shí),副本的均衡性很難保證,而重新排列節(jié)點(diǎn)順序恢復(fù)原有的數(shù)據(jù)分布又會(huì)帶來巨大的網(wǎng)絡(luò)傳輸開銷。隨機(jī)放置策略:通常是基于某個(gè)哈希函數(shù)來決定數(shù)據(jù)的放置目錄,因此更多的時(shí)候可以稱為偽隨機(jī)放置策略。該方式是通過中心節(jié)點(diǎn)負(fù)責(zé)決定所有副本的放置位置,由首節(jié)點(diǎn)完成多個(gè)副本的生成,然后按照中心節(jié)點(diǎn)得到的放置位置放置。其缺點(diǎn)與順序放置策略相同,節(jié)點(diǎn)動(dòng)態(tài)進(jìn)出(也即結(jié)點(diǎn)增加或者刪除,如故障、擴(kuò)減容)中心結(jié)點(diǎn)的性能成為瓶頸,對(duì)系統(tǒng)的性能產(chǎn)生較大影響,同時(shí)該中心結(jié)點(diǎn)故障,也會(huì)影響整個(gè)系統(tǒng)的可靠性。
由此可見,如何克服由于節(jié)點(diǎn)動(dòng)態(tài)進(jìn)出而導(dǎo)致副本無法按照原有的計(jì)劃而進(jìn)行存儲(chǔ),從而造成系統(tǒng)可靠性降低的缺點(diǎn)是本領(lǐng)域技術(shù)人員亟待解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法,用于克服由于節(jié)點(diǎn)動(dòng)態(tài)進(jìn)出而導(dǎo)致副本無法按照原有的計(jì)劃而進(jìn)行存儲(chǔ),從而造成系統(tǒng)可靠性降低的問題。
為解決上述技術(shù)問題,本發(fā)明提供一種分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法,包括:
首節(jié)點(diǎn)在接收到寫數(shù)據(jù)塊的操作時(shí),將所述數(shù)據(jù)塊的副本和副本計(jì)數(shù)值發(fā)送至節(jié)點(diǎn)列表中的任意一個(gè)中間節(jié)點(diǎn);
中間節(jié)點(diǎn)在接收到所述副本后,存儲(chǔ)所述副本,并判斷當(dāng)前副本計(jì)數(shù)值是否為0,如果不為0,則將當(dāng)前副本計(jì)數(shù)值減1,將所述副本和當(dāng)前副本計(jì)數(shù)值發(fā)送至當(dāng)前節(jié)點(diǎn)列表中剩余的任意一個(gè)中間節(jié)點(diǎn),如果為0,則結(jié)束。
優(yōu)選地,在當(dāng)前副本計(jì)數(shù)值不為0的情況下還包括:
中間節(jié)點(diǎn)判斷當(dāng)前節(jié)點(diǎn)列表中是否還存在未接收所述副本的中間節(jié)點(diǎn);
如果存在,則將當(dāng)前副本計(jì)數(shù)值減1,將所述副本和當(dāng)前副本計(jì)數(shù)值發(fā)送至當(dāng)前節(jié)點(diǎn)列表中剩余的任意一個(gè)中間節(jié)點(diǎn);
如果不存在,則判斷當(dāng)前節(jié)點(diǎn)列表是否有新的中間節(jié)點(diǎn)加入;
如果有新的中間節(jié)點(diǎn)加入,則將當(dāng)前副本計(jì)數(shù)值減1,將所述副本和當(dāng)前副本計(jì)數(shù)值發(fā)送至新的中間節(jié)點(diǎn);
如果沒有新的中間節(jié)點(diǎn)加入,則返回所述判斷當(dāng)前節(jié)點(diǎn)列表是否有新的中間節(jié)點(diǎn)加入的步驟。
優(yōu)選地,所述節(jié)點(diǎn)列表包含所述首節(jié)點(diǎn)和各中間節(jié)點(diǎn)的ip地址。
優(yōu)選地,所述副本計(jì)數(shù)值小于所述節(jié)點(diǎn)列表中節(jié)點(diǎn)的總數(shù)量。
優(yōu)選地,還包括:所述首節(jié)點(diǎn)記錄接收其發(fā)送的所述副本和所述副本計(jì)數(shù)值的中間節(jié)點(diǎn)。
優(yōu)選地,還包括:各中間節(jié)點(diǎn)記錄接收其發(fā)送的所述副本和當(dāng)前副本計(jì)數(shù)值的中間節(jié)點(diǎn)。
優(yōu)選地,還包括:中心節(jié)點(diǎn)記錄所述數(shù)據(jù)塊和所述副本在所述首節(jié)點(diǎn)和各中間節(jié)點(diǎn)的傳輸軌跡。
優(yōu)選地,還包括:所述中心節(jié)點(diǎn)實(shí)時(shí)更新當(dāng)前分布式存儲(chǔ)系統(tǒng)中所述副本的數(shù)量。
優(yōu)選地還包括:所述中心節(jié)點(diǎn)在所述副本的數(shù)量小于閾值時(shí)報(bào)警提示。
本發(fā)明所提供的分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法,通過節(jié)點(diǎn)間的轉(zhuǎn)發(fā)實(shí)現(xiàn)了副本的存儲(chǔ),進(jìn)而實(shí)現(xiàn)網(wǎng)絡(luò)中的異步寫操作,由于本方法并不需要將生成副本的開銷集中在一個(gè)節(jié)點(diǎn)上,而是分?jǐn)偟礁鞴?jié)點(diǎn)上,因此系統(tǒng)的性能不會(huì)隨著冗余度的增加而降低,一定程度上保證了系統(tǒng)的可靠性。另外,由于是任意選取的節(jié)點(diǎn),因此不需要預(yù)先設(shè)置發(fā)送規(guī)則,能夠有效地解決在動(dòng)態(tài)網(wǎng)絡(luò)環(huán)境下副本的放置問題。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例,下面將對(duì)實(shí)施例中所需要使用的附圖做簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的一種中間節(jié)點(diǎn)的數(shù)據(jù)放置方法的流程圖;
圖3為本發(fā)明實(shí)施例提供的另一種分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法的流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下,所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)范圍。
本發(fā)明的核心是提供一種分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
圖1為本發(fā)明實(shí)施例提供的一種分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法的流程圖。如圖1所示,分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法的流程圖包括:
s10:首節(jié)點(diǎn)在接收到寫數(shù)據(jù)塊的操作時(shí),將數(shù)據(jù)塊的副本和副本計(jì)數(shù)值發(fā)送至節(jié)點(diǎn)列表中的任意一個(gè)中間節(jié)點(diǎn)。
s11:中間節(jié)點(diǎn)在接收到副本后,存儲(chǔ)副本,并判斷當(dāng)前副本計(jì)數(shù)值是否為0,如果不為0,則將當(dāng)前副本計(jì)數(shù)值減1,將副本和當(dāng)前副本計(jì)數(shù)值發(fā)送至當(dāng)前節(jié)點(diǎn)列表中剩余的任意一個(gè)中間節(jié)點(diǎn),如果為0,則結(jié)束。
需要說明的是,本實(shí)施例中的首節(jié)點(diǎn)是指發(fā)起寫請(qǐng)求的客戶端所在的節(jié)點(diǎn),即直接接收數(shù)據(jù)塊的節(jié)點(diǎn)。分布式存儲(chǔ)系統(tǒng)中,包含有多個(gè)節(jié)點(diǎn),除了首節(jié)點(diǎn)的其余節(jié)點(diǎn)都稱為中間節(jié)點(diǎn)??梢岳斫獾氖牵捎诜植际酱鎯?chǔ)系統(tǒng)中包含有中心節(jié)點(diǎn),因此,中心節(jié)點(diǎn)可能為首節(jié)點(diǎn)也可能為中間節(jié)點(diǎn)。首節(jié)點(diǎn)與中間節(jié)點(diǎn)的工作方法不同,而各中間節(jié)點(diǎn)的工作方式均相同。作為優(yōu)選的,副本計(jì)數(shù)值小于節(jié)點(diǎn)列表中節(jié)點(diǎn)的總數(shù)量。這里的節(jié)點(diǎn)列表中的總數(shù)量是指初始值。
圖1中,雖然只示出兩個(gè)步驟,但是并不代表每個(gè)步驟只能執(zhí)行一次,例如,對(duì)于同一個(gè)數(shù)據(jù)塊而言,步驟s10只需要執(zhí)行一次,而步驟s11則需要執(zhí)行多次,步驟s11為重復(fù)步驟。
由于分布式存儲(chǔ)系統(tǒng)中是動(dòng)態(tài)變化的,因此,節(jié)點(diǎn)列表也是實(shí)時(shí)變化的,在首節(jié)點(diǎn)接收到數(shù)據(jù)塊時(shí),節(jié)點(diǎn)列表可能有10個(gè)節(jié)點(diǎn),而在副本的傳輸過程中,可能節(jié)點(diǎn)列表只有5個(gè)節(jié)點(diǎn),或者即使有10個(gè)節(jié)點(diǎn),但是其中的節(jié)點(diǎn)已與最初的10個(gè)節(jié)點(diǎn)不同。在具體實(shí)施中,每個(gè)節(jié)點(diǎn)上均記錄當(dāng)前分布式存儲(chǔ)系統(tǒng)中的其它節(jié)點(diǎn)的信息,即每個(gè)節(jié)點(diǎn)都存在節(jié)點(diǎn)列表,并實(shí)時(shí)通過定時(shí)刷新來添加、刪除進(jìn)出系統(tǒng)的節(jié)點(diǎn)。
在步驟s11中,如果一個(gè)中間節(jié)點(diǎn)判斷出需要將副本發(fā)送至下一個(gè)中間節(jié)點(diǎn)時(shí),需要通過當(dāng)前節(jié)點(diǎn)列表選擇剩余的一個(gè)中間節(jié)點(diǎn),這里的剩余的中間節(jié)點(diǎn)是指未接收到副本的節(jié)點(diǎn)。例如,如果一個(gè)節(jié)點(diǎn)列表中有十個(gè)節(jié)點(diǎn),第一個(gè)節(jié)點(diǎn)為首節(jié)點(diǎn),第一個(gè)節(jié)點(diǎn)將副本和副本計(jì)數(shù)值發(fā)送至第二個(gè)節(jié)點(diǎn),當(dāng)?shù)诙€(gè)節(jié)點(diǎn)再發(fā)送副本和副本計(jì)數(shù)值時(shí),第一個(gè)節(jié)點(diǎn)和第二個(gè)節(jié)點(diǎn)就不是剩余的節(jié)點(diǎn),第三個(gè)節(jié)點(diǎn)-第十個(gè)節(jié)點(diǎn)才是剩余的節(jié)點(diǎn),即第二個(gè)節(jié)點(diǎn)只能將副本和副本計(jì)數(shù)值發(fā)送給第三個(gè)節(jié)點(diǎn)-第十個(gè)節(jié)點(diǎn)中的任意一個(gè)節(jié)點(diǎn)。這樣做的目的是為了能夠避免副本重復(fù)發(fā)送給一個(gè)節(jié)點(diǎn)。
在具體實(shí)施中,作為優(yōu)選的實(shí)施方式,節(jié)點(diǎn)列表包含首節(jié)點(diǎn)和各中間節(jié)點(diǎn)的ip地址。這樣使得首節(jié)點(diǎn)或中間節(jié)點(diǎn)在向其它中間節(jié)點(diǎn)發(fā)送副本和副本計(jì)數(shù)值時(shí)可以直接通過節(jié)點(diǎn)列表上的ip地址發(fā)送,無需再次查詢ip地址。
為了更加清楚本發(fā)明實(shí)施例中提到的中間節(jié)點(diǎn)的工作流程,本實(shí)施例中給出圖2。圖2為本發(fā)明實(shí)施例提供的一種中間節(jié)點(diǎn)的數(shù)據(jù)放置方法的流程圖。
本實(shí)施例提供的分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法,通過節(jié)點(diǎn)間的轉(zhuǎn)發(fā)實(shí)現(xiàn)了副本的存儲(chǔ),進(jìn)而實(shí)現(xiàn)網(wǎng)絡(luò)中的異步寫操作,由于本方法并不需要將生成副本的開銷集中在一個(gè)節(jié)點(diǎn)上,而是分?jǐn)偟礁鞴?jié)點(diǎn)上,因此系統(tǒng)的性能不會(huì)隨著冗余度的增加而降低,一定程度上保證了系統(tǒng)的可靠性。另外,由于是任意選取的節(jié)點(diǎn),因此不需要預(yù)先設(shè)置發(fā)送規(guī)則,能夠有效地解決在動(dòng)態(tài)網(wǎng)絡(luò)環(huán)境下副本的放置問題。
在圖2的基礎(chǔ)上,在當(dāng)前副本計(jì)數(shù)值不為0的情況下還包括:
s20:中間節(jié)點(diǎn)判斷當(dāng)前節(jié)點(diǎn)列表中是否還存在未接收副本的中間節(jié)點(diǎn);如果存在,進(jìn)入步驟s112,如果不存在,進(jìn)入步驟s21。
s21:判斷當(dāng)前節(jié)點(diǎn)列表是否有新的中間節(jié)點(diǎn)加入;如果有新的中間節(jié)點(diǎn)加入,則進(jìn)入步驟s22,否則,返回步驟s21。
s22:將當(dāng)前副本計(jì)數(shù)值減1,將副本和當(dāng)前副本計(jì)數(shù)值發(fā)送至新的中間節(jié)點(diǎn);
s20:如果沒有新的中間節(jié)點(diǎn)加入,則返回判斷當(dāng)前節(jié)點(diǎn)列表是否有新的中間節(jié)點(diǎn)加入的步驟。
通過增加步驟s20,可以避免當(dāng)前副本計(jì)數(shù)值大于剩余中間節(jié)點(diǎn)的數(shù)量而導(dǎo)致分布式存儲(chǔ)系統(tǒng)中,副本的實(shí)際數(shù)量沒有達(dá)到副本計(jì)數(shù)值。例如,如果副本計(jì)數(shù)值為10,在一個(gè)中間節(jié)點(diǎn)存儲(chǔ)了副本后,當(dāng)前副本計(jì)數(shù)值為3,但是此時(shí)當(dāng)前節(jié)點(diǎn)列表中的中間節(jié)點(diǎn)均已經(jīng)保存了副本,此時(shí)與副本計(jì)數(shù)值10還差3個(gè),說明副本的冗余度還沒有達(dá)到預(yù)期值,系統(tǒng)的可靠性還不夠高。隨著系統(tǒng)的運(yùn)行,當(dāng)有新的中間節(jié)點(diǎn)加入時(shí),則繼續(xù)執(zhí)行中間節(jié)點(diǎn)的工作流程,本處不再贅述。可以理解的是,一個(gè)中間節(jié)點(diǎn)在接收到副本之后,將副本存儲(chǔ),然后再將新的副本發(fā)送至下一個(gè)中間節(jié)點(diǎn)時(shí),如果當(dāng)前節(jié)點(diǎn)列表中不存在未接收副本的中間節(jié)點(diǎn),則這個(gè)中間節(jié)點(diǎn)將會(huì)保存這個(gè)副本,等待新的中間節(jié)點(diǎn)加入。因此,本實(shí)施例中,起到一個(gè)緩存的作用,避免副本的丟失,而造成系統(tǒng)的冗余度沒有達(dá)到預(yù)定的要求。
作為優(yōu)選的實(shí)施方式,還包括:首節(jié)點(diǎn)記錄接收其發(fā)送的副本和副本計(jì)數(shù)值的中間節(jié)點(diǎn)。
作為優(yōu)選的實(shí)施方式,還包括:各中間節(jié)點(diǎn)記錄接收其發(fā)送的副本和當(dāng)前副本計(jì)數(shù)值的中間節(jié)點(diǎn)。
作為優(yōu)選的實(shí)施方式,還包括:中心節(jié)點(diǎn)記錄數(shù)據(jù)塊和副本在首節(jié)點(diǎn)和各中間節(jié)點(diǎn)的傳輸軌跡。
上述三種優(yōu)選的實(shí)施方式,可以在用戶查詢時(shí),能夠向用戶提供副本在放置過程中的傳輸軌跡。由于中心節(jié)點(diǎn)是分布式存儲(chǔ)系統(tǒng)的重要節(jié)點(diǎn),其可靠性要比其他節(jié)點(diǎn)的可靠性較高,因此,通過中心節(jié)點(diǎn)的記錄能夠保證傳輸軌跡的安全性。
作為優(yōu)選的實(shí)施方式,還包括:中心節(jié)點(diǎn)實(shí)時(shí)更新當(dāng)前分布式存儲(chǔ)系統(tǒng)中副本的數(shù)量。
由于分布式存儲(chǔ)系統(tǒng)在運(yùn)行過程中,節(jié)點(diǎn)的進(jìn)出是不固定的,隨著節(jié)點(diǎn)的進(jìn)出,都有可能影響一個(gè)數(shù)據(jù)塊的副本的數(shù)量,例如,一個(gè)節(jié)點(diǎn)存儲(chǔ)了一個(gè)副本,如果這個(gè)節(jié)點(diǎn)故障,退出系統(tǒng)后,則當(dāng)前系統(tǒng)內(nèi)的這個(gè)副本的數(shù)量就少了一個(gè),很顯然降低了副本的冗余度,也降低了系統(tǒng)的可靠性。通過更新副本的數(shù)量可以隨時(shí)了解系統(tǒng)的運(yùn)行情況,也可以為后續(xù)的補(bǔ)救措施提供依據(jù)。
作為優(yōu)選的實(shí)施方式,還包括:中心節(jié)點(diǎn)在副本的數(shù)量小于閾值時(shí)報(bào)警提示。
對(duì)于有些副本來說,是非常重要的信息,一旦丟失造成的后果非常嚴(yán)重,因此,為了避免副本的大量丟失,本實(shí)施例中,在副本數(shù)量小于閾值時(shí)報(bào)警提示??梢岳斫獾氖?,閾值的確定需要根據(jù)實(shí)際情況而定,本實(shí)施例不再贅述。
以上對(duì)本發(fā)明所提供的分布式存儲(chǔ)系統(tǒng)的數(shù)據(jù)放置方法進(jìn)行了詳細(xì)介紹。說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
還需要說明的是,在本說明書中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。