本發明專利技術公開了一種基于消息重排序和消息數目檢驗消息日志恢復方法。本發明專利技術采用消息重排序方法,發送進程在發送消息時以改善的邏輯時鐘間接標記此消息的接收次序并將此次序保存在發送進程本地存儲中。當消息接收進程發生故障時,在恢復進程控制下首先從發送進程獲取已保存和未保存至日志文件的消息及消息的邏輯時鐘,然后根據消息的邏輯時鐘對未保存至日志文件的消息重新排序。最后把排序后的消息重新發送至故障進程,故障進程重新接收消息、處理消息,從而實現消息的重演。從而既改善了系統進程在無故障時的運行性能又簡化了進程發生故障時的恢復算法。
【技術實現步驟摘要】
本專利技術涉及分布式系統,尤其涉及ー種。
技術介紹
基于消息日志的恢復協議依賴于分段確定性假設(PWD)。根據這ー假設,一個進程的執行分為若干個狀態間隔(state interval),每個狀態間隔以ー個不確定事件的執行作為此間隔的開始,后接若干個確定事件的執行。根據PWD假設,消息接收事件是不確定性事件,而消息發送事件和進程的內部事件是確定性事件;因此,ー個狀態間隔往往是以ー個消息的接收事件的執行作為狀態間隔的開始,后接若干個進程內部事件和消息發送事件的執行。 若某個進程的狀態間隔依賴于ー個不確定性事件(例,消息接收事件)且此事件在恢復進程中不能被重新生成,則此進程被稱之為孤兒進程。在分段確定性假設(PWD)下,若進程P接收消息Hii后發送消息nij.至進程q,則進程q接收nij.后的狀態間隔依賴于進程P接收^后的狀態間隔。若進程P在發送消息后未將所接收消息Hii的必要信息保存至日志文件隨之P發生故障,則Hli的接收事件在恢復進程中是不可恢復的;依賴于P進程的Hli接收事件的進程q成為孤兒進程。所有日志恢復協議要求系統回滾(rollback)恢復時系統的全局狀態不能包含任何孤兒進程。傳統的悲觀和樂觀消息日志故障恢復協議不得不在兩個相互沖突的目標之間做出平衡或者進程之保存消息必要信息至日志文件與進程間的通信異步地進行,以提高進程無故障時的性能,此種情況下可能存在孤兒進程;或者在進程無故障運行時保存所有必須的信息以便在發生故障時快速恢復故障進程,此種情況下不存在孤兒進程。ー個消息的必要信息可表示為ー個四元組<m. source, m. ssn, m. dest, m. rsn>,其中m. source表示消息m的發送進程標識,m. ssn表示消息m的發送次序,m. dest表示消息m的接收進程標識,m. rsn表示消息m的接收次序。目前在分布式系統中主要存在兩種消息日志協議,樂觀消息和悲觀消息日志協議。樂觀消息日志,進程之保存消息必要信息至日志文件與進程間的通信是異步的,系統中可能存在孤兒進程。在此類協議中,任ー進程P保存已接收消息Hii的必要信息(<m.source, m. ssn, m. dest, m. rsn>)至日志文件之前允許發送消息Hij至其它進程q。當進程p發生故障吋,由于已接收消息Hli的必要信息可能未保存至日志文件且P可能已發送消息Hlj至q,因此進程q可能成為孤兒進程。樂觀日志協議下,由于進程無需維持消息必要信息保存至日志文件與進程間通信的同步性,因此進程在無故障運行時具有良好的性能;但在故障恢復時需要復雜的恢復計劃,以消除孤兒進程。悲觀消息日志,消息的保存與發送是同步的,只有所有已提交的消息的必要信息(<m. source, m. ssn, m. dest, m. rsn 寫入堅固存儲器之后才允許進程發送消息。在故障恢復時,由于悲觀消息日志必定不會出現孤兒進程,因此故障進程只需重新處理先前處理過且已保存的消息,從而實現進程狀態的恢復。然而,進程無故障運行時由于需保持消息必要信息的保存與發送的同步,由此必然大大降低了系統無故障運行時的性能。在樂觀消息日志協議中,由于消息的必要信息<m. source, m. ssn, m. dest, >在進程發生故障時可能未能保存至日志文件,傳統的消息協議下消息的接收次序m. rsn是不可恢復的,因而系統的進程不得不回退以重新發送和接收這些未保存消息。樂觀消息日志中由于消息保存至日志文件和進程通信的異步性因而可能導致消息接收進程中消息接收次序丟失。與現有消息日志恢復方法比較不同消息日志恢復協議具有不同的性能評價指標,可使用以下五個指標去評價ー個恢復協議的性能1、N. ckpt,每個進程所需檢查點數。2、INFOR. add, 一個應用消息所攜帶的額外信息量。3、SYS.num,恢復每個故障進程所需交換的系統消息數量。4、DIS.rol,進程的回退距離。5, N. roll,恢復期間需回退的進程數量。為簡單起見以MNCMR表示本申請所提出的基于消息數目校驗和消息重排序的消息日志恢復協議。在MNCMR協議中,每個進程僅需異步地保存一個檢查點,所以N. ckpt is等于I。每個應用消息所攜帯的數據是j和LC^所以INFOR. add是2。對于每次故障所需交換的信息量SYS. num為2n+2w;其中η是系統中進程的總數,w是由于故障未能保存至消息日志文件的消息數量。當ー個或多個進程發生故障時,只有故障進程回退,無故障進程繼續 執行,因此MNCMR協議相比其他協議具有最小的DIS. ro進程回退距離值。恢復期間MNCMR協議需回退的進程數量N. roll等于發生故障進程的總數,此指標與悲觀協議的指標相同。此外MNCMR協議同時具備了悲觀和樂觀協議的優點在進程無故障執行時,像樂觀協議那樣每個進程保存消息至日志文件與進程通信異步進行,因此進程在無故障運行時具有良好的性能;在進程故障恢復階段,其恢復算法簡單,因此具備了悲觀協議其恢復算法簡單的優點。再者,與現有協議比較進程發生故障時MNCMR協議中的無故障進程不是回退或停止等待,而是繼續執行,此特征類似于前向恢復算法使得系統中的進程具有較高的運行效率。自上世紀八十年代以來,大量的消息日志恢復協議發表于國內外期刊雜志中,以下選擇幾種典型協議與MNCMR協議進行比較。Sistla和Welch 提出了兩個基于消息樂觀日志恢復協議,一個協議中的發送消息攜帯了傳遞依賴向量(以Prasad. I表示此協議),另ー個協議所發送的應用消息僅攜帶發送進程當前的狀態間隔值(以Prasad. 2表示此協議)。Prasad. I協議中姆個應用消息所需額外信息量為ο (η),對于姆個故障需要交換ο (η2)的系統消息。Prasad. 2協議中姆個應用消息所需額外信息量為O(I),對于姆個故障需要交換o(n3)的系統消息。在Strom和Yemini 的樂觀消息日志協議中,每個發送的應用消息攜帯一個傳遞依賴向量,此向量具有η個分量,η為系統所具有的進程數量。在進程無故障執行時,每個進程需定期廣播這個傳遞依賴向量或者把此向量附加在發送的消息中。表I給出了 MNCMR協議與上述協議的比較結果,由此不難看出MNCMR協議在各項指標中均優于其他協議。表 I權利要求1.一種,其特征是,采用消息重排序方法,把消息的接收次序保存在發送進程中;當消息接收進程發生故障時,在恢復進程控制下首先從發送進程獲取已保存和未保存至日志文件的消息及消息的發送進程對應邏輯時鐘,然后根據消息的邏輯時鐘對未保存至日志文件的消息重新排序;最后把排序后的消息重新發送至故障進程,故障進程重新接收消息、處理消息,從而實現消息的重演,該方法的需要的普通進程工作步驟如下 步驟I、對于Y k, k為整數變量,初始化Uik = O以及Tik為O,分別表示進程Pi發送到進程Pk的消息總數為O以及進程Pk接收到進程Pi的消息總數為O,同時令Isn=O ; 步驟2、若定時時間到,則轉入3 ;否則轉入4 ; 步驟3、將進程Pi的狀態保存至決定因子文件mlog中,保存Ti, Ui, LCk(k=l,2…η)至本地本地存儲中,刪除舊的檢查本文檔來自技高網...
【技術保護點】
一種基于消息重排序和消息數目檢驗消息日志恢復方法,其特征是,采用消息重排序方法,把消息的接收次序保存在發送進程中;當消息接收進程發生故障時,在恢復進程控制下首先從發送進程獲取已保存和未保存至日志文件的消息及消息的發送進程對應邏輯時鐘,然后根據消息的邏輯時鐘對未保存至日志文件的消息重新排序;最后把排序后的消息重新發送至故障進程,故障進程重新接收消息、處理消息,從而實現消息的重演,該方法的需要的普通進程工作步驟如下:步驟1、對于?k為整數變量,初始化Uik=0以及Tik為0,分別表示進程pi發送到進程pk的消息總數為0以及進程pk接收到進程pi的消息總數為0,同時令lsn=0;步驟2、若定時時間到,則轉入3;否則轉入4;步驟3、將進程pi的狀態保存至決定因子文件mlog中,保存Ti,Ui,LCk(k=1,2…n)至本地本地存儲中,刪除舊的檢查點;步驟4、若進程pi將要向進程pj(j=1,2…n)發送消息,則轉入5;否則轉入9;步驟5、若Fi為1,表示進程pi出現故障且尚未恢復,此時轉入9;否則進程pi正常運行,轉入6;步驟6、若Fj為1,表示進程pj出現故障且尚未恢復,則等待一直到Fj為0為止;否則表示進程pj正常運行,此時轉入7;步驟7、因進程pi將要向進程pj發送消息,LCi的值增加1,Uij的值增加1,將添加到消息日志文件dfile中;步驟8.將Uij的值保存到本地存儲中,并向進程pj發送消息AM(i,LCi,m);步驟9.若進程pi接收到進程pj發送的消息,則轉入10;否則轉入14;步驟10、進程pi接收到進程pj發送的消息AM(j,LCj,m),需要判斷這個消息是由進程pj發送的還是進程pj的恢復進程發送的;步驟11、若AM.LCj>LCj,則表示此消息是由進程pj在無故障運行時發送的,?因此轉入12;否則此消息由進程pj的恢復進程發送,轉入14;步驟12、用AM.LCj的值更新LCj;將接收到的消息交給應用進程處理,并將記錄保存到內存中;因為接受到消息,LCi的值加1,并用LCi與LCj的最大值更新LCi;步驟13、執行其他確定性事件;步驟14、判定進程pi是否空閑,若進程pi空閑則轉入15;否則轉入16;步驟15、利用空閑時間,將內存中保存的記錄保存到mlog中;因為接收到消息,所以Tij值加1;將Ti,LCk(k=1,2…n)的值保存到硬盤中,lsn的值加1;步驟16、若收到進程pk(k=1,2…n)的錯誤標志清零消息sys_clearF(k),則轉入17;否則轉入18;步驟17、將0值賦給Fk,表明此時進程pk正常運行;步驟18、若接收到進程pk(k=1,2…n)的錯誤標志置1的消息sys_SetF(k),則轉入19;否則轉入20;步驟19、將1值賦給Fk,此時表明進程pk出現故障且尚未恢復;步驟20、進程pi是否為故障后重啟?若進程pi為故障后重啟則轉入21,否則轉入1;步驟21、用預先保存的Ti,Ui以及LCk(k=1,2…n)的值更新Ti,Ui以及LCk(k=1,2…n)的值,并令lsn=0,Fi=1;轉入1。FDA00001873290800011.jpg...
【技術特征摘要】
【專利技術屬性】
技術研發人員:高勝法,蔡靜,馮振,
申請(專利權)人:山東大學,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。