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