基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,該方法通過(guò)這種授權(quán)的副本同步機(jī)制維護(hù)副本一致性,需要更新的副本所在的存儲(chǔ)節(jié)點(diǎn)向協(xié)調(diào)節(jié)點(diǎn)發(fā)送同步請(qǐng)求,協(xié)調(diào)節(jié)點(diǎn)依據(jù)分區(qū)狀態(tài)總表判斷該存儲(chǔ)節(jié)點(diǎn)是否符合執(zhí)行副本同步操作的條件,授權(quán)給符合條件的存儲(chǔ)節(jié)點(diǎn)執(zhí)行副本同步操作。本發(fā)明的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法極大地降低副本一致性的重復(fù)檢測(cè)率、同步帶寬占用率和不一致窗口的大小,避免多個(gè)副本的版本沖突問(wèn)題,并增加副本同步的時(shí)效性。使分布式文件存儲(chǔ)系統(tǒng)對(duì)外部請(qǐng)求的響應(yīng)、副本一致性的檢測(cè)更加迅速,提升系統(tǒng)的服務(wù)能力和最終一致性的效率。
【專(zhuān)利說(shuō)明】基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲(chǔ)【技術(shù)領(lǐng)域】,具體涉及一種基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法。
【背景技術(shù)】
[0002]傳統(tǒng)的數(shù)據(jù)存儲(chǔ)技術(shù)將一份數(shù)據(jù)存儲(chǔ)在一個(gè)節(jié)點(diǎn)上,需要該數(shù)據(jù)的用戶都須到同一個(gè)節(jié)點(diǎn)上讀取它。近年來(lái),隨著互聯(lián)網(wǎng)中的用戶對(duì)資源的需求量日益增多,網(wǎng)絡(luò)容易出現(xiàn)擁塞,而處理能力有限的節(jié)點(diǎn)也會(huì)因?yàn)樵L問(wèn)數(shù)量太大而宕機(jī)。且傳統(tǒng)的數(shù)據(jù)存儲(chǔ)技術(shù)在可擴(kuò)展性,高可用性等方面遠(yuǎn)遠(yuǎn)無(wú)法滿足當(dāng)今的數(shù)據(jù)存儲(chǔ)需求,20世紀(jì)80年代,分布式文件存儲(chǔ)的概念被提出。
[0003]分布式文件存儲(chǔ)是指利用分布式技術(shù),通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連,將網(wǎng)絡(luò)中不同節(jié)點(diǎn)上的存儲(chǔ)設(shè)備通過(guò)分布式應(yīng)用軟件集合起來(lái),由存儲(chǔ)系統(tǒng)統(tǒng)一管理,協(xié)同工作,共同對(duì)外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù),向用戶提供統(tǒng)一的、對(duì)象化的訪問(wèn)接口,屏蔽對(duì)物理設(shè)備的直接操作和資源管理。分布式文件存儲(chǔ)系統(tǒng)通過(guò)分布式的架構(gòu),創(chuàng)建多份副本,并將它們合理分布在多個(gè)服務(wù)器節(jié)點(diǎn)上,供用戶存取,利用多臺(tái)存儲(chǔ)服務(wù)器分擔(dān)存儲(chǔ)負(fù)荷以及處理訪問(wèn)請(qǐng)求,可以有效降低節(jié)點(diǎn)失效率,減少用戶響應(yīng)時(shí)間。
[0004]通過(guò)分布式文件存儲(chǔ),創(chuàng)建多份副本,利用位置服務(wù)器定位存儲(chǔ)信息,不但提高了系統(tǒng)的可靠性、可用性和存取效率,可以將各類(lèi)存儲(chǔ)設(shè)備結(jié)合使用,提供良好的可擴(kuò)展的存儲(chǔ)服務(wù)。相比傳統(tǒng)的存儲(chǔ)設(shè)備,其在擴(kuò)展性,安全性,可靠性等方面,都有了很大的提升。
[0005]然而,由于存在多個(gè)副本,會(huì)出現(xiàn)副本不同步的問(wèn)題,即多個(gè)副本不一致性,造成不同用戶訪問(wèn)的結(jié)果不一致,導(dǎo)致分布式文件存儲(chǔ)系統(tǒng)可用性和可靠性降低。為了在分布式文件存儲(chǔ)系統(tǒng)中保持副本的一致性,提出了文件副本策略。一方面是維護(hù)副本的一致性,提高分布式文件存儲(chǔ)系統(tǒng)的可用性和可靠性。另一方面是提升系統(tǒng)的整體性能。例如通過(guò)在存儲(chǔ)服務(wù)器中增加副本,讓更多的存儲(chǔ)服務(wù)器提供服務(wù),增強(qiáng)系統(tǒng)的負(fù)載均衡和擴(kuò)展能力。
[0006]近年來(lái)提出了很多的分布式架構(gòu)下的文件存儲(chǔ)副本管理方案。按照分布式文件系統(tǒng)的架構(gòu)不同,主要可以分為中心化架構(gòu)存儲(chǔ)系統(tǒng)的副本管理策略和對(duì)稱(chēng)架構(gòu)存儲(chǔ)系統(tǒng)的副本管理策略。
[0007](I)中心化架構(gòu)存儲(chǔ)系統(tǒng)的副本管理策略
[0008]在中心化架構(gòu)的存儲(chǔ)系統(tǒng)中主要采用模擬存儲(chǔ)狀態(tài)法、主副本法來(lái)實(shí)現(xiàn)副本的一致性檢測(cè)。模擬存儲(chǔ)狀態(tài)法在每個(gè)存儲(chǔ)節(jié)點(diǎn)中維護(hù)文件塊列表,通過(guò)心跳與名字節(jié)點(diǎn)進(jìn)行塊信息交換,由名字節(jié)點(diǎn)控制副本的同步和復(fù)制。主副本法在同一個(gè)文件的多個(gè)副本中挑選出一個(gè)基準(zhǔn)副本,所有的寫(xiě)操作都對(duì)主副本進(jìn)行,并由主副本控制其他副本的同步和復(fù)制。
[0009](2)對(duì)稱(chēng)架構(gòu)存儲(chǔ)系統(tǒng)的副本管理策略
[0010]由于中心化架構(gòu)存在明顯的名字節(jié)點(diǎn)瓶頸問(wèn)題,因此擴(kuò)展性更好的對(duì)稱(chēng)架構(gòu)被提出并趨于主流。在對(duì)稱(chēng)架構(gòu)存儲(chǔ)系統(tǒng)中主要采用存儲(chǔ)節(jié)點(diǎn)間“點(diǎn)到點(diǎn)”的副本檢測(cè)機(jī)制。顧名思義,在“點(diǎn)到點(diǎn)”的副本檢測(cè)機(jī)制中,存儲(chǔ)節(jié)點(diǎn)通過(guò)請(qǐng)求其對(duì)等的遠(yuǎn)端節(jié)點(diǎn)上的副本校驗(yàn)碼和版本號(hào),與本地副本進(jìn)行比較,若本地副本與遠(yuǎn)端副本不一致且遠(yuǎn)端副本版本較舊,則本地副本會(huì)將本地副本數(shù)據(jù)推送到對(duì)等節(jié)點(diǎn),實(shí)現(xiàn)“點(diǎn)到點(diǎn)”的副本同步。
[0011]傳統(tǒng)的對(duì)稱(chēng)存儲(chǔ)架構(gòu)的副本管理策略存在以下不足:
[0012]I)重復(fù)檢測(cè)量大。對(duì)于一個(gè)每個(gè)分區(qū)具有3個(gè)副本的對(duì)稱(chēng)架構(gòu)存儲(chǔ)系統(tǒng),要保證3個(gè)副本的一致性,需要3個(gè)存儲(chǔ)節(jié)點(diǎn)間發(fā)送6次消息進(jìn)行檢測(cè)。這種方式雖然易于實(shí)現(xiàn),但占用大量帶寬,降低了系統(tǒng)的總體性能。
[0013]2)不一致窗口放大。對(duì)于單個(gè)存儲(chǔ)節(jié)點(diǎn)來(lái)說(shuō),每一輪副本一致性的檢測(cè)都會(huì)消耗一定的時(shí)間,這個(gè)間隔時(shí)間會(huì)隨著存儲(chǔ)節(jié)點(diǎn)上的分區(qū)數(shù)量的增多而增大,從而導(dǎo)致大量不一致的副本被延遲較久才能檢測(cè),增大了系統(tǒng)的不一致窗口,使得最終一致性的效率較低,用戶極易訪問(wèn)到不一致的數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0014]針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提供了基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,避免了重復(fù)檢測(cè),且不一致窗口小。
[0015]一種基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,所述的副本同步方法應(yīng)用于對(duì)稱(chēng)架構(gòu)的分布式文件存儲(chǔ)系統(tǒng),所述的分布式文件存儲(chǔ)系統(tǒng)包括多個(gè)存儲(chǔ)節(jié)點(diǎn)和一個(gè)協(xié)調(diào)節(jié)點(diǎn),所述的副本同步方法包括:
[0016](I)初始化
[0017]1-1)每個(gè)存儲(chǔ)節(jié)點(diǎn)上建立分區(qū)狀態(tài)表,所述的分區(qū)狀態(tài)表實(shí)時(shí)記錄相應(yīng)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)分區(qū)的分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào),初始化后分區(qū)狀態(tài)和版本號(hào)為空;
[0018]所述的分區(qū)狀態(tài)包括:“完全同步”,“最新”,“同步到遠(yuǎn)端”和“更新到本地”四種狀態(tài);
[0019]1-2)所述的協(xié)調(diào)節(jié)點(diǎn)將所有分區(qū)狀態(tài)表匯總并建立分區(qū)狀態(tài)總表;
[0020](2)發(fā)送同步請(qǐng)求
[0021]若某存儲(chǔ)節(jié)點(diǎn)中某一存儲(chǔ)分區(qū)的數(shù)據(jù)被修改,且該存儲(chǔ)分區(qū)無(wú)狀態(tài)沖突,則更新該存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“最新”,同時(shí)以該存儲(chǔ)節(jié)點(diǎn)為源節(jié)點(diǎn)向所述的協(xié)調(diào)節(jié)點(diǎn)發(fā)送當(dāng)前存儲(chǔ)分區(qū)的同步請(qǐng)求;
[0022](3)請(qǐng)求返回指令
[0023]協(xié)調(diào)節(jié)點(diǎn)接收所述的同步請(qǐng)求,并根據(jù)分區(qū)狀態(tài)總表,判斷當(dāng)前存儲(chǔ)分區(qū)是否滿足副本同步操作的執(zhí)行條件,并發(fā)送相應(yīng)的返回指令,具體為:
[0024]3-1)若不滿足所述的執(zhí)行條件,則協(xié)調(diào)節(jié)點(diǎn)維持當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)不變,并向源節(jié)點(diǎn)返回“申請(qǐng)失敗”;
[0025]3-2)若滿足所述的執(zhí)行條件,則協(xié)調(diào)節(jié)點(diǎn)更新前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“同步到遠(yuǎn)端”,并向源節(jié)點(diǎn)返回“申請(qǐng)成功”;
[0026]( 4 )執(zhí)行同步操作
[0027]源節(jié)點(diǎn)接收所述的返回指令,并做出如下操作:
[0028]4-1)若返回指令為“申請(qǐng)失敗”,則源節(jié)點(diǎn)保持當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)不變,并等待副本同步;
[0029]4-2)若返回指令為“申請(qǐng)成功”,則源節(jié)點(diǎn)向當(dāng)前存儲(chǔ)分區(qū)的所有副本所在的存儲(chǔ)節(jié)點(diǎn)執(zhí)行副本同步操作,使當(dāng)前存儲(chǔ)分區(qū)的所有副本一致。
[0030]本發(fā)明的副本同步方法中,各存儲(chǔ)節(jié)點(diǎn)分別維護(hù)一個(gè)分區(qū)狀態(tài)總表,記錄了相應(yīng)存儲(chǔ)節(jié)點(diǎn)中所有存儲(chǔ)分區(qū)的分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào);協(xié)調(diào)節(jié)點(diǎn)維護(hù)分區(qū)狀態(tài)總表,記錄了該系統(tǒng)中所有節(jié)點(diǎn)的所有分區(qū)信息,包含分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào)。協(xié)調(diào)節(jié)點(diǎn)接收存儲(chǔ)節(jié)點(diǎn)的同步請(qǐng)求,依據(jù)分區(qū)狀態(tài)總表判斷該存儲(chǔ)節(jié)點(diǎn)是否符合執(zhí)行副本同步操作的條件,授權(quán)給符合條件的存儲(chǔ)節(jié)點(diǎn),讓該節(jié)點(diǎn)執(zhí)行副本同步操作;不符合條件的存儲(chǔ)節(jié)點(diǎn),則表明有其他副本節(jié)點(diǎn)先于源節(jié)點(diǎn)發(fā)送了副本同步申請(qǐng),源節(jié)點(diǎn)保持狀態(tài)不變,并等待副本同步。這種授權(quán)的副本同步機(jī)制可以有效減少無(wú)用復(fù)制的產(chǎn)生,降低同步帶寬占用,同時(shí)可以很好的對(duì)副本版本進(jìn)行管理,避免多個(gè)副本的版本沖突問(wèn)題,并增加副本同步的時(shí)效性,減小不一致窗口。且副本同步操作是在存儲(chǔ)節(jié)點(diǎn)間進(jìn)行的,并不經(jīng)過(guò)協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)只負(fù)責(zé)授權(quán)根據(jù)請(qǐng)求授權(quán)副本同步操作,可以有效的減輕協(xié)調(diào)節(jié)點(diǎn)的壓力。
[0031]所述步驟(I)中的四種分區(qū)狀態(tài)按照有限狀態(tài)機(jī)原理轉(zhuǎn)換。
[0032]通過(guò)有限狀態(tài)機(jī)原理實(shí)現(xiàn)四種分區(qū)狀態(tài)轉(zhuǎn)換,能夠限定四種分區(qū)狀態(tài)相互轉(zhuǎn)換的順序。
[0033]所述步驟(2)中的同步請(qǐng)求攜帶有當(dāng)前存儲(chǔ)分區(qū)的分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào)。
[0034]同步請(qǐng)求中攜帶的信息便于協(xié)調(diào)節(jié)點(diǎn)進(jìn)行處理。
[0035]所述步驟(3)中的執(zhí)行條件為當(dāng)前存儲(chǔ)分區(qū)無(wú)狀態(tài)沖突和版本沖突。
[0036]所述的狀態(tài)沖突通過(guò)狀態(tài)的轉(zhuǎn)換原理確定,若當(dāng)前存儲(chǔ)分區(qū)不滿足有限狀態(tài)機(jī)的轉(zhuǎn)換條件,則認(rèn)為當(dāng)前存儲(chǔ)分區(qū)狀態(tài)沖突。
[0037]所述的版本沖突根據(jù)以下方法判定:若當(dāng)前存儲(chǔ)分區(qū)的副本版本不是所有副本中最新的,則認(rèn)為當(dāng)前存儲(chǔ)分區(qū)版本沖突。
[0038]狀態(tài)沖突的判斷先于版本沖突,當(dāng)不存在狀態(tài)沖突才會(huì)進(jìn)一步判斷是否存在版本沖突。狀態(tài)沖突既可以根據(jù)存儲(chǔ)節(jié)點(diǎn)上的狀態(tài)分區(qū)表判斷也可以根據(jù)協(xié)調(diào)節(jié)點(diǎn)上分區(qū)狀態(tài)總表判定。版本沖突在協(xié)調(diào)節(jié)點(diǎn)上進(jìn)行判定,通過(guò)比較所有存儲(chǔ)節(jié)點(diǎn)上所存副本的版本號(hào),判斷試圖更新的版本是否為所有副本版本中的最新的,若不是最新則為版本沖突。狀態(tài)沖突一般是由于其他存儲(chǔ)節(jié)點(diǎn)先于當(dāng)前存儲(chǔ)節(jié)點(diǎn)申請(qǐng)了同步操作、且該同步操作未執(zhí)行到當(dāng)前存儲(chǔ)節(jié)點(diǎn)引發(fā)的。這兩個(gè)請(qǐng)求的時(shí)間差即為不一致窗口。通過(guò)協(xié)調(diào)節(jié)點(diǎn)的同步設(shè)計(jì)架構(gòu),以及狀態(tài)總表的狀態(tài)和版本控制,可以有效的減小不一致窗口。
[0039]作為優(yōu)選,所述的副本同步操作依據(jù)NWR策略進(jìn)行。
[0040]分布式系統(tǒng)的一致性(Consistency)、可用性(Availability)、分區(qū)可容忍性(Tolerance of network Partition)無(wú)法同時(shí)滿足,采用經(jīng)典的NWR策略,在以上三種性能中作出權(quán)衡。N表示需要N個(gè)數(shù)據(jù)備份,W表示數(shù)據(jù)寫(xiě)入N個(gè)節(jié)點(diǎn)才算成功,R表示需要讀取R個(gè)節(jié)點(diǎn)的數(shù)據(jù)才能保證其中有一份是最新的。例如需要備份數(shù)為3份,寫(xiě)入2份即表示數(shù)據(jù)成功寫(xiě)入,則必須讀取2份數(shù)據(jù)才能保證其中有一份是最新的。
[0041]所述步驟3-2)中:
[0042]副本同步操作前,源節(jié)點(diǎn)將分區(qū)狀態(tài)表中當(dāng)前存儲(chǔ)分區(qū)的狀態(tài)更新為“同步到遠(yuǎn)端”;[0043]副本同步操作過(guò)程中,各副本所在的存儲(chǔ)節(jié)點(diǎn)將相應(yīng)存儲(chǔ)分區(qū)的分區(qū)狀態(tài)更新為“更新到本地”;
[0044]副本同步操作完成后,源存儲(chǔ)節(jié)點(diǎn)和副本所在存儲(chǔ)節(jié)點(diǎn)以及協(xié)調(diào)節(jié)點(diǎn)將相應(yīng)的存儲(chǔ)分區(qū)的分區(qū)狀態(tài)都更新為“完全同步”。
[0045]在執(zhí)行副本同步操作前、后以及同步操作過(guò)程中,相關(guān)存儲(chǔ)節(jié)點(diǎn)根據(jù)操作實(shí)時(shí)更新相應(yīng)的存儲(chǔ)分區(qū)的分區(qū)狀態(tài)。由于數(shù)據(jù)讀寫(xiě)操作與副本同步的實(shí)現(xiàn)相當(dāng)獨(dú)立,采用基于分區(qū)狀態(tài)進(jìn)行數(shù)據(jù)操作策略,針對(duì)設(shè)定不同的分區(qū)狀態(tài)設(shè)定不同讀寫(xiě)策略,有效解決了狀態(tài)轉(zhuǎn)換過(guò)程中發(fā)生的分區(qū)讀寫(xiě)沖突問(wèn)題,防止出現(xiàn)多版本混亂的問(wèn)題,具體方法如下:
[0046]I)副本所在存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“更新到本地”:
[0047]若為讀取操作,則從該存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的副本同步操作對(duì)應(yīng)的遠(yuǎn)端節(jié)點(diǎn)(各副本所在的存儲(chǔ)節(jié)點(diǎn))中讀取相應(yīng)分區(qū)的數(shù)據(jù),
[0048]若為修改操作,則該存儲(chǔ)節(jié)點(diǎn)不再接受上傳、刪除等修改操作,并將所述的修改操作轉(zhuǎn)移給該存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的副本同步操作對(duì)應(yīng)的遠(yuǎn)端節(jié)點(diǎn),對(duì)遠(yuǎn)端節(jié)點(diǎn)中相應(yīng)存儲(chǔ)分區(qū)進(jìn)行修改操作;
[0049]2)副本所在存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“同步到遠(yuǎn)端”:
[0050]若為讀取操作,則直接從當(dāng)前存儲(chǔ)節(jié)點(diǎn)讀取數(shù)據(jù),
[0051]若為修改操作,則等待當(dāng)副本同步操作完成后,再將進(jìn)行該修改操作;
[0052]3)副本所在存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“最新”或“完全同步”狀態(tài):
[0053]若為讀寫(xiě)操作,則直接從當(dāng)前存儲(chǔ)節(jié)點(diǎn)讀取數(shù)據(jù),
[0054]若為修改操作,則立即執(zhí)行該讀寫(xiě)操作,且在該讀寫(xiě)操作完成后,將相應(yīng)的存儲(chǔ)分區(qū)狀態(tài)更新為“最新”,并向協(xié)調(diào)節(jié)點(diǎn)發(fā)送該存儲(chǔ)分區(qū)的同步請(qǐng)求。
[0055]所述的分布式文件存儲(chǔ)系統(tǒng)還包括一個(gè)熱備節(jié)點(diǎn),當(dāng)前存儲(chǔ)節(jié)點(diǎn)發(fā)送的同步請(qǐng)求連續(xù)多次超時(shí),則認(rèn)為協(xié)調(diào)節(jié)點(diǎn)巖機(jī),熱備節(jié)點(diǎn)自動(dòng)接替協(xié)調(diào)節(jié)點(diǎn)接收同步請(qǐng)求并發(fā)送返回指令,在協(xié)調(diào)節(jié)點(diǎn)恢復(fù)后,再將同步請(qǐng)求交由協(xié)調(diào)節(jié)點(diǎn)處理。
[0056]熱備節(jié)點(diǎn)作為協(xié)調(diào)節(jié)點(diǎn)的備用節(jié)點(diǎn),在協(xié)調(diào)節(jié)點(diǎn)宕機(jī)時(shí),自動(dòng)啟用,提高了系統(tǒng)的
可靠性。
[0057]本發(fā)明提供的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,通過(guò)授權(quán)的副本同步操作機(jī)制維護(hù)分布式文件存儲(chǔ)系統(tǒng)中的副本一致性,極大地降低副本一致性的重復(fù)檢測(cè)率、同步帶寬占用和不一致窗口,從而降低副本同步操作對(duì)分布式文件存儲(chǔ)系統(tǒng)的壓力,使分布式文件存儲(chǔ)系統(tǒng)對(duì)外部請(qǐng)求的響應(yīng)、副本一致性的檢測(cè)更加迅速,提升系統(tǒng)的服務(wù)能力和最終一致性的效率。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0058]圖1為本實(shí)施例的具有協(xié)調(diào)節(jié)點(diǎn)的對(duì)稱(chēng)架構(gòu)的分布式文件存儲(chǔ)系統(tǒng)的架構(gòu)圖;
[0059]圖2為本實(shí)施例是基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法的流程圖;
[0060]圖3為分區(qū)狀態(tài)轉(zhuǎn)換的有限狀態(tài)機(jī)示意圖。
【具體實(shí)施方式】
[0061]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步說(shuō)明。[0062]本實(shí)施例中基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法的應(yīng)用環(huán)境為對(duì)稱(chēng)架構(gòu)的分布式文件存儲(chǔ)系統(tǒng)。如圖1所示,該對(duì)稱(chēng)架構(gòu)的分布式文件存儲(chǔ)系統(tǒng)包括多個(gè)對(duì)等的存儲(chǔ)節(jié)點(diǎn)、一個(gè)協(xié)調(diào)節(jié)點(diǎn)和一個(gè)熱備節(jié)點(diǎn)。本施例中存儲(chǔ)節(jié)點(diǎn)與協(xié)調(diào)節(jié)點(diǎn)的通信,以及存儲(chǔ)節(jié)點(diǎn)之間的通信均采用基于HTTP協(xié)議的同步通信協(xié)議。
[0063]本實(shí)施例的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,具體工作流程如圖2所示,包括:
[0064]( I)初始化
[0065]1-1)每個(gè)存儲(chǔ)節(jié)點(diǎn)上建立分區(qū)狀態(tài)表(本實(shí)施例中為哈希表),實(shí)時(shí)記錄相應(yīng)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)分區(qū)的分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào),初始化后分區(qū)狀態(tài)和版本號(hào)為空;
[0066]1-2)所述的協(xié)調(diào)節(jié)點(diǎn)將所有分區(qū)狀態(tài)表匯總并建立分區(qū)狀態(tài)總表;
[0067]分區(qū)狀態(tài)有如下四種:
[0068]完全冋步:表明所有副本保持完全冋步的狀態(tài);
[0069]最新:表明副本最新,且并未與其他副本廣生同步;
[0070]同步到遠(yuǎn)端:表明最新的副本,且該副本正在同步到遠(yuǎn)端副本;
[0071]更新到本地:表明舊的副本,且正在從遠(yuǎn)端接收最新的副本。
[0072]四種分區(qū)狀態(tài)根據(jù)有限狀態(tài)機(jī)原理進(jìn)行轉(zhuǎn)換,具體轉(zhuǎn)換過(guò)程如圖3所示:
[0073](a)當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“最新”:
[0074]若該存儲(chǔ)分區(qū)被修改,則仍為“最新”狀態(tài);
[0075]若該分區(qū)正在向協(xié)調(diào)節(jié)點(diǎn)發(fā)送同步請(qǐng)求,且收到的返回信息為“申請(qǐng)成功”時(shí),則變換為“同步到遠(yuǎn)端”狀態(tài);
[0076]若接收到對(duì)源節(jié)點(diǎn)發(fā)送的副本同步操作,則變換為“更新到本地”狀態(tài);
[0077](b)當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“同步到遠(yuǎn)端”:
[0078]副本同步操作執(zhí)行后,則變換為“完全同步”狀態(tài);
[0079](c)當(dāng)副本處于“更新到本地”狀態(tài):
[0080]副本同步操作執(zhí)行完畢,則變換為“完全同步”狀態(tài);
[0081](d)當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“完全同步”:
[0082]若當(dāng)前存儲(chǔ)分區(qū)的數(shù)據(jù)被修改,則變換為“最新”狀態(tài),
[0083]若當(dāng)前分區(qū)接收到對(duì)源節(jié)點(diǎn)發(fā)送的副本同步操作,則變換為“更新到本地”。
[0084](2)發(fā)送同步請(qǐng)求
[0085]若某存儲(chǔ)節(jié)點(diǎn)中某一存儲(chǔ)分區(qū)的數(shù)據(jù)被修改,且該存儲(chǔ)分區(qū)無(wú)狀態(tài)沖突,即該存儲(chǔ)分區(qū)能夠滿足狀態(tài)機(jī)原理的從當(dāng)前分區(qū)狀態(tài)轉(zhuǎn)換至“最新”,則更新該節(jié)點(diǎn)的分區(qū)狀態(tài)表中的相應(yīng)分區(qū)的分區(qū)狀態(tài)為“最新”,同時(shí)以該存儲(chǔ)節(jié)點(diǎn)為源節(jié)點(diǎn)向協(xié)調(diào)節(jié)點(diǎn)發(fā)送當(dāng)前分區(qū)的同步請(qǐng)求;該同步請(qǐng)求攜帶有當(dāng)前存儲(chǔ)分區(qū)的分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào)。
[0086](3)請(qǐng)求返回
[0087]協(xié)調(diào)節(jié)點(diǎn)接收同步請(qǐng)求,并根據(jù)分區(qū)狀態(tài)總表,判斷當(dāng)前存儲(chǔ)分區(qū)的是否滿足副本執(zhí)行條件,向源節(jié)點(diǎn)發(fā)送返回指令:
[0088]3-1)先判斷是否有狀態(tài)沖突,若有狀態(tài)沖突則向源節(jié)點(diǎn)返回“申請(qǐng)失敗”;
[0089]3-2)若無(wú)狀態(tài)沖突,進(jìn)一步判定是否有版本沖突,若無(wú)版本沖突,則向源節(jié)點(diǎn)返回“申請(qǐng)成功”。[0090]從存儲(chǔ)節(jié)點(diǎn)的分區(qū)狀態(tài)表或協(xié)調(diào)節(jié)點(diǎn)上的分區(qū)狀態(tài)總表中獲取當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài),若當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)無(wú)法根據(jù)有限狀態(tài)機(jī)原理從當(dāng)前的狀態(tài)轉(zhuǎn)換為“同步到遠(yuǎn)端”,則認(rèn)為當(dāng)前存儲(chǔ)分區(qū)狀態(tài)沖突;
[0091]從協(xié)調(diào)節(jié)點(diǎn)上的分區(qū)狀態(tài)總表中獲取當(dāng)前存儲(chǔ)分區(qū)的所有副本的版本號(hào),若當(dāng)前存儲(chǔ)分區(qū)的副本版本不是所有副本中“最新”的,則認(rèn)為當(dāng)前存儲(chǔ)分區(qū)版本沖突;
[0092]( 4 )執(zhí)行同步操作
[0093]源節(jié)點(diǎn)接收所述的返回指令,并做出如下操作:
[0094]4-1)若返回指令為“申請(qǐng)失敗”,則源節(jié)點(diǎn)保持當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)不變,并等待副本同步;
[0095]4-2)若返回指令為申請(qǐng)成功,則源節(jié)點(diǎn)將分區(qū)狀態(tài)表中當(dāng)前存儲(chǔ)分區(qū)的狀態(tài)更新為“同步到遠(yuǎn)端”;并向當(dāng)前存儲(chǔ)分區(qū)的所有副本所在的存儲(chǔ)節(jié)點(diǎn)執(zhí)行依據(jù)NWR策略的副本同步操作,使當(dāng)前存儲(chǔ)分區(qū)的所有副本一致;各副本所在的存儲(chǔ)節(jié)點(diǎn)接收到源節(jié)點(diǎn)發(fā)送的副本同步操作后,將相應(yīng)存儲(chǔ)分區(qū)的分區(qū)狀態(tài)更改為“更新到本地”;副本同步操作完成后,源存儲(chǔ)節(jié)點(diǎn)和副本所在存儲(chǔ)節(jié)點(diǎn)以及協(xié)調(diào)節(jié)點(diǎn)將相應(yīng)分區(qū)的分區(qū)狀態(tài)更新為“完全同步”。
[0096]為防止因用戶讀寫(xiě)操作引起的版本混亂問(wèn)題,用戶根據(jù)被訪問(wèn)副本所在存儲(chǔ)分區(qū)的分區(qū)狀態(tài)進(jìn)行數(shù)據(jù)操作:
[0097]I)副本所在存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“更新到本地”:
[0098]若為讀取操作,則從該存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的副本同步操作對(duì)應(yīng)的遠(yuǎn)端節(jié)(發(fā)送副本同步操作的源節(jié)點(diǎn))點(diǎn)中讀取相應(yīng)分區(qū)的數(shù)據(jù),
[0099]若為修改操作,則該節(jié)點(diǎn)不再接受上傳、刪除等修改操作,并將所述的修改操作轉(zhuǎn)移給該節(jié)點(diǎn)對(duì)應(yīng)的副本同步操作對(duì)應(yīng)的遠(yuǎn)端節(jié)點(diǎn),對(duì)遠(yuǎn)端節(jié)點(diǎn)中相應(yīng)分區(qū)進(jìn)行修改操作;
[0100]2)副本所在分區(qū)的分區(qū)狀態(tài)為“同步到遠(yuǎn)端”:
[0101]若為讀取操作,則直接從當(dāng)前節(jié)點(diǎn)讀取數(shù)據(jù),
[0102]若為修改操作,則等待當(dāng)副本同步操作完成后,再將進(jìn)行該修改操作;
[0103]3)副本所在分區(qū)的分區(qū)狀態(tài)為“最新”或“完全同步”狀態(tài):
[0104]若為讀寫(xiě)操作,則直接從當(dāng)前節(jié)點(diǎn)讀取數(shù)據(jù);
[0105]若為修改操作,則立即執(zhí)行該讀寫(xiě)操作,且在該讀寫(xiě)操作完成后,將相應(yīng)的分區(qū)狀態(tài)更新為“最新”,并向協(xié)調(diào)節(jié)點(diǎn)發(fā)送該分區(qū)的同步請(qǐng)求。
[0106]所述的分布式文件存儲(chǔ)系統(tǒng)還包括一個(gè)熱備節(jié)點(diǎn),當(dāng)前存儲(chǔ)節(jié)點(diǎn)發(fā)送的同步請(qǐng)求連續(xù)多次超時(shí),本實(shí)施例中為3次,則認(rèn)為協(xié)調(diào)節(jié)點(diǎn)宕機(jī),熱備節(jié)點(diǎn)自動(dòng)接替協(xié)調(diào)節(jié)點(diǎn)接收同步請(qǐng)求并發(fā)送返回指令,在協(xié)調(diào)節(jié)點(diǎn)恢復(fù)后,再將同步請(qǐng)求交由協(xié)調(diào)節(jié)點(diǎn)處理。若協(xié)調(diào)節(jié)點(diǎn)和熱備節(jié)點(diǎn)同時(shí)宕機(jī),則存儲(chǔ)節(jié)點(diǎn)會(huì)進(jìn)行3次的重試操作,為了避免請(qǐng)求擁塞,3次重試操作的等待時(shí)間逐漸遞增,分別為10s,20s,30s。若3次重試均失敗,則存儲(chǔ)節(jié)點(diǎn)重新啟用“點(diǎn)到點(diǎn)”的副本同步策略,并通過(guò)Gossip消息傳播的方式最終啟動(dòng)整個(gè)存儲(chǔ)集群的“點(diǎn)到點(diǎn)”副本同步策略。
[0107]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述的副本同步方法應(yīng)用于對(duì)稱(chēng)架構(gòu)的分布式文件存儲(chǔ)系統(tǒng),所述的分布式文件存儲(chǔ)系統(tǒng)包括多個(gè)存儲(chǔ)節(jié)點(diǎn)和一個(gè)協(xié)調(diào)節(jié)點(diǎn),所述的副本同步方法包括: (1)初始化 1-1)每個(gè)存儲(chǔ)節(jié)點(diǎn)上建立分區(qū)狀態(tài)表,所述的分區(qū)狀態(tài)表實(shí)時(shí)記錄相應(yīng)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)分區(qū)的分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào),初始化后分區(qū)狀態(tài)和版本號(hào)為空; 所述的分區(qū)狀態(tài)包括:“完全同步”,“最新”,“同步到遠(yuǎn)端”和“更新到本地”四種狀態(tài); 1-2)所述的協(xié)調(diào)節(jié)點(diǎn)將所有分區(qū)狀態(tài)表匯總并建立分區(qū)狀態(tài)總表; (2)發(fā)送同步請(qǐng)求 若某存儲(chǔ)節(jié)點(diǎn)中某一存儲(chǔ)分區(qū)的數(shù)據(jù)被修改,且該存儲(chǔ)分區(qū)無(wú)狀態(tài)沖突,則更新該存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“最新”,同時(shí)以該存儲(chǔ)節(jié)點(diǎn)為源節(jié)點(diǎn)向所述的協(xié)調(diào)節(jié)點(diǎn)發(fā)送當(dāng)前存儲(chǔ)分區(qū)的同步請(qǐng)求; (3)請(qǐng)求返回指令 協(xié)調(diào)節(jié)點(diǎn)接收所述的同步請(qǐng)求,并根據(jù)分區(qū)狀態(tài)總表,判斷當(dāng)前存儲(chǔ)分區(qū)是否滿足副本同步操作的執(zhí)行條件,并發(fā)送相應(yīng)的返回指令,具體為: 3-1)若不滿足所述的執(zhí)行條件,則協(xié)調(diào)節(jié)點(diǎn)維持當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)不變,并向源節(jié)點(diǎn)返回“申請(qǐng)失敗”; 3-2)若滿足所述的執(zhí)行條件,則協(xié)調(diào)節(jié)點(diǎn)更新前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)為“同步到遠(yuǎn)端”,并向源節(jié)點(diǎn)返回“申請(qǐng)成功”; (4)執(zhí)行同步操作 源節(jié)點(diǎn)接收所述的返回指令,并做出如下操作: 4-1)若返回指令為“申請(qǐng)失敗”,則源節(jié)點(diǎn)保持當(dāng)前存儲(chǔ)分區(qū)的分區(qū)狀態(tài)不變,并等待副本同步; 4-2)若返回指令為“申請(qǐng)成功”,則源節(jié)點(diǎn)向當(dāng)前存儲(chǔ)分區(qū)的所有副本所在的存儲(chǔ)節(jié)點(diǎn)執(zhí)行副本同步操作,使當(dāng)前存儲(chǔ)分區(qū)的所有副本一致。
2.如權(quán)利要求1所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述步驟(I)中的四種分區(qū)狀態(tài)按照有限狀態(tài)機(jī)原理轉(zhuǎn)換。
3.如權(quán)利要求2所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述步驟(2)中的同步請(qǐng)求攜帶有當(dāng)前存儲(chǔ)分區(qū)的分區(qū)號(hào)、分區(qū)狀態(tài)和版本號(hào)。
4.如權(quán)利要求3所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述步驟(3)中的執(zhí)行條件為當(dāng)前存儲(chǔ)分區(qū)無(wú)狀態(tài)沖突和版本沖突。
5.如權(quán)利要求4所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述的狀態(tài)沖突通過(guò)狀態(tài)的轉(zhuǎn)換原理確定,若當(dāng)前存儲(chǔ)分區(qū)不滿足有限狀態(tài)機(jī)的轉(zhuǎn)換條件,則認(rèn)為當(dāng)前存儲(chǔ)分區(qū)狀態(tài)沖突。
6.如權(quán)利要求5所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述的版本沖突根據(jù)以下方法判定:若當(dāng)前存儲(chǔ)分區(qū)的副本版本不是所有副本中最新的,則認(rèn)為當(dāng)前存儲(chǔ)分區(qū)版本沖突。
7.如權(quán)利要求6所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述的副本同步操作依據(jù)NWR策略進(jìn)行。
8.如權(quán)利要求7所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述步驟3-2)中: 副本同步操作前,源節(jié)點(diǎn)將分區(qū)狀態(tài)表中當(dāng)前存儲(chǔ)分區(qū)的狀態(tài)更新為“同步到遠(yuǎn)端”; 副本同步操作過(guò)程中,各副本所在的存儲(chǔ)節(jié)點(diǎn)將相應(yīng)存儲(chǔ)分區(qū)的分區(qū)狀態(tài)更新為“更新到本地”; 副本同步操作完成后,源存儲(chǔ)節(jié)點(diǎn)和副本所在存儲(chǔ)節(jié)點(diǎn)以及協(xié)調(diào)節(jié)點(diǎn)將相應(yīng)的存儲(chǔ)分區(qū)的分區(qū)狀態(tài)都更新為“完全同步”。
9.如權(quán)利要求8所述的基于分區(qū)狀態(tài)表和協(xié)調(diào)節(jié)點(diǎn)的副本同步方法,其特征在于,所述的分布式文件存儲(chǔ)系統(tǒng)還包括一個(gè)熱備節(jié)點(diǎn),當(dāng)前存儲(chǔ)節(jié)點(diǎn)發(fā)送的同步請(qǐng)求連續(xù)多次超時(shí),則認(rèn)為協(xié)調(diào)節(jié)點(diǎn)宕機(jī),熱備節(jié)點(diǎn)自動(dòng)接替協(xié)調(diào)節(jié)點(diǎn)接收同步請(qǐng)求并發(fā)送返回指令,在協(xié)調(diào)節(jié)點(diǎn)恢復(fù)后,再將同步請(qǐng)求交由協(xié)調(diào)節(jié)`點(diǎn)處理。
【文檔編號(hào)】G06F17/30GK103428288SQ201310350158
【公開(kāi)日】2013年12月4日 申請(qǐng)日期:2013年8月13日 優(yōu)先權(quán)日:2013年8月13日
【發(fā)明者】尹建偉, 劉柳, 鄧水光, 李瑩, 吳健, 吳朝暉 申請(qǐng)人:浙江大學(xué)