專利名稱:一種分布式存儲(chǔ)的數(shù)據(jù)獲取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)獲取方法,尤其是一種分布式存儲(chǔ)的數(shù)據(jù)獲取方法。
背景技術(shù):
Google公司設(shè)計(jì)實(shí)現(xiàn)了 Chubby分布式鎖服務(wù)系統(tǒng),并已經(jīng)在其內(nèi)部系統(tǒng)中廣泛使用。Chubby向程序設(shè)計(jì)者提供鎖服務(wù)的接口,來保證數(shù)據(jù)操作的一致性。Chubby系統(tǒng)本質(zhì)上是一個(gè)分布式的文件系統(tǒng)。系統(tǒng)為每項(xiàng)數(shù)據(jù)分配一個(gè)文件來代表其鎖,用戶通過打開、關(guān)閉和讀取文件,獲取操作此項(xiàng)數(shù)據(jù)的鎖。通過通信機(jī)制,向用戶發(fā)送更新信息。例如,當(dāng)一群機(jī)器選舉mater時(shí),這些機(jī)器同時(shí)申請(qǐng)打開某個(gè)文件,并請(qǐng)求鎖住這個(gè)文件。成功獲取鎖的服務(wù)器當(dāng)選主服務(wù)器,并且在文件中寫入自己的地址。其他服務(wù)器通過讀取文件中的數(shù)據(jù),獲得主服務(wù)器的地址信息。以chubby為典型代表的分布式鎖服務(wù)系統(tǒng),是針對(duì)服務(wù)器端的設(shè)計(jì),由服務(wù)器向外提供服務(wù)。鑒于此類集中式鎖服務(wù)都是基于中心服務(wù)器,在運(yùn)行過程中存在很多不足,最典型的就是單點(diǎn)失效和性能瓶頸問題。一旦中心服務(wù)器出現(xiàn)故障不能夠正常提供鎖服務(wù),整個(gè)網(wǎng)絡(luò)的運(yùn)行必將受到影響,嚴(yán)重時(shí)導(dǎo)致網(wǎng)絡(luò)癱瘓。集中式鎖服務(wù)的單點(diǎn)瓶頸問題比較嚴(yán)重。并且對(duì)于純P2P網(wǎng)絡(luò)來說,各節(jié)點(diǎn)同時(shí)作為客戶端和服務(wù)器端,不存在中心服務(wù)器,這就要求能夠有一套機(jī)制,能夠提供完全分散式的鎖服務(wù),來保證分布存儲(chǔ)在各節(jié)點(diǎn)上的數(shù)據(jù)能夠保證一致性。
發(fā)明內(nèi)容
本發(fā)明提供了一種 不需中心服務(wù)器參與的,完全分散式的分布式存儲(chǔ)的數(shù)據(jù)獲取方法。實(shí)現(xiàn)本發(fā)明目的的分布式存儲(chǔ)的數(shù)據(jù)獲取方法,包括如下步驟(I)先檢查A鎖在本地的狀態(tài),如果A鎖已經(jīng)被占用,則執(zhí)行退避策略,等待隨機(jī)時(shí)延后,再重新獲??;(2)若本地A鎖狀態(tài)處于空閑,則將本地A鎖置為被占用狀態(tài),但此時(shí)本節(jié)點(diǎn)暫不能使用該鎖操作數(shù)據(jù)A,而是先向網(wǎng)絡(luò)中發(fā)送A鎖即將被占用的通告;(3)在發(fā)出通告后建立沖突檢測(cè)定時(shí)器,檢測(cè)互斥鎖占用的沖突現(xiàn)象;(4)若在定時(shí)器超時(shí)之前,收到了其他節(jié)點(diǎn)回送的沖突報(bào)告,或者收到其他節(jié)點(diǎn)發(fā)來的獲取A鎖的通告,則對(duì)于本節(jié)點(diǎn)來說獲取A鎖失敗,清除本地A鎖被占用的標(biāo)識(shí),向網(wǎng)絡(luò)中發(fā)送釋放A鎖的通告;并執(zhí)行退避策略,等待隨機(jī)時(shí)延后再重新獲取;在定時(shí)器超時(shí)之前收到其他節(jié)點(diǎn)發(fā)來的獲取A鎖通告,此節(jié)點(diǎn)應(yīng)向通告源發(fā)送沖突報(bào)告,沖突雙方均采用退避策略。(5)若定時(shí)器超時(shí)之前未收到?jīng)_突報(bào)告,或其他節(jié)點(diǎn)的占用通告,則定時(shí)器超時(shí)后,此次獲取A鎖的操作成功,本節(jié)點(diǎn)即真正開始持有該鎖,并可以對(duì)數(shù)據(jù)A進(jìn)行操作;待針對(duì)數(shù)據(jù)A的操作完成后,再用步驟(4)的方式釋放A鎖;為了防止持有A鎖的節(jié)點(diǎn)在進(jìn)行數(shù)據(jù)操作期間意外宕機(jī)或掉線,導(dǎo)致鎖不能正常被釋放而影響其他節(jié)點(diǎn)的操作,因此本發(fā)明還設(shè)計(jì)了鎖的超時(shí)機(jī)制,即持有鎖的節(jié)點(diǎn)在獲取到鎖后一段時(shí)間內(nèi)必須發(fā)出釋放該鎖的通告,否則在超時(shí)后網(wǎng)絡(luò)中其他節(jié)點(diǎn)自動(dòng)將其本地的鎖置為空閑,其他節(jié)點(diǎn)即可申請(qǐng)持有該鎖。本發(fā)明的分布式存儲(chǔ)的數(shù)據(jù)獲取方法的有益效果如下本發(fā)明的分布式存儲(chǔ)的數(shù)據(jù)獲取方法,是針對(duì)分布式網(wǎng)絡(luò)中分布式存儲(chǔ)的數(shù)據(jù)的鎖,對(duì)于所有節(jié)點(diǎn)來說,只有獲取到鎖才有權(quán)操作此項(xiàng)數(shù)據(jù)。因此該鎖是一個(gè)網(wǎng)絡(luò)范圍的全局的概念,由于不考慮使用服務(wù)器來提供鎖服務(wù),所以采用的替代方案是在每個(gè)節(jié)點(diǎn)處維護(hù)此鎖的狀態(tài)。每次有節(jié)點(diǎn)獲取到該鎖后,更改各節(jié)點(diǎn)上鎖的狀態(tài),禁止多個(gè)節(jié)點(diǎn)同時(shí)操作同一項(xiàng)數(shù)據(jù)。只要所有節(jié)點(diǎn)都遵守這一機(jī)制,就能夠保證在同一時(shí)間操作同一數(shù)據(jù)的節(jié)點(diǎn)只有一個(gè)。通過這種簡(jiǎn)單的方法,P2P網(wǎng)絡(luò)中各節(jié)點(diǎn)之間動(dòng)作協(xié)調(diào),有序的操作統(tǒng)一數(shù)據(jù),不產(chǎn)生沖突,也不需要增加額外的服務(wù)器。
圖1為本發(fā)明的分布式存儲(chǔ)的數(shù)據(jù)獲取方法的流程圖。
具體實(shí)施例方式如圖1所示,本發(fā)明的分布式存儲(chǔ)的數(shù)據(jù)獲取方法,包括如下步驟(I)先檢查A鎖在本地的狀態(tài),如果A鎖已經(jīng)被占用,則執(zhí)行退避策略,等待隨機(jī)時(shí)延后,再重新獲取;(2)若本地A鎖狀態(tài)處于空閑,則將本地A鎖置為被占用狀態(tài),但此時(shí)本節(jié)點(diǎn)暫不能使用該鎖操作數(shù)據(jù)A,而是先向網(wǎng)絡(luò)中發(fā)送A鎖即將被占用的通告;(3)在發(fā)出通告后建立`
(4)若在定時(shí)器超時(shí)之前,收到了其他節(jié)點(diǎn)回送的沖突報(bào)告,或者收到其他節(jié)點(diǎn)發(fā)來的獲取A鎖的通告,則對(duì)于本節(jié)點(diǎn)來說獲取A鎖失敗,清除本地A鎖被占用的標(biāo)識(shí),向網(wǎng)絡(luò)中發(fā)送釋放A鎖的通告;并執(zhí)行退避策略,等待隨機(jī)時(shí)延后再重新獲??;(5)若定時(shí)器超時(shí)之前未收到?jīng)_突報(bào)文,則定時(shí)器超時(shí)后,此次獲取A鎖的操作成功,本節(jié)點(diǎn)即真正開始持有該鎖,并可以對(duì)數(shù)據(jù)A進(jìn)行操作;待針對(duì)數(shù)據(jù)A的操作完成后,再用步驟(4)的方式釋放A鎖;為了防止持有A鎖的節(jié)點(diǎn)在進(jìn)行數(shù)據(jù)操作期間意外宕機(jī)或掉線,導(dǎo)致鎖不能正常被釋放而影響其他節(jié)點(diǎn)的操作,因此本發(fā)明還設(shè)計(jì)了鎖的超時(shí)機(jī)制,即持有鎖的節(jié)點(diǎn)在獲取到鎖后一段時(shí)間內(nèi)必須發(fā)出釋放該鎖的通告,否則在超時(shí)后網(wǎng)絡(luò)中其他節(jié)點(diǎn)自動(dòng)將其本地的鎖置為空閑,其他節(jié)點(diǎn)即可申請(qǐng)持有該鎖。本發(fā)明的分布式存儲(chǔ)的數(shù)據(jù)獲取方法,提供了一種完全分散式的鎖機(jī)制,各節(jié)點(diǎn)維護(hù)同一鎖的狀態(tài)信息。通過檢測(cè)本地鎖狀態(tài)并與網(wǎng)絡(luò)中其他節(jié)點(diǎn)進(jìn)行協(xié)商獲取鎖的持有權(quán)。當(dāng)沖突發(fā)生時(shí),沖突雙方均采用退避策略,分別等待隨機(jī)時(shí)延后再進(jìn)行鎖的獲取。并且設(shè)計(jì)了超時(shí)機(jī)制,來避免某一節(jié)點(diǎn)因故障而過長(zhǎng)時(shí)間持有鎖,不能正常釋放的情況。通過這種簡(jiǎn)單的完全分散式的鎖機(jī)制,實(shí)現(xiàn)了不同節(jié)點(diǎn)對(duì)同一數(shù)據(jù)操作的串行化,保證了分布式數(shù)據(jù)的一致性。以Chubby系統(tǒng)為代表的分布式鎖服務(wù)系統(tǒng),在提供鎖服務(wù)時(shí)由中心服務(wù)器來進(jìn)行多節(jié)點(diǎn)的動(dòng)作的協(xié)調(diào)。而本發(fā)明所述的分布式鎖,秉承完全去中心化的思想,取締了中心服務(wù)器的角色,只需各節(jié)點(diǎn)都遵守相同的協(xié)調(diào)機(jī)制,通過簡(jiǎn)單的信息交互即可協(xié)調(diào)各節(jié)點(diǎn)的動(dòng)作達(dá)到同步的目的。并且此完全分布式鎖實(shí)現(xiàn)簡(jiǎn)單,尤其適用于沒有中心服務(wù)器的完全分布式網(wǎng)絡(luò)。上面所述的實(shí)施例僅僅是對(duì)本發(fā)明的優(yōu)選實(shí)施方式進(jìn)行描述,并非對(duì)本發(fā)明的范圍進(jìn)行限定,在不脫離本發(fā)明設(shè)計(jì)精神前提下,本領(lǐng)域普通工程技術(shù)人員對(duì)本發(fā)明技術(shù)方案做出的各種變形和改 進(jìn),均應(yīng)落入本發(fā)明的權(quán)利要求書確定的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種分布式存儲(chǔ)的數(shù)據(jù)獲取方法,包括如下步驟 (1)先檢查A鎖在本地的狀態(tài),如果A鎖已經(jīng)被占用,則執(zhí)行退避策略,等待隨機(jī)時(shí)延后,再重新獲??; (2)若本地A鎖狀態(tài)處于空閑,則將本地A鎖置為被占用狀態(tài),但此時(shí)本節(jié)點(diǎn)暫不能使用該鎖操作數(shù)據(jù)A,而是先向網(wǎng)絡(luò)中發(fā)送A鎖即將被占用的通告; (3)在發(fā)出通告后建立沖突檢測(cè)定時(shí)器,檢測(cè)互斥鎖占用的沖突現(xiàn)象; (4)若在定時(shí)器超時(shí)之前,收到了其他節(jié)點(diǎn)回送的沖突報(bào)告,或者收到其他節(jié)點(diǎn)發(fā)來的獲取A鎖的通告,則對(duì)于本節(jié)點(diǎn)來說獲取A鎖失敗,清除本地A鎖被占用的標(biāo)識(shí),向網(wǎng)絡(luò)中發(fā)送釋放A鎖的通告;并執(zhí)行退避策略,等待隨機(jī)時(shí)延后再重新獲取; 在定時(shí)器超時(shí)之前收到其他節(jié)點(diǎn)發(fā)來的獲取A鎖通告,此節(jié)點(diǎn)應(yīng)向通告源發(fā)送沖突報(bào)告,沖突雙方均采用退避策略。
(5)若定時(shí)器超時(shí)之前未收到?jīng)_突報(bào)告,或其他節(jié)點(diǎn)的占用通告,則定時(shí)器超時(shí)后,此次獲取A鎖的操作成功,本節(jié)點(diǎn)即真正開始持有該鎖,并可以對(duì)數(shù)據(jù)A進(jìn)行操作;待針對(duì)數(shù)據(jù)A的操作完成后,再用步驟(4)的方式釋放A鎖;為了防止持有A鎖的節(jié)點(diǎn)在進(jìn)行數(shù)據(jù)操作期間意外宕機(jī)或掉線,導(dǎo)致鎖不能正常被釋放而影響其他節(jié)點(diǎn)的操作,因此本發(fā)明還設(shè)計(jì)了鎖的超時(shí)機(jī)制,即持有鎖的節(jié)點(diǎn)在獲取到鎖后一段時(shí)間內(nèi)必須發(fā)出釋放該鎖的通告,否則在超時(shí)后網(wǎng)絡(luò)中其他節(jié)點(diǎn)自動(dòng)將其本地的鎖置為空閑,其他節(jié)點(diǎn)即可申請(qǐng)持有該鎖。
全文摘要
本發(fā)明提供了一種不需中心服務(wù)器參與的,完全分散式的分布式存儲(chǔ)的數(shù)據(jù)獲取方法,包括如下步驟(1)先檢查A鎖在本地的狀態(tài),如果A鎖已經(jīng)被占用,則執(zhí)行退避策略,等待隨機(jī)時(shí)延后,再重新獲??;(2)若本地A鎖狀態(tài)處于空閑,則將本地A鎖置為被占用狀態(tài),但此時(shí)本節(jié)點(diǎn)暫不能使用該鎖操作數(shù)據(jù)A,而是先向網(wǎng)絡(luò)中發(fā)送A鎖即將被占用的通告;(3)在發(fā)出通告后建立沖突檢測(cè)定時(shí)器,檢測(cè)互斥鎖占用的沖突現(xiàn)象。本發(fā)明的分布式存儲(chǔ)的數(shù)據(jù)獲取方法,將P2P網(wǎng)絡(luò)中各節(jié)點(diǎn)之間動(dòng)作協(xié)調(diào),有序的操作同一數(shù)據(jù),不產(chǎn)生沖突,也不需要增加額外的服務(wù)器。
文檔編號(hào)H04L29/08GK103067471SQ20121056382
公開日2013年4月24日 申請(qǐng)日期2012年12月24日 優(yōu)先權(quán)日2012年12月24日
發(fā)明者方沛宇, 楊哲, 杜亞梅 申請(qǐng)人:北京華科力揚(yáng)科技有限公司