本發(fā)明涉及通信技術(shù)領(lǐng)域,特別是一種應(yīng)用于共享文件系統(tǒng)的任務(wù)再調(diào)度方法。
背景技術(shù):
海量數(shù)據(jù)處理是分布式系統(tǒng)中的一個(gè)典型應(yīng)用。在這類(lèi)應(yīng)用中,有一類(lèi)應(yīng)用的數(shù)據(jù)有以下兩個(gè)特點(diǎn):
(1)保存在共享文件系統(tǒng)中,系統(tǒng)的每個(gè)節(jié)點(diǎn)都能通過(guò)共享文件系統(tǒng)的客戶(hù)端訪問(wèn)這些數(shù)據(jù)。
(2)數(shù)據(jù)存在共性,而數(shù)據(jù)的共性存在固定的取值范圍,數(shù)據(jù)可以根據(jù)取值范圍保存在不同的文件中。
針對(duì)這類(lèi)應(yīng)用的特點(diǎn),我們通常是將不同取值范圍的數(shù)據(jù)文件調(diào)度給不同的節(jié)點(diǎn)進(jìn)行處理。在處理數(shù)據(jù)的過(guò)程中,節(jié)點(diǎn)失效及節(jié)點(diǎn)恢復(fù)是需要考慮的一個(gè)問(wèn)題。如何將失效節(jié)點(diǎn)的任務(wù)重新調(diào)度至其他節(jié)點(diǎn)和節(jié)點(diǎn)恢復(fù)時(shí)如何重新接管任務(wù)是確保任務(wù)順利完成的一個(gè)重要因素,本發(fā)明提出的方法即針對(duì)該問(wèn)題。
目前節(jié)點(diǎn)失效和節(jié)點(diǎn)恢復(fù)的任務(wù)再調(diào)度通常有以下幾種方式:
集中式:該方式中設(shè)置一個(gè)專(zhuān)門(mén)的調(diào)度節(jié)點(diǎn),其他的節(jié)點(diǎn)都是處理節(jié)點(diǎn),調(diào)度節(jié)點(diǎn)監(jiān)控處理節(jié)點(diǎn)的狀態(tài)。當(dāng)某個(gè)處理節(jié)點(diǎn)失效時(shí),將該節(jié)點(diǎn)的任務(wù)重新分配至其他健康節(jié)點(diǎn),當(dāng)失效節(jié)點(diǎn)恢復(fù)健康狀態(tài)時(shí),將原來(lái)的任務(wù)重新由該節(jié)點(diǎn)接管。這種方式實(shí)現(xiàn)簡(jiǎn)單,但是調(diào)度節(jié)點(diǎn)可能成為瓶頸,并且存在單點(diǎn)故障。
兩兩互備式:該方式中節(jié)點(diǎn)之間兩兩配對(duì),配對(duì)節(jié)點(diǎn)互為主備關(guān)系。即假定節(jié)點(diǎn)A和B為配對(duì)節(jié)點(diǎn),節(jié)點(diǎn)A失效時(shí),其任務(wù)由B進(jìn)行處理,節(jié)點(diǎn)A恢復(fù)時(shí)接管原有任務(wù),節(jié)點(diǎn)B的失效和恢復(fù)也是如此。這種方式實(shí)現(xiàn)簡(jiǎn)單,不存在單點(diǎn)故障問(wèn)題,但如果配對(duì)節(jié)點(diǎn)均失效,則其任務(wù)沒(méi)有節(jié)點(diǎn)接管。
集群式:該方式是兩兩互備式的升級(jí)版本,當(dāng)一個(gè)節(jié)點(diǎn)失效時(shí),需要多個(gè)健康節(jié)點(diǎn)之間進(jìn)行協(xié)商選出一個(gè)節(jié)點(diǎn)接管其任務(wù)。這種方式可以容忍多個(gè)節(jié)點(diǎn)同時(shí)出現(xiàn)故障,但是涉及到多個(gè)節(jié)點(diǎn)間的通信,實(shí)現(xiàn)起來(lái)比較復(fù)雜。
技術(shù)實(shí)現(xiàn)要素:
為了克服現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種應(yīng)用于共享文件系統(tǒng)的任務(wù)再調(diào)度方法,該方法實(shí)現(xiàn)簡(jiǎn)單,沒(méi)有單點(diǎn)故障并能容忍多個(gè)節(jié)點(diǎn)同時(shí)出現(xiàn)故障,能較好地將任務(wù)分派給分布式系統(tǒng)中的各個(gè)節(jié)點(diǎn)。
本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:一種應(yīng)用于共享文件系統(tǒng)的任務(wù)再調(diào)度方法,包括如下步驟:
當(dāng)某個(gè)節(jié)點(diǎn)失效時(shí),多個(gè)未失效節(jié)點(diǎn)之間進(jìn)行失效節(jié)點(diǎn)任務(wù)的搶占操作,搶占成功的節(jié)點(diǎn)接管失效節(jié)點(diǎn)的任務(wù)。
優(yōu)選的,所述搶占操作利用對(duì)某一文件的重命名操作來(lái)實(shí)現(xiàn),即所述多個(gè)未失效節(jié)點(diǎn)同時(shí)對(duì)同一個(gè)文件進(jìn)行重命名操作,操作成功的某個(gè)節(jié)點(diǎn)為搶占成功的節(jié)點(diǎn)。
優(yōu)選的,所述文件為初始時(shí)在共享文件系統(tǒng)中創(chuàng)建的以“Ti-Nj”命名的文件,其中,Ti為任務(wù)編號(hào),Nj為節(jié)點(diǎn)編號(hào)。
優(yōu)選的,每個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè)進(jìn)程,在所述搶占操作之前,遍歷上述所有文件,檢查每個(gè)文件的文件名和修改時(shí)間,判斷是否進(jìn)行搶占操作。
優(yōu)選的,以編號(hào)為k的節(jié)點(diǎn),文件名為T(mén)i-Nj的文件為例,所述判斷是否進(jìn)行搶占操作的步驟具體為:
a.若i=k,j=k,表明該任務(wù)正由節(jié)點(diǎn)k進(jìn)行處理,更新該文件的修改時(shí)間,繼續(xù)處理該任務(wù);
b.若i=k,j≠k,表明該任務(wù)原由節(jié)點(diǎn)k處理,節(jié)點(diǎn)k曾經(jīng)失效過(guò),被其他節(jié)點(diǎn)搶占進(jìn)行處理,現(xiàn)在節(jié)點(diǎn)k已恢復(fù)至健康狀態(tài),進(jìn)行搶占回本節(jié)點(diǎn)任務(wù)的處理;
c.若i≠k,j=k,表明該任務(wù)原由節(jié)點(diǎn)Ni處理,Ni失效時(shí)由Nk搶占成功,此時(shí)更新該文件的修改時(shí)間并繼續(xù)處理該任務(wù);
d.若i≠k,j≠k,表明該任務(wù)由其他節(jié)點(diǎn)處理,此時(shí)判斷Nj是否失效,若失效則由其它節(jié)點(diǎn)進(jìn)行搶占操作。
優(yōu)選的,步驟b中所述進(jìn)行搶占回本節(jié)點(diǎn)任務(wù)的處理具體為:檢查文件Ti-Nj的修改時(shí)間距離當(dāng)前時(shí)間是否已超過(guò)失效時(shí)間,如超過(guò),則表明節(jié)點(diǎn)Nj已失效,此時(shí)所有發(fā)現(xiàn)Nj失效的健康節(jié)點(diǎn)進(jìn)行搶占,節(jié)點(diǎn)Nk嘗試將Ti-Nj重命名為T(mén)i-Nk,如果成功則說(shuō)明搶占成功,更新Ti-Nk的修改時(shí)間,處理任務(wù)Ti;如未超過(guò),則需要與Nj進(jìn)行通信,通知Nj停止當(dāng)前任務(wù),然后將Ti-Nj重命名為T(mén)i-Nk,如果成功則說(shuō)明搶占成功,更新Ti-Nk的修改時(shí)間,處理任務(wù)Ti。
優(yōu)選的,步驟d中所述判斷Nj是否失效,若失效則由其它節(jié)點(diǎn)進(jìn)行槍?xiě)?zhàn)操作具體為:檢查文件Ti-Nj的修改時(shí)間距離當(dāng)前時(shí)間是否已超過(guò)失效時(shí)間,如超過(guò),則節(jié)點(diǎn)Nj已失效,此時(shí)所有發(fā)現(xiàn)Nj失效的健康節(jié)點(diǎn)進(jìn)行搶占,節(jié)點(diǎn)Nk嘗試將Ti-Nj重命名為T(mén)i-Nk,如果成功則說(shuō)明搶占成功,更新Ti-Nk的修改時(shí)間,處理任務(wù)Ti。
本發(fā)明的積極效果:本文提出一種集群式調(diào)度的實(shí)現(xiàn)方法,該方法無(wú)需多個(gè)節(jié)點(diǎn)之間進(jìn)行通信選出接管節(jié)點(diǎn),而是讓多個(gè)節(jié)點(diǎn)之間進(jìn)行失效節(jié)點(diǎn)任務(wù)的搶占,搶占成功的節(jié)點(diǎn)接管失效節(jié)點(diǎn)的任務(wù),節(jié)點(diǎn)恢復(fù)時(shí)也進(jìn)行任務(wù)的搶占。其中搶占的過(guò)程需要有一個(gè)“裁判”來(lái)決定誰(shuí)能搶占成功,而共享文件系統(tǒng)的服務(wù)器正好可以充當(dāng)這個(gè)“裁判”的角色。搶占這個(gè)操作利用文件重命名操作來(lái)實(shí)現(xiàn),而多個(gè)文件系統(tǒng)客戶(hù)端同時(shí)對(duì)同一個(gè)文件的重命名操作時(shí)只會(huì)有一個(gè)成功返回,即只會(huì)有一個(gè)搶占成功。判斷節(jié)點(diǎn)失效的機(jī)制可以基于文件修改時(shí)間來(lái)實(shí)現(xiàn)。本發(fā)明利用共享文件系統(tǒng)中多個(gè)客戶(hù)端進(jìn)行文件重命名具有排他性這一特點(diǎn),提出一種在節(jié)點(diǎn)失效時(shí)利用重命名操作進(jìn)行任務(wù)搶占的任務(wù)再調(diào)度方法,本發(fā)明方法實(shí)現(xiàn)簡(jiǎn)單,沒(méi)有單點(diǎn)故障并能容忍多個(gè)節(jié)點(diǎn)同時(shí)出現(xiàn)故障,能較好地將任務(wù)分派給分布式系統(tǒng)中的各個(gè)節(jié)點(diǎn),本發(fā)明方法可以較好地利用共享文件系統(tǒng)的特點(diǎn),很好的解決了節(jié)點(diǎn)失效時(shí)任務(wù)再調(diào)度的問(wèn)題。
附圖說(shuō)明
圖1是本發(fā)明的流程示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行詳細(xì)說(shuō)明。
參照?qǐng)D1,本發(fā)明優(yōu)選實(shí)施例提供一種應(yīng)用于共享文件系統(tǒng)的任務(wù)再調(diào)度方法,該方法無(wú)需多個(gè)節(jié)點(diǎn)之間進(jìn)行通信選出接管節(jié)點(diǎn),而是讓多個(gè)節(jié)點(diǎn)之間進(jìn)行失效節(jié)點(diǎn)任務(wù)的搶占,搶占成功的節(jié)點(diǎn)接管失效節(jié)點(diǎn)的任務(wù),節(jié)點(diǎn)恢復(fù)時(shí)也進(jìn)行任務(wù)的搶占。搶占操作利用文件重命名操作來(lái)實(shí)現(xiàn),而多個(gè)節(jié)點(diǎn)同時(shí)對(duì)同一個(gè)文件的重命名操作時(shí)只會(huì)有一個(gè)成功返回,即只會(huì)有一個(gè)搶占成功。判斷節(jié)點(diǎn)失效的機(jī)制可以基于文件修改時(shí)間來(lái)實(shí)現(xiàn),具體的實(shí)現(xiàn)如下所述:
假定節(jié)點(diǎn)數(shù)和任務(wù)數(shù)(數(shù)據(jù)文件數(shù))相同,均為n,節(jié)點(diǎn)編號(hào)從N1到Nn,任務(wù)編號(hào)從T1到Tn。所有節(jié)點(diǎn)均為健康狀態(tài)時(shí),每個(gè)節(jié)點(diǎn)處理一個(gè)任務(wù),即節(jié)點(diǎn)Ni處理任務(wù)Ti。我們將任務(wù)Ti與節(jié)點(diǎn)Nj組成“任務(wù)-節(jié)點(diǎn)”對(duì),即Ti-Nj表示任務(wù)i由節(jié)點(diǎn)j進(jìn)行處理。初始時(shí),我們?cè)诠蚕砦募到y(tǒng)中創(chuàng)建n個(gè)以“Ti-Nj”命名的文件,表示n個(gè)“任務(wù)-節(jié)點(diǎn)”對(duì),即T1-N1,T2-N2...Tn-Nn,表明Ni處理編號(hào)與之相同的任務(wù)Ti,Ti從屬于Ni。
每個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè)進(jìn)程,遍歷這n個(gè)文件,檢查每個(gè)文件名和文件的修改時(shí)間。我們以編號(hào)為k的節(jié)點(diǎn),文件名為T(mén)i-Nj的文件為例,進(jìn)行以下判斷:
1)若i=k,j=k,這表明該任務(wù)由本節(jié)點(diǎn)進(jìn)行處理,故只需更新該文件的修改時(shí)間即可,繼續(xù)處理該任務(wù)。
2)若i=k,j≠k,這表明該任務(wù)原由本節(jié)點(diǎn)處理,本節(jié)點(diǎn)曾經(jīng)失效過(guò),被其他節(jié)點(diǎn)搶占進(jìn)行處理,現(xiàn)在本節(jié)點(diǎn)已恢復(fù)至健康狀態(tài),故需要搶占回本節(jié)點(diǎn)進(jìn)行處理。檢查文件Ti-Nj的修改時(shí)間是否距離當(dāng)前時(shí)間是否已超過(guò)失效時(shí)間,如超過(guò),則表明節(jié)點(diǎn)Nj已失效,此時(shí)所有發(fā)現(xiàn)Nj失效的健康節(jié)點(diǎn)進(jìn)行搶占。節(jié)點(diǎn)Nk嘗試將Ti-Nj重命名為T(mén)i-Nk,如果成功則說(shuō)明搶占成功,更新Ti-Nk的修改時(shí)間,處理任務(wù)Ti。如未超過(guò),則需要與Nj進(jìn)行通信,通知Nj停止當(dāng)前任務(wù),然后將Ti-Nj重命名為T(mén)i-Nk,如果成功則說(shuō)明搶占成功,更新Ti-Nk的修改時(shí)間,處理任務(wù)Ti。
3)若i≠k,j=k,這表明該任務(wù)原由節(jié)點(diǎn)Ni處理,Ni失效時(shí)由Nk搶占成功,故只需更新該文件的修改時(shí)間即可,繼續(xù)處理該任務(wù)。
4)若i≠k,j≠k,這表明該任務(wù)由其他節(jié)點(diǎn)處理,此時(shí)需判斷Nj是否失效。檢查文件Ti-Nj的修改時(shí)間是否距離當(dāng)前時(shí)間是否已超過(guò)失效時(shí)間,如超過(guò),則表明節(jié)點(diǎn)Nj已失效,此時(shí)所有發(fā)現(xiàn)Nj失效的健康節(jié)點(diǎn)進(jìn)行搶占。節(jié)點(diǎn)Nk嘗試將Ti-Nj重命名為T(mén)i-Nk,如果成功則說(shuō)明搶占成功,更新Ti-Nk的修改時(shí)間,處理任務(wù)Ti。
以上是任務(wù)數(shù)與節(jié)點(diǎn)數(shù)相同的情形,通常任務(wù)數(shù)會(huì)大大超過(guò)節(jié)點(diǎn)數(shù),我們可將任務(wù)按照某種規(guī)則進(jìn)行哈希計(jì)算,具有相同哈希值的任務(wù)分派給相同的節(jié)點(diǎn)進(jìn)行處理。
綜上所述,本發(fā)明方法可以很好地利用共享文件系統(tǒng)的特點(diǎn),從而很好的解決節(jié)點(diǎn)失效時(shí)任務(wù)再調(diào)度的問(wèn)題。
以上所述的僅為本發(fā)明的優(yōu)選實(shí)施例,所應(yīng)理解的是,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的思想和原則之內(nèi)所做的任何修改、等同替換等等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。