一種基于社區(qū)概念的分布式容錯方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于分布式計算容錯領(lǐng)域,是一種通過將分布式計算節(jié)點分區(qū)的方式進(jìn)行 容錯信息歸類,從而提高容錯效率,降低容錯控制成本的一種新型容錯方法。
【背景技術(shù)】
[0002] 隨著分布式計算的發(fā)展,計算的規(guī)模越來越大。由于計算節(jié)點的增加,系統(tǒng)故障率 也隨著增加。數(shù)據(jù)顯示,如ASCI -Q等大型的分布式計算集群,一個需要4096個CPU核心處理 的5小時的工作任務(wù)在一小時內(nèi)的故障率為50%左右。分布式計算中的容錯處理在并行計 算中顯得越來越重要,特別是在現(xiàn)今云技術(shù)需求越來越大的情況下。造成系統(tǒng)故障的原因 是多種多樣的,可能是因為網(wǎng)絡(luò)連接丟失,可能是機(jī)器發(fā)生故障,也有可能是黑客攻擊。在 故障分類中,以故障的表現(xiàn)形式來看,可分為fail-stop故障及Byzantine故障。fail-stop 類的故障是一種出現(xiàn)故障系統(tǒng)即停止運(yùn)行的故障,它不會引起對外的輸入或是主動提示系 統(tǒng)故障的信息;而Byzantine故障不會引起系統(tǒng)的停止,出現(xiàn)Byzantine故障時,系統(tǒng)會繼續(xù) 運(yùn)行,并輸入一些錯誤的結(jié)果進(jìn)而影響后續(xù)的計算結(jié)果。本發(fā)明注重解決fail-stop類的故 障。
[0003] 在分布式容錯方法中,常見的主要是檢查點方法和消息日志方法。檢查點方法的 本質(zhì)是將系統(tǒng)運(yùn)行的中間狀態(tài)以各種參數(shù)的形式保存起來,當(dāng)系統(tǒng)需要從故障中恢復(fù)的時 候,將檢查點中保存的各種狀態(tài)參數(shù)還原即可。檢查點方法可以保存單個系統(tǒng)進(jìn)程,也可以 同時保存整個系統(tǒng)的所有進(jìn)程。在系統(tǒng)恢復(fù)的時候。檢查點方法需要暫停整個系統(tǒng)的運(yùn)行, 等待檢查點的信息恢復(fù)完全后,整個系統(tǒng)才可重新運(yùn)行,在一定程度上浪費了系統(tǒng)運(yùn)行的 時間。與檢查點方法相比,消息日志方法記錄系統(tǒng)在運(yùn)行過程中傳遞的消息(message),當(dāng) 系統(tǒng)發(fā)生故障時,恢復(fù)系統(tǒng)通過重播日志記錄的消息來達(dá)到恢復(fù)故障的目的。消息日志方 法是基于PWD(piece_wise deterministic)假設(shè)原理,在恢復(fù)的時候只需要重播故障點與 恢復(fù)點之間的消息即可,并且只需要暫停受影響的進(jìn)程即可,這樣有效地避免了檢查點方 法的弊端。但消息日志方法需要記錄系統(tǒng)進(jìn)程在系統(tǒng)運(yùn)行過程中傳遞的所有消息,如果該 系統(tǒng)運(yùn)行過程中產(chǎn)生的消息過大,就會造成內(nèi)存溢出等故障。這也是消息日志方法的主要 缺點之一。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明要克服現(xiàn)有檢查點方法與消息日志方法的弊端,提供一種綜合檢查點方法 與消息日志方法的社區(qū)容錯方法。社區(qū)容錯方法是一種層次性的容錯方法,它可以避免檢 查點方法的弊端,相對應(yīng)消息日志方法具有較小的內(nèi)存消耗,并且具有較強(qiáng)的可擴(kuò)展性。
[0005] 社區(qū)容錯方法的基本原理是在并行計算中,一個大任務(wù)往往會被分解為幾個不同 的小任務(wù),并且將這一個個小任務(wù)分配給不同的CPU進(jìn)行處理。在不同的CPU上運(yùn)行著若干 個不同的進(jìn)程,這些進(jìn)程協(xié)同配合來完成這一個個小任務(wù)。在完成小任務(wù)的時候,每個進(jìn)程 間的耦合程度是不相同的,一些進(jìn)程之間有比較頻繁的消息傳遞,而另外一些進(jìn)程可能根 本就不會存在消息傳遞;具有比較頻繁的消息傳遞的進(jìn)程可以構(gòu)造出一個較大的集團(tuán),在 本方法中,我們稱之為社區(qū),因為該社區(qū)內(nèi)部的進(jìn)程具有較為頻繁的溝通?;谶@個事實, 本方法將容錯級別提高到了一組進(jìn)程上,而不是單個的進(jìn)程,通過構(gòu)造進(jìn)程社區(qū),來內(nèi)聚消 息傳遞,減少需要記錄的消息數(shù)量,提高故障恢復(fù)的效率。
[0006] 社區(qū)容錯方法的主要過程分為三個步驟。第一步是構(gòu)建進(jìn)程分區(qū);第二步是記錄 不同社區(qū)間所傳遞的消息及創(chuàng)建檢查點;第三步是恢復(fù)出現(xiàn)的故障。
[0007] 第一步:構(gòu)建進(jìn)程分區(qū)。分區(qū)的原則是基于進(jìn)程間的通信情況,社區(qū)內(nèi)部進(jìn)程通信 密集,而社區(qū)間沒有通信或通信較少。進(jìn)程社區(qū)的構(gòu)造主要基于以下兩個變量:社區(qū)的通信 直徑dia和單個進(jìn)程與已有社區(qū)間的距離dis。用符號匕表示社區(qū)i的所有進(jìn)程的集合,定義 社區(qū)i的元特征扣?(1)=[心^(1)],心是該社區(qū)1中的進(jìn)程的數(shù)量
為 整個社區(qū)的通信特征。S(pm)是社區(qū)i中進(jìn)程pm的通信特征,計算方式如下:
其中符號?表示兩個進(jìn)程之間存在通信行為?;谶@些 定義及計算方式,我們通過公式計算社區(qū)的通信直徑
t區(qū)通信的直徑值越 小,表示社區(qū)內(nèi)的進(jìn)程連接越緊密;相反,如果社區(qū)通信直徑越大,則表示社區(qū)內(nèi)的通信較 少。進(jìn)程p m與已有社區(qū)i的距離定義為
實中
為進(jìn)程pm與社區(qū)i的通信集合。本發(fā)明通過計算進(jìn)程與已 有社區(qū)之間的距離,判斷進(jìn)程所屬社區(qū);通過社區(qū)的通信直徑來計算一個社區(qū)內(nèi)部的通信 頻度,以判斷是否對該社區(qū)進(jìn)行分裂處理。通過進(jìn)程分區(qū)與社區(qū)分裂,最終完成進(jìn)程分區(qū)的 構(gòu)建。若系統(tǒng)有新的計算節(jié)點加入,新的計算節(jié)點中的進(jìn)程以同樣的方法選擇進(jìn)入現(xiàn)有的 社區(qū)中。
[0008] 第二步,記錄進(jìn)程間所傳遞的消息以及創(chuàng)建檢查點。在完成進(jìn)程社區(qū)的構(gòu)建后,社 區(qū)容錯方法進(jìn)入第二個步驟。對于社區(qū)內(nèi)部的消息,社區(qū)容錯方法將其視為一個整體,不對 消息進(jìn)行記錄,而是采用檢查點方法,以減少整體容錯過程中所記錄的消息數(shù)量。對每個社 區(qū),社區(qū)容錯方法采用非協(xié)同檢查點策略以保證不同社區(qū)的容錯獨立性,檢查點被存放在 穩(wěn)定的存儲介質(zhì)當(dāng)中,確保系統(tǒng)故障后檢查點的可用性。對于社區(qū)間的消息,該容錯方法將 以悲觀日志的方式記錄消息。記錄的對象為m. data+〈m. src,m. dest,m. ssn,m.rsn>,其中 m. data表示通信內(nèi)容,m. src表示消息的來源進(jìn)程,m. dest表示消息傳遞過程中的目標(biāo)進(jìn) 程,m. ssn為消息的發(fā)送進(jìn)程對該消息設(shè)置的發(fā)送序列號,m.rsn為消息接收進(jìn)程為消息設(shè) 置的接收序列號。這四組數(shù)據(jù)確保了在系統(tǒng)發(fā)生故障后,社區(qū)間的進(jìn)程所傳遞的消息可以 依照故障前的發(fā)送與接收順序執(zhí)行。
[0009] 第三步,恢復(fù)系統(tǒng)故障。系統(tǒng)恢復(fù)是容錯中的最后一步。在社區(qū)容錯方法中,將消 息分為了社區(qū)內(nèi)消息與社區(qū)間消息,通過對不同類型消息的處理以及檢查點的保存處理來 進(jìn)行故障恢復(fù)。當(dāng)某一個進(jìn)程社區(qū)的進(jìn)程在某個時間點發(fā)生崩潰時,根據(jù)本方法的恢復(fù)策 略,崩潰進(jìn)程社區(qū)將會回滾到它最近的一個檢查點上,然后系統(tǒng)重播該檢查點之后的所有 社區(qū)內(nèi)部消息。注意:社區(qū)內(nèi)部消息由該社區(qū)的進(jìn)程自主重播。而社區(qū)間的消息將由穩(wěn)定的 存儲介質(zhì)來重播。消息重播的次序由消息元組<m. src,m. dest,m. ssn,m. rsn>來決定。當(dāng)崩 潰社區(qū)重新執(zhí)行計算時,對外界社區(qū)會產(chǎn)生部分重復(fù)的消息。這些重復(fù)的消息也將由消息 元組〈m. src,m. dest,m. ssn,m. rsn>來判定,更具體地說是由其中的接收序列號m. rsn來決 定,當(dāng)該值小于外界社區(qū)保存的對于該進(jìn)程所在社區(qū)的最大接收序列號RSN值時,那么表示 該消息是重復(fù)消息,將被丟棄,反之將被接收。通過檢查點的恢復(fù)與消息日志的重播,分布 式計算系統(tǒng)將保持一致性,即系統(tǒng)發(fā)生故障前的一致性狀態(tài),從而達(dá)到容錯的效果。
[0010] 本發(fā)明的優(yōu)點是:綜合了檢查點技術(shù)與消息日志技術(shù),并采用分區(qū)的策略進(jìn)行層 次性容錯處理,極大的降低了容錯過程中的內(nèi)存使用,同時提高了容錯的可擴(kuò)展性,對于分 布式計算中的容錯處理較有較強(qiáng)的實用性。
【附圖說明】
[0011] 圖1是社區(qū)容錯方法三個基本步驟說明。
[0012] 圖2是社區(qū)容錯方法的檢查點應(yīng)用策略。
[0013]圖3是社區(qū)容錯方法的社區(qū)間消息的記錄方式。
[0014] 圖4是社區(qū)容錯方法的故障恢復(fù)場景實例。
【具體實施方式】
[0015] 為了便于問題描述,下面將結(jié)合附圖,描述本發(fā)明優(yōu)選【具體實施方式】。
[0016] 圖1示出了社區(qū)容錯的三個主要步聚:1)構(gòu)建進(jìn)程分區(qū),將不同的進(jìn)程根據(jù)其通信 情況劃分為不同的社區(qū);2)創(chuàng)建檢查點與記錄消息,針對不同的分區(qū)情況,創(chuàng)建檢查點并記 錄消息;3)系統(tǒng)恢復(fù)。
[0017] 各步驟的【具體實施方式】如下:
[0018] 1)構(gòu)建進(jìn)程分區(qū):在一個并行計算實施實例中,一個大任務(wù)往往會被分解為幾個 不同的小任務(wù),并且將這一個個小任務(wù)分配給不同的CPU進(jìn)行處理。在不同的CPU上運(yùn)行著 若干個不同的進(jìn)程,這些進(jìn)程協(xié)同配合來完成這一個個小任務(wù)。本步驟將不同的進(jìn)程根據(jù) 其通信情況劃分為不同的社區(qū),具體步驟如下:
[0019] S1:收集并行系統(tǒng)中運(yùn)行的所有進(jìn)程信息{Pl,p2,p3, ···,?"},其中Pl為收集到的進(jìn) 程信息。
[0020] S2:社區(qū)初始化。隨機(jī)選擇兩個進(jìn)程為種子進(jìn)程,由這兩個進(jìn)程開始構(gòu)建進(jìn)程社 區(qū)。兩個種子進(jìn)程分別形成一個單進(jìn)程的社區(qū),即兩個社區(qū)中都只有