專利名稱:一種實現(xiàn)機(jī)群環(huán)境中數(shù)據(jù)有效性的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)數(shù)據(jù)訪問和存儲技術(shù)領(lǐng)域,更確切地說是涉及一種實現(xiàn)機(jī)群環(huán)境中數(shù)據(jù)有效性的方法。
背景技術(shù):
在機(jī)群環(huán)境中,各個結(jié)點之間需要共享很多的全局性數(shù)據(jù)。以典型的服務(wù)所對應(yīng)的機(jī)群環(huán)境為例。大部分服務(wù)都需要使用一些配置數(shù)據(jù)。具體來說,服務(wù)在啟動時,會從這些配置數(shù)據(jù)中讀取配置信息;在運行過程中,還會根據(jù)需要更改數(shù)據(jù)或重新讀取配置數(shù)據(jù)。如果服務(wù)只由單臺服務(wù)器提供,由于單臺服務(wù)器上配置信息的提供方和需求方往往都是唯一的,至少配置信息的入口是唯一的,因此單臺服務(wù)器上配置信息的情況比較簡單。
但是,如果服務(wù)是由多臺服務(wù)器提供,并形成了大規(guī)模的機(jī)群環(huán)境,比如,多臺服務(wù)器構(gòu)成一個服務(wù)聚集,以提供某種或多種功能強(qiáng)大的服務(wù),則情況會復(fù)雜得多。一個具體的例子就是使用多臺Web服務(wù)器構(gòu)成一個Web服務(wù)機(jī)群。在服務(wù)聚集中,每臺服務(wù)器上的服務(wù)實例都需要使用配置文件,而一個服務(wù)聚集中所有服務(wù)器所使用的配置數(shù)據(jù)應(yīng)該是唯一的。這就帶來了如何在大規(guī)模機(jī)群環(huán)境中有效、安全地保存配置文件,并確保配置文件有效性的問題。另外,由于服務(wù)聚集本身就是動態(tài)的,既可能由于某些服務(wù)結(jié)點發(fā)生故障退出機(jī)群,又可能有新的服務(wù)結(jié)點加入機(jī)群承擔(dān)服務(wù),這就更增加了維護(hù)系統(tǒng)全局性數(shù)據(jù)有效性的難度。而機(jī)群系統(tǒng)要求全局性數(shù)據(jù)對于所有結(jié)點都要保持有效性,數(shù)據(jù)的有效性包括兩方面在任何時刻,所有結(jié)點中的任何服務(wù)進(jìn)程或其它程序都可以隨時訪問配置數(shù)據(jù),即數(shù)據(jù)的可用性;且所有結(jié)點所訪問到的數(shù)據(jù)都是一致的,即數(shù)據(jù)的一致性。另外,配置數(shù)據(jù)還應(yīng)該是高效的,也就是說,配置數(shù)據(jù)不會因為配置文件不一致等問題影響到服務(wù)的可用性,其訪問效率不會隨著機(jī)群規(guī)模的變化而發(fā)生顯著的變化。
目前在大規(guī)模機(jī)群環(huán)境中,對于全局性數(shù)據(jù)訪問和存儲有兩種策略一種是集中式策略,另一種是分布式策略。集中式策略是將全局性數(shù)據(jù)集中保存在專用的配置服務(wù)器上,所有的全局性數(shù)據(jù)都必須由專用的服務(wù)器提供;分布式策略是在每個服務(wù)結(jié)點上都保存一份全局性數(shù)據(jù)的復(fù)本,由某種機(jī)制來確保這些全局性數(shù)據(jù)的一致性。對于這兩種策略來說,集中式策略的優(yōu)點是實現(xiàn)比較簡單,但是這種策略存在單一故障點,也就是說,一旦提供全局性的配置結(jié)點出現(xiàn)異常,則無法繼續(xù)提供全局性數(shù)據(jù),并且客戶端需要隨時感知服務(wù)器的存在,否則可能造成全局性數(shù)據(jù)不可用、或數(shù)據(jù)陳舊的問題,也即客戶端無法真正透明地使用全局性數(shù)據(jù)。另外,由于該策略需要每臺服務(wù)器對專用的配置服務(wù)器進(jìn)行訪問,容易形成性能瓶頸,因此很容易對網(wǎng)絡(luò)等資源產(chǎn)生較大的壓力。分布式策略的優(yōu)點是使客戶端能夠簡單、高效地獲取全局性數(shù)據(jù),但是這種策略必須確保各個結(jié)點中全局性數(shù)據(jù)的一致性,這無疑增加了系統(tǒng)實現(xiàn)的難度,實際當(dāng)中往往不能完全實現(xiàn)各個結(jié)點中全局性數(shù)據(jù)的一致性。另外,由于確保全局性數(shù)據(jù)一致性需要一定的系統(tǒng)維護(hù)時間,因此這種分布式策略還會降低系統(tǒng)的可用度。
對于目前采用集中式策略的機(jī)群環(huán)境來說,通常有兩種使用方法,一種是使用一個集中的數(shù)據(jù)庫來保存數(shù)據(jù)文件,該方法要求客戶端通過訪問數(shù)據(jù)庫獲取數(shù)據(jù)文件;另一種是使用文件系統(tǒng)來保存數(shù)據(jù),該方法通過NFS等機(jī)制實現(xiàn)數(shù)據(jù)的共享。這兩種使用方法除了以上所述的缺點之外,還有可擴(kuò)展性很差的問題,這必然會限制該方法的應(yīng)用范圍,也就是說,該方法不適合大規(guī)模的機(jī)群環(huán)境。對于目前采用分布式策略的機(jī)群環(huán)境來說,通常是在更新數(shù)據(jù)時對數(shù)據(jù)進(jìn)行同步,也有定時對數(shù)據(jù)進(jìn)行同步的做法。不管采用的是哪種同步方法,如果在同步時某個結(jié)點出現(xiàn)故障,則該結(jié)點上的數(shù)據(jù)就不能被正確地更新。而且發(fā)出更改配置操作的源結(jié)點也可能會出現(xiàn)問題在更改配置時如果采用唯一的配置結(jié)點,雖然可以較好地回避數(shù)據(jù)不一致的問題,但是該配置結(jié)點可能會成為單一故障點;如果采用多個配置結(jié)點,則很難判斷出哪個結(jié)點上的配置信息是最新的,系統(tǒng)在運行一段時間后,很可能會出現(xiàn)數(shù)據(jù)混亂,甚至給系統(tǒng)帶來災(zāi)難性的后果。
綜上所述,目前各種訪問和存儲全局性數(shù)據(jù)的方案都不能很好地保證機(jī)群系統(tǒng)中數(shù)據(jù)的有效性。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種實現(xiàn)機(jī)群環(huán)境中數(shù)據(jù)有效性的方法,以在維護(hù)機(jī)群環(huán)境中數(shù)據(jù)一致的同時,盡量提高訪問效率和可用性。
為達(dá)到以上目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的一種實現(xiàn)機(jī)群環(huán)境中數(shù)據(jù)有效性的方法,該方法包括以下步驟a.預(yù)先設(shè)置包含文件頭及數(shù)據(jù)的數(shù)據(jù)文件格式,并在文件頭中設(shè)置用于標(biāo)識數(shù)據(jù)文件版本的版本信息,所有結(jié)點在本地系統(tǒng)中以該數(shù)據(jù)文件格式保存全局性數(shù)據(jù);b.從機(jī)群系統(tǒng)中確定當(dāng)前唯一的配置結(jié)點;c.配置結(jié)點在自身的數(shù)據(jù)文件被修改時,向當(dāng)前存活的、且除本配置結(jié)點以外的其他普通結(jié)點發(fā)送包含數(shù)據(jù)文件頭中的版本信息的更新請求;收到該更新請求的普通結(jié)點首先根據(jù)該更新請求中攜帶的文件頭信息及自身數(shù)據(jù)文件中的文件頭信息,判斷配置結(jié)點中的數(shù)據(jù)文件是否新于自身保存的數(shù)據(jù)文件,如果兩個數(shù)據(jù)文件的版本信息相同,則不作處理;如果配置結(jié)點中的數(shù)據(jù)文件新,則將自身保存的數(shù)據(jù)文件更新為配置結(jié)點中的數(shù)據(jù)文件,并對數(shù)據(jù)文件頭中的版本信息作相應(yīng)修改;如果普通結(jié)點中的數(shù)據(jù)文件新,則向配置結(jié)點發(fā)送要求配置結(jié)點更新數(shù)據(jù)文件的更新請求,配置結(jié)點收到該更新請求后,用該普通結(jié)點中的全局性數(shù)據(jù)更新自身保存的全局性數(shù)據(jù),并對數(shù)據(jù)文件頭中的版本信息作相應(yīng)修改,之后再重復(fù)執(zhí)行步驟c。
所述步驟b中,所述確定配置結(jié)點為將首先加入機(jī)群、且能夠修改全局性數(shù)據(jù)的結(jié)點作為配置結(jié)點。
該方法可以進(jìn)一步包括普通結(jié)點在將全局性數(shù)據(jù)保存到本地系統(tǒng)時,判斷當(dāng)前保存是否正確執(zhí)行,如果正確,則不作處理,否則,退出機(jī)群系統(tǒng)。
該方法還可以進(jìn)一步包括普通結(jié)點在加入到機(jī)群系統(tǒng)時,首先根據(jù)數(shù)據(jù)文件頭中的版本信息判斷配置結(jié)點中的數(shù)據(jù)文件是否新于自身保存的數(shù)據(jù)文件,如果兩個數(shù)據(jù)文件同樣新,則直接加入機(jī)群系統(tǒng);如果配置結(jié)點中的數(shù)據(jù)文件新,則該普通結(jié)點將自身保存的數(shù)據(jù)文件更新為配置結(jié)點中的數(shù)據(jù)文件,并加入機(jī)群系統(tǒng);如果數(shù)據(jù)結(jié)點中的數(shù)據(jù)文件新,則該普通結(jié)點向配置結(jié)點發(fā)送要求配置結(jié)點更新數(shù)據(jù)文件的更新請求,并加入機(jī)群系統(tǒng),配置結(jié)點收到該更新請求后,將自身保存的數(shù)據(jù)文件更新為該普通結(jié)點中的數(shù)據(jù)文件,之后,再執(zhí)行步驟c。
所述數(shù)據(jù)文件頭中包含的版本信息為版本號;該方法進(jìn)一步包括配置結(jié)點中的數(shù)據(jù)文件被修改一次,則將該數(shù)據(jù)文件中的版本號加一;所述判斷配置結(jié)點中的數(shù)據(jù)文件是否新于普通結(jié)點中的數(shù)據(jù)文件為根據(jù)數(shù)據(jù)文件頭中的版本號進(jìn)行判斷,如果配置結(jié)點中的數(shù)據(jù)文件所對應(yīng)的版本號大,則確定該配置結(jié)點中的數(shù)據(jù)文件新;如果普通結(jié)點中的數(shù)據(jù)文件所對應(yīng)的版本號大,則確定該普通結(jié)點中的數(shù)據(jù)文件新;如果兩個數(shù)據(jù)文件中的版本號相同,則確定這兩個數(shù)據(jù)文件相同。
所述數(shù)據(jù)文件頭中包含的版本信息進(jìn)一步包括當(dāng)前數(shù)據(jù)文件的生存時間;該方法可以進(jìn)一步包括結(jié)點在獲取當(dāng)前的數(shù)據(jù)文件時,確定該數(shù)據(jù)文件的生存時間,并將該生存時間保存在數(shù)據(jù)文件頭中;所述當(dāng)前數(shù)據(jù)文件的生存時間為最近一次對數(shù)據(jù)文件進(jìn)行修改的時間與結(jié)點上的當(dāng)前時間之間的時間段,與當(dāng)前數(shù)據(jù)文件從最近一次被修改到寫入本結(jié)點之間的時間段的和;
所述在根據(jù)版本號確定兩個數(shù)據(jù)文件相同之前,進(jìn)一步包括根據(jù)兩個數(shù)據(jù)文件的生存時間進(jìn)行判斷;如果配置結(jié)點所對應(yīng)的數(shù)據(jù)文件生存時間短,則確定該數(shù)據(jù)文件新于普通結(jié)點中的數(shù)據(jù)文件;如果普通結(jié)點所對應(yīng)的數(shù)據(jù)文件的生存時間短,則確定該數(shù)據(jù)文件新于配置結(jié)點中的數(shù)據(jù)文件;如果兩個結(jié)點中的數(shù)據(jù)文件相同,則確定這兩個數(shù)據(jù)文件相同。
該方法可以進(jìn)一步包括預(yù)先設(shè)置一個存活時間間隔;所述在根據(jù)兩個數(shù)據(jù)文件的生存時間進(jìn)行判斷時,如果兩個數(shù)據(jù)文件的存活時間的間隔小于預(yù)先設(shè)置的存活時間間隔,則確定這兩個數(shù)據(jù)文件相同。
所述數(shù)據(jù)文件頭中包含的版本信息進(jìn)一步包括最近一次對當(dāng)前數(shù)據(jù)文件進(jìn)行修改的結(jié)點名稱;所述在根據(jù)版本號及數(shù)據(jù)文件的生存時間確定兩個數(shù)據(jù)文件相同之前,獲取最近一次對兩個數(shù)據(jù)文件進(jìn)行修改的結(jié)點名稱,確定這兩個結(jié)點中最近用作配置結(jié)點的結(jié)點所對應(yīng)的數(shù)據(jù)文件新于另一個數(shù)據(jù)文件;如果這兩個結(jié)點為同一個結(jié)點,則確定這兩個數(shù)據(jù)文件相同。
該方法可以進(jìn)一步包括將數(shù)據(jù)文件的更新粒度設(shè)置為文件級。
該方法還可以進(jìn)一步包括機(jī)群系統(tǒng)在確定當(dāng)前配置結(jié)點出現(xiàn)故障時,自動在所有結(jié)點中選擇其他結(jié)點作為當(dāng)前的配置結(jié)點。
本發(fā)明方案具有以下優(yōu)點1)通過配置結(jié)點在自身保存的數(shù)據(jù)文件被修改后,即要求機(jī)群系統(tǒng)中的普通結(jié)點作相應(yīng)的修改,確保了機(jī)群系統(tǒng)結(jié)點間數(shù)據(jù)的一致性;2)配置結(jié)點在向其他普通結(jié)點發(fā)送更新請求時,普通結(jié)點通過判斷數(shù)據(jù)文件頭確定哪個數(shù)據(jù)文件更新,即使某個結(jié)點發(fā)生故障、甚至是大規(guī)模的結(jié)點發(fā)生故障時,依然能夠保證機(jī)群系統(tǒng)中的全局性數(shù)據(jù)有效;3)由于數(shù)據(jù)文件是保存在結(jié)點的本地系統(tǒng),因此,每個結(jié)點獲取全局性數(shù)據(jù)時,只讀取本地的數(shù)據(jù)文件即可,而且結(jié)點更新數(shù)據(jù)文件的頻率不會很高,因此確保全局性數(shù)據(jù)的訪問效率較高,且不會隨機(jī)群系統(tǒng)規(guī)模的變化而發(fā)生顯著的變化,還能夠盡量減少對網(wǎng)絡(luò)帶寬等資源的占用,且不會出現(xiàn)性能瓶頸的問題,具有良好的可擴(kuò)展性;4)由于雖然在某一時刻只有一個配置結(jié)點,但是如果當(dāng)前的配置結(jié)點發(fā)生故障,還可以采用其他的配置結(jié)點,因此,本發(fā)明方案還消除了出現(xiàn)單一故障點的情況。
5)在版本新舊的比較過程中,本發(fā)明提出了一種基于版本、生存時間和最近一次修改的結(jié)點名的方法,既可以準(zhǔn)確地判斷數(shù)據(jù)文件版本的新舊,又消除了傳統(tǒng)上基于時間戳方法所對于結(jié)點間時鐘同步的要求。
圖1為本發(fā)明方案中由配置結(jié)點通知普通結(jié)點更新數(shù)據(jù)文件的流程圖;圖2為本發(fā)明方案中普通結(jié)點在新加入機(jī)群系統(tǒng)時,與配置結(jié)點中的數(shù)據(jù)文件進(jìn)行比較的流程圖。
具體實施例方式
下面結(jié)合附圖及具體實施例對本發(fā)明方案作進(jìn)一步詳細(xì)的說明。
考慮到機(jī)群環(huán)境中所有結(jié)點在訪問全局性數(shù)據(jù)時的角色各不相同,我們可以將所有的結(jié)點分為兩類配置結(jié)點和普通結(jié)點。配置結(jié)點是最近對全局性數(shù)據(jù)進(jìn)行修改的結(jié)點,除配置結(jié)點之外的所有結(jié)點都是普通結(jié)點。因此,配置結(jié)點是修改這些數(shù)據(jù)的唯一入口,其上的全局性數(shù)據(jù)應(yīng)該是最新被修改,而且在任一時刻,機(jī)群中只存在一個配置結(jié)點。如果當(dāng)前配置結(jié)點發(fā)生故障,系統(tǒng)則可以自動選擇其他設(shè)置有控制模塊的普通結(jié)點作為當(dāng)前的配置結(jié)點。對于選擇配置結(jié)點來說,由于機(jī)群系統(tǒng)的運行依賴于全局性數(shù)據(jù),尤其是全局性數(shù)據(jù)中的配置信息,因此在選擇配置結(jié)點時,最好選擇首個加入機(jī)群系統(tǒng),且能對全局性數(shù)據(jù)進(jìn)行修改的結(jié)點。
還要將所有的全局性數(shù)據(jù)以一個特殊文件的形式保存在每個結(jié)點中,將此類文件統(tǒng)稱為數(shù)據(jù)文件。該數(shù)據(jù)文件包括文件頭部分和數(shù)據(jù)部分,其中,數(shù)據(jù)部分用于保存全局性數(shù)據(jù),文件頭部分則用于保存全局性數(shù)據(jù)的版本信息。在文件頭中設(shè)置版本信息是為了方便對不同結(jié)點上數(shù)據(jù)文件的新舊進(jìn)行比較。
為保證能夠準(zhǔn)確地判斷出不同數(shù)據(jù)文件的新舊,該文件頭中的版本信息至少應(yīng)包括版本號,并將數(shù)據(jù)文件設(shè)置為每修改一次,則將版本號加一。這樣,在判斷兩個數(shù)據(jù)文件的新舊時,即可根據(jù)數(shù)據(jù)文件所對應(yīng)的版本號進(jìn)行判斷。
在實際操作中,可能會出現(xiàn)兩個數(shù)據(jù)文件的版本號相同、但是卻不是同一個數(shù)據(jù)文件的情況,這種情況下,如果只采用版本號進(jìn)行判斷,則無法判斷出數(shù)據(jù)文件的新舊。為解決這個問題,還可以在該文件頭的版本信息中進(jìn)一步增加當(dāng)前數(shù)據(jù)文件的生存時間。也就是說,每個結(jié)點在獲取當(dāng)前的數(shù)據(jù)文件時,確定該數(shù)據(jù)文件的生存時間,并將該生存時間保存在數(shù)據(jù)文件頭中。該數(shù)據(jù)文件的生存時間可以由最后一次對數(shù)據(jù)文件進(jìn)行修改的時間與結(jié)點上的當(dāng)前時間之間的時間段,與當(dāng)前數(shù)據(jù)文件從最近一次被修改到寫入本結(jié)點之間的時間段的和得到。
在進(jìn)一步設(shè)置了數(shù)據(jù)文件的生存時間之后,在判斷配置結(jié)點中的數(shù)據(jù)文件是否新于普通結(jié)點中的數(shù)據(jù)文件時,可以首先根據(jù)文件頭中的版本號進(jìn)行判斷,如果兩個數(shù)據(jù)文件的版本號相同,則進(jìn)一步根據(jù)這兩個數(shù)據(jù)文件的生存時間進(jìn)行判斷。如果配置結(jié)點所對應(yīng)的數(shù)據(jù)文件的生存時間短,則顯然是該數(shù)據(jù)文件較新,也即確定該數(shù)據(jù)文件新于普通結(jié)點中的數(shù)據(jù)文件;如果配置結(jié)點所對應(yīng)的數(shù)據(jù)文件的生存時間長,則普通結(jié)點中的數(shù)據(jù)文件較新,也即確定該數(shù)據(jù)文件老于普通結(jié)點中的數(shù)據(jù)文件;如果兩個數(shù)據(jù)文件的生存時間一樣長,則確定這兩個數(shù)據(jù)文件相同,因此不作處理。
另外,由于網(wǎng)絡(luò)中存在延時的問題,因此,可以設(shè)置一個時間間隔,在根據(jù)數(shù)據(jù)文件的生存時間進(jìn)行判斷時,如果兩個數(shù)據(jù)文件的生存時間小于該時間間隔,則認(rèn)為這兩個數(shù)據(jù)文件的生存時間相同。
在實際操作中,還可能會出現(xiàn)兩個數(shù)據(jù)文件的版本號相同、生存時間也相同,但是卻不是同一個數(shù)據(jù)文件的情況,這種情況下,采用上述方法進(jìn)行判斷,則無法判斷出數(shù)據(jù)文件的新舊。為解決這個問題,還可以在數(shù)據(jù)文件頭的版本信息中進(jìn)一步增加最近一次對數(shù)據(jù)文件進(jìn)行修改的結(jié)點的名稱。這樣,則根據(jù)數(shù)據(jù)文件的版本號及生存時間無法確定兩個數(shù)據(jù)文件的新舊時,可以獲取最近一次對這兩個數(shù)據(jù)文件進(jìn)行修改的結(jié)點的名稱,如果這兩個結(jié)點是相同的結(jié)點,則認(rèn)為這兩個數(shù)據(jù)文件完全相同;如果這兩個結(jié)點不同,則確定這兩個結(jié)點中最近用作配置結(jié)點的那個結(jié)點所對應(yīng)的數(shù)據(jù)文件較新。
在設(shè)置了配置結(jié)點及用于保存全局性數(shù)據(jù)的數(shù)據(jù)文件格式之后,即可通過配置結(jié)點對全局性數(shù)據(jù)進(jìn)行控制。
具體來說,該控制過程參見圖1,對應(yīng)以下步驟步驟101、修改配置結(jié)點中的數(shù)據(jù)文件。
步驟102、配置結(jié)點向機(jī)群系統(tǒng)中存活的其他普通結(jié)點發(fā)送包含該數(shù)據(jù)文件頭中的版本信息的更新請求。
步驟103~104、收到更新請求的普通結(jié)點根據(jù)版本信息判斷配置結(jié)點中的數(shù)據(jù)文件是否新于自身保存的全局性數(shù)據(jù),如果配置結(jié)點中的數(shù)據(jù)文件新,則進(jìn)入步驟105;如果普通結(jié)點中的數(shù)據(jù)文件新,則進(jìn)入步驟106;如果兩個數(shù)據(jù)文件一樣新,則不作處理。
步驟105、該普通結(jié)點利用配置結(jié)點中的數(shù)據(jù)文件更新自身保存的數(shù)據(jù)文件,并對該數(shù)據(jù)文件頭中的版本信息作相應(yīng)的修改,之后結(jié)束當(dāng)前的更新處理。
步驟106、該普通結(jié)點向配置結(jié)點發(fā)送要求配置結(jié)點更新數(shù)據(jù)文件的更新請求。
步驟107、配置結(jié)點收到該更新請求后,將自身保存的數(shù)據(jù)文件更新為該普通結(jié)點中的數(shù)據(jù)文件,并對該數(shù)據(jù)文件頭中的版本信息作相應(yīng)的修改,之后返回步驟102。
通過該流程,即可將配置結(jié)點中新修改的全局性數(shù)據(jù)發(fā)送到機(jī)群系統(tǒng)的其他結(jié)點中。而且,如果出現(xiàn)機(jī)群系統(tǒng)中其他結(jié)點中的全局性數(shù)據(jù)新于該配置結(jié)點的情況,在上述流程中,該結(jié)點也可以主動要求配置結(jié)點將保存的全局性數(shù)據(jù)更新為本結(jié)點中保存的全局性數(shù)據(jù)。
由于結(jié)點加入機(jī)群系統(tǒng)是一個無序的過程,可能會出現(xiàn)新加入機(jī)群系統(tǒng)的結(jié)點中的全局性數(shù)據(jù)新于當(dāng)前配置結(jié)點的問題,因此,在有新的普通結(jié)點加入時,該新結(jié)點應(yīng)首先判斷配置結(jié)點中的數(shù)據(jù)文件是否新于自身保存的數(shù)據(jù)文件,具體來說,參見圖2,該過程對應(yīng)以下步驟步驟201、某個普通結(jié)點新加入機(jī)群系統(tǒng)。
步驟202~203、該普通結(jié)點判斷配置結(jié)點中的數(shù)據(jù)文件是否新于自身保存的數(shù)據(jù)文件,如果配置結(jié)點中的數(shù)據(jù)文件新,則進(jìn)入步驟204;如果普通結(jié)點中的數(shù)據(jù)文件新,則進(jìn)入步驟205;如果兩個數(shù)據(jù)文件一樣新,則該普通結(jié)點直接加入機(jī)群系統(tǒng)。
步驟204、該普通結(jié)點用配置結(jié)點中的數(shù)據(jù)文件更新自身保存的數(shù)據(jù)文件,之后結(jié)束當(dāng)前的更新處理,并加入機(jī)群系統(tǒng)。
步驟205、該普通結(jié)點向配置結(jié)點發(fā)送要求配置結(jié)點更新數(shù)據(jù)文件的更新請求,并加入機(jī)群系統(tǒng)。
步驟206~207、配置結(jié)點收到該更新請求后,將自身保存的數(shù)據(jù)文件更新為該普通結(jié)點中的數(shù)據(jù)文件,之后再通知機(jī)群系統(tǒng)中的其他普通結(jié)點更新數(shù)據(jù)文件,也即,再通過圖1所示流程進(jìn)行處理。
由于普通結(jié)點在將配置結(jié)點中的數(shù)據(jù)文件保存到本地系統(tǒng)時,可能會出現(xiàn)保存出錯的問題,因此,普通結(jié)點在將數(shù)據(jù)文件保存到本地系統(tǒng)時,可以首先判斷當(dāng)前的保存是否被正確地執(zhí)行,如果被正確執(zhí)行,則普通結(jié)點對此不作其他的處理;否則,該普通結(jié)點退出機(jī)群系統(tǒng)。也即,允許普通結(jié)點對本地數(shù)據(jù)文件的修改失敗,并且,任何修改失敗都會導(dǎo)致普通結(jié)點退出機(jī)群系統(tǒng)。這樣,當(dāng)結(jié)點重新加入機(jī)群時,即可通過圖2所示流程再次從配置結(jié)點上獲取最新的數(shù)據(jù)文件。
另外,不管是配置結(jié)點,還是普通結(jié)點,都可能只有部分的數(shù)據(jù)文件比其他結(jié)點中的數(shù)據(jù)文件新,因此,應(yīng)將數(shù)據(jù)文件的更新粒度設(shè)置為文件級,以便于只針對該部分?jǐn)?shù)據(jù)進(jìn)行更新。
以上所述僅為本發(fā)明方案的較佳實施例,并不用以限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種實現(xiàn)機(jī)群環(huán)境中數(shù)據(jù)有效性的方法,其特征在于該方法包括以下步驟a.預(yù)先設(shè)置包含文件頭及數(shù)據(jù)的數(shù)據(jù)文件格式,并在文件頭中設(shè)置用于標(biāo)識數(shù)據(jù)文件版本的版本信息,所有結(jié)點在本地系統(tǒng)中以該數(shù)據(jù)文件格式保存全局性數(shù)據(jù);b.從機(jī)群系統(tǒng)中確定當(dāng)前唯一的配置結(jié)點;c.配置結(jié)點在自身的數(shù)據(jù)文件被修改時,向當(dāng)前存活的、且除本配置結(jié)點以外的其他普通結(jié)點發(fā)送包含數(shù)據(jù)文件頭中的版本信息的更新請求;收到該更新請求的普通結(jié)點首先根據(jù)該更新請求中攜帶的文件頭信息及自身數(shù)據(jù)文件中的文件頭信息,判斷配置結(jié)點中的數(shù)據(jù)文件是否新于自身保存的數(shù)據(jù)文件,如果兩個數(shù)據(jù)文件的版本信息相同,則不作處理;如果配置結(jié)點中的數(shù)據(jù)文件新,則將自身保存的數(shù)據(jù)文件更新為配置結(jié)點中的數(shù)據(jù)文件,并對數(shù)據(jù)文件頭中的版本信息作相應(yīng)修改;如果普通結(jié)點中的數(shù)據(jù)文件新,則向配置結(jié)點發(fā)送要求配置結(jié)點更新數(shù)據(jù)文件的更新請求,配置結(jié)點收到該更新請求后,用該普通結(jié)點中的全局性數(shù)據(jù)更新自身保存的全局性數(shù)據(jù),并對數(shù)據(jù)文件頭中的版本信息作相應(yīng)修改,之后再重復(fù)執(zhí)行步驟c。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述步驟b中,所述確定配置結(jié)點為將首先加入機(jī)群、且能夠修改全局性數(shù)據(jù)的結(jié)點作為配置結(jié)點。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括普通結(jié)點在將全局性數(shù)據(jù)保存到本地系統(tǒng)時,判斷當(dāng)前保存是否正確執(zhí)行,如果正確,則不作處理,否則,退出機(jī)群系統(tǒng)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括普通結(jié)點在加入到機(jī)群系統(tǒng)時,首先根據(jù)數(shù)據(jù)文件頭中的版本信息判斷配置結(jié)點中的數(shù)據(jù)文件是否新于自身保存的數(shù)據(jù)文件,如果兩個數(shù)據(jù)文件同樣新,則直接加入機(jī)群系統(tǒng);如果配置結(jié)點中的數(shù)據(jù)文件新,則該普通結(jié)點將自身保存的數(shù)據(jù)文件更新為配置結(jié)點中的數(shù)據(jù)文件,并加入機(jī)群系統(tǒng);如果數(shù)據(jù)結(jié)點中的數(shù)據(jù)文件新,則該普通結(jié)點向配置結(jié)點發(fā)送要求配置結(jié)點更新數(shù)據(jù)文件的更新請求,并加入機(jī)群系統(tǒng),配置結(jié)點收到該更新請求后,將自身保存的數(shù)據(jù)文件更新為該普通結(jié)點中的數(shù)據(jù)文件,之后,再執(zhí)行步驟c。
5.根據(jù)權(quán)利要求1或4所述的方法,其特征在于,所述數(shù)據(jù)文件頭中包含的版本信息為版本號;該方法進(jìn)一步包括配置結(jié)點中的數(shù)據(jù)文件被修改一次,則將該數(shù)據(jù)文件中的版本號加一;所述判斷配置結(jié)點中的數(shù)據(jù)文件是否新于普通結(jié)點中的數(shù)據(jù)文件為根據(jù)數(shù)據(jù)文件頭中的版本號進(jìn)行判斷,如果配置結(jié)點中的數(shù)據(jù)文件所對應(yīng)的版本號大,則確定該配置結(jié)點中的數(shù)據(jù)文件新;如果普通結(jié)點中的數(shù)據(jù)文件所對應(yīng)的版本號大,則確定該普通結(jié)點中的數(shù)據(jù)文件新;如果兩個數(shù)據(jù)文件中的版本號相同,則確定這兩個數(shù)據(jù)文件相同。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述數(shù)據(jù)文件頭中包含的版本信息進(jìn)一步包括當(dāng)前數(shù)據(jù)文件的生存時間;該方法進(jìn)一步包括結(jié)點在獲取當(dāng)前的數(shù)據(jù)文件時,確定該數(shù)據(jù)文件的生存時間,并將該生存時間保存在數(shù)據(jù)文件頭中;所述當(dāng)前數(shù)據(jù)文件的生存時間為最近一次對數(shù)據(jù)文件進(jìn)行修改的時間與結(jié)點上的當(dāng)前時間之間的時間段,與當(dāng)前數(shù)據(jù)文件從最近一次被修改到寫入本結(jié)點之間的時間段的和;所述在根據(jù)版本號確定兩個數(shù)據(jù)文件相同之前,進(jìn)一步包括根據(jù)兩個數(shù)據(jù)文件的生存時間進(jìn)行判斷;如果配置結(jié)點所對應(yīng)的數(shù)據(jù)文件生存時間短,則確定該數(shù)據(jù)文件新于普通結(jié)點中的數(shù)據(jù)文件;如果普通結(jié)點所對應(yīng)的數(shù)據(jù)文件的生存時間短,則確定該數(shù)據(jù)文件新于配置結(jié)點中的數(shù)據(jù)文件;如果兩個結(jié)點中的數(shù)據(jù)文件相同,則確定這兩個數(shù)據(jù)文件相同。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,該方法進(jìn)一步包括預(yù)先設(shè)置一個存活時間間隔;所述在根據(jù)兩個數(shù)據(jù)文件的生存時間進(jìn)行判斷時,如果兩個數(shù)據(jù)文件的存活時間的間隔小于預(yù)先設(shè)置的存活時間間隔,則確定這兩個數(shù)據(jù)文件相同。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述數(shù)據(jù)文件頭中包含的版本信息進(jìn)一步包括最近一次對當(dāng)前數(shù)據(jù)文件進(jìn)行修改的結(jié)點名稱;所述在根據(jù)版本號及數(shù)據(jù)文件的生存時間確定兩個數(shù)據(jù)文件相同之前,獲取最近一次對兩個數(shù)據(jù)文件進(jìn)行修改的結(jié)點名稱,確定這兩個結(jié)點中最近用作配置結(jié)點的結(jié)點所對應(yīng)的數(shù)據(jù)文件新于另一個數(shù)據(jù)文件;如果這兩個結(jié)點為同一個結(jié)點,則確定這兩個數(shù)據(jù)文件相同。
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括將數(shù)據(jù)文件的更新粒度設(shè)置為文件級。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括機(jī)群系統(tǒng)在確定當(dāng)前配置結(jié)點出現(xiàn)故障時,自動在所有結(jié)點中選擇其他結(jié)點作為當(dāng)前的配置結(jié)點。
全文摘要
本發(fā)明方案公開了一種實現(xiàn)機(jī)群環(huán)境中數(shù)據(jù)有效性的方法,該方法首先設(shè)置包含文件頭及數(shù)據(jù)的數(shù)據(jù)文件格式,其中,文件頭保存用于標(biāo)識數(shù)據(jù)文件的版本信息,數(shù)據(jù)中則保存全局性數(shù)據(jù),還需確定當(dāng)前的配置結(jié)點;該配置結(jié)點在自身的數(shù)據(jù)文件被修改時,向機(jī)群系統(tǒng)中的其他普通結(jié)點發(fā)送包含版本信息的更新請求,收到該更新請求的普通結(jié)點根據(jù)版本信息進(jìn)行比較,如果配置結(jié)點中的數(shù)據(jù)文件新,則將自身保存的數(shù)據(jù)文件更新為配置結(jié)點中的數(shù)據(jù)文件,并根據(jù)本結(jié)點上的信息對文件頭作相應(yīng)的修改;如果普通結(jié)點中的數(shù)據(jù)文件新,則要求配置結(jié)點將其保存的數(shù)據(jù)文件更新為本普通結(jié)點中的數(shù)據(jù)文件,同樣需要對文件頭進(jìn)行修改;如果兩個數(shù)據(jù)文件一樣新,則不作處理。
文檔編號G06F15/177GK1664805SQ20041000693
公開日2005年9月7日 申請日期2004年3月1日 優(yōu)先權(quán)日2004年3月1日
發(fā)明者馮銳, 黃平, 姜曉東, 許正華, 李電森 申請人:聯(lián)想(北京)有限公司