一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的系統(tǒng)及方法
【專利摘要】本發(fā)明公開了一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的系統(tǒng)及方法,這個(gè)系統(tǒng)包括3個(gè)模塊,即監(jiān)控模塊,檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊。監(jiān)控模塊,負(fù)責(zé)監(jiān)控進(jìn)程是否正確運(yùn)行,在運(yùn)行不正常的時(shí)候關(guān)閉記錄模塊,啟動(dòng)恢復(fù)模塊;檢查點(diǎn)記錄模塊,負(fù)責(zé)以消息為單位記錄檢查點(diǎn);檢查點(diǎn)恢復(fù)模塊,負(fù)責(zé)按照一定的規(guī)則恢復(fù)檢查點(diǎn);所述監(jiān)控模塊分別與檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊相連,監(jiān)控模塊、檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊分別將父進(jìn)程運(yùn)行信息進(jìn)行監(jiān)控、記錄和恢復(fù)。方法包括:檢查點(diǎn)記錄和檢查點(diǎn)恢復(fù)。本發(fā)明解決了分布式檢查點(diǎn)最終無法找到一致性檢查點(diǎn)的問題,進(jìn)程之間的通信量非常少,其具有分布式檢查點(diǎn)非阻塞的優(yōu)點(diǎn)。
【專利說明】一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)科學(xué)領(lǐng)域,涉及計(jì)算機(jī)集群可靠性,更具體地,具體是適用于分布式環(huán)境下的異步檢查點(diǎn)技術(shù)協(xié)議,可用于計(jì)算機(jī)集群錯(cuò)誤恢復(fù)。
【背景技術(shù)】
[0002]目前,計(jì)算任務(wù)變得越來越復(fù)雜并且需要不斷增長(zhǎng)的運(yùn)算時(shí)間。與此同時(shí),高性能計(jì)算系統(tǒng)包括越來越多的故障頻發(fā)組件。最終結(jié)果是長(zhǎng)期運(yùn)行的分布式計(jì)算越來越多的被高頻的硬件錯(cuò)誤所打斷。在分布式計(jì)算中,當(dāng)一個(gè)進(jìn)程失效,代價(jià)是不僅是損失這個(gè)進(jìn)程的全部計(jì)算量,與之通信的計(jì)算進(jìn)程的計(jì)算量都會(huì)損失。為了確保分布式應(yīng)用在大規(guī)模的環(huán)境中可以更加有效的使用,支持容錯(cuò)機(jī)制是當(dāng)務(wù)之急。
[0003]分布式在邏輯上可以看成若干個(gè)相互獨(dú)立又相互協(xié)作的進(jìn)程,進(jìn)程之間通過消息互相通信共享信息資源,共同完成某項(xiàng)任務(wù)?,F(xiàn)階段進(jìn)行分布式環(huán)境下故障恢復(fù)主要使用的是被動(dòng)容錯(cuò)技術(shù)。即通過定時(shí)在系統(tǒng)內(nèi)記錄檢查點(diǎn)以保存系統(tǒng)狀態(tài),在系統(tǒng)出現(xiàn)故障時(shí)選取一致性檢查點(diǎn)狀態(tài)并進(jìn)行恢復(fù)。
[0004]檢查點(diǎn)技術(shù)關(guān)鍵點(diǎn)主要存在于兩個(gè)方面:第一,檢查點(diǎn)的實(shí)現(xiàn),現(xiàn)在已有blcr,creck等多種實(shí)現(xiàn)。并且已經(jīng)有多種MPI,例如openmpi,mpich等,將檢查點(diǎn)技術(shù)與MPI技術(shù)相融合。第二,檢查點(diǎn)協(xié)議的實(shí)現(xiàn),即如何選取全局一致的檢查點(diǎn)進(jìn)行恢復(fù)。當(dāng)進(jìn)程之間存在通信的時(shí)候,不加選擇的隨意使用記錄檢查點(diǎn)進(jìn)行恢復(fù)則會(huì)造成多米諾效應(yīng),造成恢復(fù)進(jìn)程的狀態(tài)不屬于一致性狀態(tài),造成進(jìn)程無法繼續(xù)正常運(yùn)行。因此,檢查點(diǎn)的記錄和恢復(fù)都應(yīng)該按照一定的協(xié)議以保證,在系統(tǒng)出現(xiàn)問題的時(shí)候可以找到一致性狀態(tài)。檢查點(diǎn)協(xié)議現(xiàn)階段主要有集中式檢查點(diǎn)協(xié)議和分布式檢查點(diǎn)協(xié)議兩種。但是對(duì)于分布式的應(yīng)用環(huán)境這兩種協(xié)議都有其自身的不足。
[0005]集中式檢查點(diǎn)在記錄全局一致檢查點(diǎn)時(shí)需要阻塞所有進(jìn)程并清空所有的進(jìn)程通信信道從而獲得全局一致的進(jìn)程狀態(tài)。將這類檢查點(diǎn)協(xié)議應(yīng)用于分布式環(huán)境會(huì)增加記錄檢查點(diǎn)所需要的時(shí)間和記錄檢查點(diǎn)時(shí)的不確定性,并且對(duì)于大規(guī)模應(yīng)用控制節(jié)點(diǎn)可能成為瓶頸。分布式檢查點(diǎn)每個(gè)應(yīng)用程序自行決定什么時(shí)候記錄檢查點(diǎn),這樣可以避免在記錄檢查點(diǎn)的時(shí)候進(jìn)行阻塞和同步的工作,但是在系統(tǒng)恢復(fù)的時(shí)候需要特定的算法尋找一致性狀態(tài),在出現(xiàn)問題的進(jìn)程和與其通信的進(jìn)程中尋找狀態(tài)一致性的檢查點(diǎn)狀態(tài)。但是由于檢查點(diǎn)是進(jìn)程自身是隨意記錄的,因此可能出現(xiàn)無法找到一致性狀態(tài)的問題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的是提供一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的系統(tǒng)及方法,其方法可以用簡(jiǎn)單的記錄及恢復(fù)的方法和很小的進(jìn)程通信代價(jià)來選擇具有一致性的檢查點(diǎn)。該方法是一種特殊的非阻塞檢查點(diǎn)協(xié)議。該方法不再像非阻塞檢查點(diǎn)協(xié)議無規(guī)律的進(jìn)行檢查點(diǎn)的記錄和恢復(fù),而是以消息為單位成對(duì)記錄和恢復(fù)檢查點(diǎn)。
[0007]本發(fā)明還實(shí)現(xiàn)了一套與之相關(guān)的系統(tǒng)用以實(shí)現(xiàn)檢查點(diǎn)記錄和恢復(fù)。
[0008]根據(jù)實(shí)施例提供的一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的系統(tǒng),這個(gè)系統(tǒng)包括3個(gè)模塊,即監(jiān)控模塊,檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊。
[0009]監(jiān)控模塊,負(fù)責(zé)監(jiān)控進(jìn)程是否正確運(yùn)行,在運(yùn)行不正常的時(shí)候關(guān)閉記錄模塊,啟動(dòng)恢復(fù)模塊;檢查點(diǎn)記錄模塊,負(fù)責(zé)以消息為單位記錄檢查點(diǎn);檢查點(diǎn)恢復(fù)模塊,負(fù)責(zé)按照一定的規(guī)則選擇檢查點(diǎn)恢復(fù)進(jìn)程;監(jiān)控模塊分別與檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊相連,監(jiān)控模塊、檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊分別對(duì)進(jìn)程進(jìn)行實(shí)時(shí)監(jiān)控、記錄和恢復(fù)。
[0010]相應(yīng)地,本發(fā)明給出了一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的方法,該方法包括下述步驟:
[0011]A、檢查點(diǎn)記錄:
[0012]I)啟動(dòng)計(jì)算任務(wù),對(duì)系統(tǒng)的監(jiān)控模塊、檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊進(jìn)行初始化;
[0013]2)在進(jìn)程正式運(yùn)算前,每個(gè)進(jìn)程各自記錄一個(gè)檢查點(diǎn),作為初始狀態(tài),命名為CK+進(jìn)程IP+Num_0,進(jìn)程IP為進(jìn)程自身所分配的IP地址;
[0014]3)系統(tǒng)中每個(gè)進(jìn)程維護(hù)一個(gè)max值列表,將max列表中所有value的值初始化為O ;
[0015]4)初始化之后,進(jìn)程各自運(yùn)行,發(fā)送的所有消息按照消息在發(fā)送端的發(fā)出順序進(jìn)行編號(hào);
[0016]5)監(jiān)控模塊對(duì)系統(tǒng)的通信狀況進(jìn)行監(jiān)控,每檢測(cè)到通信信道有一條消息發(fā)送,檢查點(diǎn)記錄模塊記錄一個(gè)檢查點(diǎn),命名為CKS+源IP+目的IP+Num_M,其中源IP為消息發(fā)送源端的IP,目的IP為消息接收端的IP,M為從源IP向目的IP發(fā)送的信息編號(hào),并按時(shí)間順序保存在磁盤上;
[0017]6)監(jiān)控模塊對(duì)通信狀態(tài)進(jìn)行監(jiān)控,每檢測(cè)到通信信道接收一條消息,檢查點(diǎn)記錄模塊記錄一個(gè)檢查點(diǎn),命名為CKR+源IP+目的IP+Num_M,其中源IP為消息發(fā)送源端的IP,目的IP為消息接收端的IP,M為從源IP向目的IP發(fā)送的信息編號(hào),并按時(shí)間順序保存在磁盤上;
[0018]7)接收端接收消息記錄檢查點(diǎn)后,更新max列表;
[0019]B、檢查點(diǎn)恢復(fù):
[0020]I)在崩潰進(jìn)程端尋找所有以CKR開頭的檢查點(diǎn)記錄,并找到最后記錄的檢查點(diǎn)CKRlast,并記錄其源IP為IPlast;
[0021]2)依照步驟B-1)中記錄的源IPlast,在max列表中尋找key = IPlast,讀取其value記為M-;
[0022]3)將Mmax發(fā)送給步驟B-1)中的IP last所在的進(jìn)程;
[0023]4)崩潰端進(jìn)程從步驟B-1)中的檢查點(diǎn)CKRlast恢復(fù),恢復(fù)后暫停進(jìn)程;
[0024]5)在IPlas^根據(jù)Mmax值找到檢查點(diǎn)CKS+源IP+目的IP+Num_Mmax,其中從此檢查點(diǎn)進(jìn)行恢復(fù),并通知崩潰端繼續(xù)運(yùn)行進(jìn)程;
[0025]6)收到確認(rèn)消息,恢復(fù)任務(wù)完成。
[0026]進(jìn)一步地,所述步驟A-3)中,列表用以記錄本進(jìn)程接收系統(tǒng)中其他某個(gè)固定進(jìn)程的所有消息編號(hào)中的最大值,列表具體結(jié)構(gòu)如下:
[0027]列表由(P-1)個(gè)key-value對(duì)組成;
[0028]其中,P為系統(tǒng)中參與任務(wù)的進(jìn)程個(gè)數(shù);key為消息發(fā)送端的IP,記為IPsend;value為本端接收IPsmd端發(fā)送的消息中的消息編號(hào)的最大值。
[0029]進(jìn)一步地,所述系統(tǒng)中其他某個(gè)固定進(jìn)程的所有消息編號(hào)中的最大值,即初始化之后,進(jìn)程發(fā)送的所有消息按照消息在發(fā)送端的發(fā)出順序的消息編號(hào)。
[0030]進(jìn)一步地,所述步驟A-7)中,更新max列表具體步驟如下:
[0031]i )讀取檢查點(diǎn)的名字,提取源IP記為IPreeeivet^ M值記為M received;
[0032]ii )在max值列表中尋找key = IPreceived,讀取其value值記為Mmax;
[0033]iii)如果 Mmax〈Mreeeived,將 Mreeeived賦值給 value,否則不賦值。
[0034]本發(fā)明具有如下優(yōu)點(diǎn):
[0035]本發(fā)明解決了分布式檢查點(diǎn)最終無法找到一致性檢查點(diǎn)的問題,通過大量的檢查點(diǎn)記錄保證系統(tǒng)中一定存在一致性狀態(tài)。且由于檢查點(diǎn)是按照一定的規(guī)律記錄的,因此恢復(fù)時(shí)進(jìn)程也可以按照一定的方法在固定數(shù)目的步驟內(nèi)完成。由于只需要固定數(shù)目的步驟,進(jìn)程之間的通信量也非常少。并且方法本身屬于分布式檢查點(diǎn)協(xié)議的改進(jìn),具有分布式檢查點(diǎn)非阻塞的優(yōu)點(diǎn)。
【專利附圖】
【附圖說明】
[0036]圖1是進(jìn)程系統(tǒng)模塊圖。
[0037]圖2是模塊啟動(dòng)流程圖。
[0038]圖3是發(fā)送端檢查點(diǎn)記錄模塊流程。
[0039]圖4是重組后數(shù)據(jù)包格式。
[0040]圖5是接收端檢查點(diǎn)記錄模塊流程。
[0041 ]圖6是接收模塊流程圖。
[0042]圖7是方法思想來源圖。
【具體實(shí)施方式】
[0043]下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。
[0044]一、系統(tǒng)初始化流程
[0045]本發(fā)明主要是有三個(gè)模塊組成的。分別是監(jiān)控模塊,檢查點(diǎn)記錄模塊,檢查點(diǎn)恢復(fù)模塊。監(jiān)控模塊負(fù)責(zé)監(jiān)控進(jìn)程是否正確運(yùn)行,在運(yùn)行不正常的時(shí)候關(guān)閉記錄模塊,啟動(dòng)恢復(fù)模塊。檢查點(diǎn)記錄模塊負(fù)責(zé)以消息為單位記錄檢查點(diǎn)。檢查點(diǎn)恢復(fù)模塊負(fù)責(zé)按照一定的規(guī)則恢復(fù)檢查點(diǎn)。監(jiān)控模塊分別與檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊相連,監(jiān)控模塊、檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊分別對(duì)進(jìn)程進(jìn)行實(shí)時(shí)監(jiān)控、記錄和恢復(fù)。
[0046]如圖1所示,系統(tǒng)啟動(dòng)時(shí)首先啟動(dòng)父進(jìn)程,父進(jìn)程啟動(dòng)四個(gè)子進(jìn)程,分別運(yùn)行計(jì)算任務(wù),監(jiān)控模塊,檢查點(diǎn)記錄模塊,檢查點(diǎn)恢復(fù)模塊。四個(gè)模塊的具體啟動(dòng)流程與相互調(diào)用方式如圖2所示。
[0047]步驟1:啟動(dòng)父進(jìn)程。父進(jìn)程的工作主要依據(jù)啟動(dòng)各個(gè)子進(jìn)程的返回結(jié)果決定下一步工作;
[0048]步驟2:父進(jìn)程啟動(dòng)子進(jìn)程運(yùn)行計(jì)算任務(wù);
[0049]步驟3:監(jiān)控模塊判斷計(jì)算任務(wù)是否啟動(dòng)成功。如果啟動(dòng)不成功,轉(zhuǎn)步驟2 ;如果啟動(dòng)成功,轉(zhuǎn)步驟4。監(jiān)控模塊判斷進(jìn)程是否啟動(dòng)成功,主要依賴于子進(jìn)程啟動(dòng)后傳給父進(jìn)程的返回碼;
[0050]步驟4:父進(jìn)程啟動(dòng)監(jiān)控進(jìn)程。監(jiān)控進(jìn)程的任務(wù)是監(jiān)控任務(wù)的運(yùn)行狀態(tài)。監(jiān)控模塊通過從父進(jìn)程處獲得計(jì)算任務(wù)的進(jìn)程id,再定時(shí)調(diào)用任務(wù)管理器檢查進(jìn)程是否存在的方式進(jìn)行;
[0051]步驟5:監(jiān)控模塊判斷監(jiān)控進(jìn)程是否啟動(dòng)成功,如果不成功轉(zhuǎn)步驟4。啟動(dòng)成功轉(zhuǎn)步驟6 ;
[0052]步驟6:父進(jìn)程啟動(dòng)檢查點(diǎn)記錄模塊。
[0053]二、檢查點(diǎn)記錄和恢復(fù)
[0054]下面給出了一種分布式環(huán)境下記錄檢查點(diǎn)的方法,包括下述步驟:
[0055]A、檢查點(diǎn)記錄模塊進(jìn)行檢查點(diǎn)記錄
[0056]I)啟動(dòng)計(jì)算任務(wù)初始化系統(tǒng)的監(jiān)控模塊、記錄檢查點(diǎn)模塊和檢查點(diǎn)恢復(fù)模塊進(jìn)行初始化,初始化時(shí)檢查點(diǎn)命名為CK+進(jìn)程IP+Num_0 ;
[0057]2)在進(jìn)程正式運(yùn)算前,每個(gè)進(jìn)程各自記錄一個(gè)檢查點(diǎn),作為初始狀態(tài),命名為CK+進(jìn)程IP+Num_0,進(jìn)程IP為進(jìn)程自身所分配的IP地址;
[0058]3)系統(tǒng)中每個(gè)進(jìn)程為系統(tǒng)中其他進(jìn)程維護(hù)一個(gè)max值列值,所有的max值構(gòu)成一個(gè)列表,列表中所有值初始化為0,列表用以記錄接收到某個(gè)固定進(jìn)程的最大消息的編號(hào);
[0059]列表用以記錄本進(jìn)程接收系統(tǒng)中其他某個(gè)固定進(jìn)程的所有消息編號(hào)中的最大值,列表具體結(jié)構(gòu)如下:
[0060]列表由(P-1)個(gè)key-value對(duì)組成;
[0061]其中,P為系統(tǒng)中參與任務(wù)的進(jìn)程個(gè)數(shù);key為消息發(fā)送端的IP,記為IPsend;value為本端接收IPsmd端發(fā)送的消息中的消息編號(hào)的最大值。即初始化之后,下一步驟進(jìn)程發(fā)送的所有消息按照消息在發(fā)送端的發(fā)出順序的消息編號(hào);
[0062]4)初始化之后,進(jìn)程各自運(yùn)行,發(fā)送的所有消息按照消息在發(fā)送端的發(fā)出順序進(jìn)行編號(hào);
[0063]5)監(jiān)控模塊對(duì)通信狀態(tài)進(jìn)行監(jiān)控,每檢測(cè)到通信信道有一條消息發(fā)送,檢查點(diǎn)記錄模塊記錄一個(gè)檢查點(diǎn),命名為CKS+源IP+目的IP+Num_M,其中源IP為消息發(fā)送源端的IP,目的IP為消息接收端的IP,M為從源IP向目的IP發(fā)送的信息編號(hào),并按時(shí)間順序保存在磁盤上;
[0064]6)監(jiān)控模塊對(duì)通信狀態(tài)進(jìn)行監(jiān)控,每檢測(cè)到通信信道接收一條消息,檢查點(diǎn)記錄模塊記錄一個(gè)檢查點(diǎn),命名為CKR+源IP+目的IP+Num_M,其中源IP為消息發(fā)送源端的IP,目的IP為消息接收端的IP,M為從源IP向目的IP發(fā)送的信息編號(hào),并按時(shí)間順序保存在磁盤上;
[0065]7)接收端接收消息記錄檢查點(diǎn)后,更新max列表;
[0066]更新max列表具體步驟如下:
[0067]i )讀取檢查點(diǎn)的名字,提取源IP記為IPreeeivet^ M值記為M received;
[0068]ii )在 max 列表中尋找 key = IPreceived,讀取其 value 值記為 Mmax;
[0069]iii)如果 Mmax<Mreceived,將 Mreceived賦值給 value,否則不賦值。
[0070]監(jiān)控信道記錄檢查點(diǎn)具體實(shí)施流程如圖3,圖5所示。
[0071]步驟1:將編號(hào)計(jì)數(shù)器數(shù)組置為0,編號(hào)計(jì)數(shù)器主要記錄本進(jìn)程發(fā)送給系統(tǒng)其它進(jìn)程的消息條數(shù),本進(jìn)程和系統(tǒng)其余任何進(jìn)程都需要一個(gè)變量記錄,因此需要N-1變量(N為分布式計(jì)算環(huán)境下運(yùn)行計(jì)算的進(jìn)程數(shù));
[0072]步驟2:監(jiān)控信道并攔截?cái)?shù)據(jù)包,這部分主要使用Iibpcap對(duì)IP數(shù)據(jù)包進(jìn)行攔截;
[0073]步驟3:提取源IP和目的IP,提取的源IP和目的IP主要是用作檢查點(diǎn)的命名;
[0074]步驟4:在IP數(shù)據(jù)包數(shù)據(jù)段末尾添加消息編號(hào),此處主要因?yàn)榫幪?hào)的長(zhǎng)度不定,為了防止數(shù)值過大而編號(hào)溢出,數(shù)據(jù)包最后兩個(gè)字節(jié)是IP數(shù)據(jù)包編號(hào)的長(zhǎng)度N,代表編號(hào)的長(zhǎng)度。最后兩個(gè)字節(jié)之前的倒數(shù)第2+N字節(jié)到倒數(shù)第3字節(jié)是正式的編號(hào)。新IP數(shù)據(jù)包的數(shù)據(jù)具體格式如圖4;
[0075]步驟5:將添加編號(hào)的IP數(shù)據(jù)包重新發(fā)送。
[0076]步驟6:記錄檢查點(diǎn)。
[0077]B、檢查點(diǎn)恢復(fù):
[0078]I)在崩潰進(jìn)程端尋找所以CKR開頭的檢查點(diǎn)記錄并找到最后記錄的檢查點(diǎn)CKRlast,并記錄其源IP記為IPlast;
[0079]由于以CKR開頭的檢查點(diǎn)在記錄時(shí)依照接收的順序進(jìn)行記錄,因此直接尋找最后的CKR檢查點(diǎn)。找到檢查點(diǎn)后從檢查點(diǎn)的名字讀取源IP ;
[0080]2)依照步驟B-1)中記錄的源IPlast,在max列表中尋找key = IPlast,讀取其value記為M-;
[0081]3)將max值發(fā)送給步驟B_l)中的源IPlast所在的進(jìn)程;
[0082]4)崩潰端進(jìn)程從步驟B-1)中的檢查點(diǎn)CKRlast恢復(fù),恢復(fù)后暫停進(jìn)程;
[0083]5)在IPlas^根據(jù)max值找到檢查點(diǎn)CK+源IP+目的IP+Num_max,從此檢查點(diǎn)進(jìn)行恢復(fù),并通知崩潰端繼續(xù)運(yùn)行進(jìn)程;
[0084]6)收到確認(rèn)消息,恢復(fù)任務(wù)完成。
[0085]上述過程如圖6所示。
[0086]三、方法基本原理證明:
[0087]本方法的思路來自于數(shù)據(jù)庫的transact1n。Transact1n是具有原子性的執(zhí)行單元,是不可以破壞的實(shí)體,transact1n之前是一個(gè)邏輯狀態(tài),transact1n之后又是另一個(gè)邏輯狀態(tài)。在兩個(gè)進(jìn)程間進(jìn)行通訊的時(shí)候?qū)⒁粭lmessage看作一個(gè)“transact1n”,這樣消息發(fā)送之前的兩個(gè)進(jìn)程可以看作是同一個(gè)邏輯狀態(tài),消息發(fā)送之后的兩個(gè)進(jìn)程可以看作是另一個(gè)邏輯狀態(tài)。在記錄檢查點(diǎn)的時(shí)候,以消息為單位在通信進(jìn)程兩端相同的邏輯狀態(tài)記錄檢查點(diǎn)。具體如圖7所示。
[0088]多米諾效應(yīng)分析
[0089]將分布式系統(tǒng)進(jìn)行如下的模型化:
[0090]多米諾效應(yīng)的本質(zhì)是一個(gè)邏輯問題。進(jìn)程間的每條消息通信都代表一個(gè)新的邏輯狀態(tài),消息發(fā)送的先后決定了邏輯狀態(tài)的先后順序,發(fā)送消息后的進(jìn)程或者接收消息的進(jìn)程的邏輯狀態(tài)就被更新為消息所在的邏輯狀態(tài)。因此,在時(shí)間維度上每條消息將發(fā)送端進(jìn)程依照消息發(fā)送次序分成若干個(gè)邏輯狀態(tài)間隔,接收端依照到達(dá)的消息也被分成不同的邏輯狀態(tài),而多米諾效應(yīng)的實(shí)質(zhì)是就是接收端進(jìn)程檢查點(diǎn)所處的邏輯狀態(tài)晚于發(fā)送端的檢查點(diǎn)所處的邏輯狀態(tài)。
[0091]一個(gè)分布式系統(tǒng)被定義為一組進(jìn)程的集合,進(jìn)程通過消息傳遞信息。每個(gè)進(jìn)程在時(shí)間這個(gè)維度上被模型化為一系列的邏輯狀態(tài)序列,每個(gè)狀態(tài)間隔從消息的發(fā)送或者接收開始,消息之后進(jìn)程的邏輯狀態(tài)就是消息的邏輯狀態(tài)直到下一個(gè)消息的發(fā)出或者接收。
[0092]每個(gè)進(jìn)程由于通信的對(duì)象的不同將通信狀態(tài)分成不同的模塊,例如,P1與進(jìn)程P2通信的狀態(tài)集合稱為P12,這樣進(jìn)程的狀態(tài)可以被拆成和不同進(jìn)程通信的狀態(tài)的集合。
[0093]P= {P1; P2,…,PJ,示進(jìn)程所有狀態(tài)集合,i = 1,2,3…η ;n> = 2。
[0094]Pm — {P m_ml,Pm-lm,Pm-m2,Pm-2m,Pm-m3,Pm_3m,…,Pm_mn,,Pm-mi 表不從進(jìn) f王 m 發(fā)送,由進(jìn)程i接收的所有消息及其在發(fā)送端引起的狀態(tài)變化。Pm-1m表示從進(jìn)程i發(fā)送由進(jìn)程m接收的所有消息及其在接收端弓I起的狀態(tài)變化。
[0095]每條消息記錄為M?_n,其中P為發(fā)送端的進(jìn)程號(hào),q為接收端的進(jìn)程號(hào),η為消息時(shí)序編號(hào)。
[0096]由于協(xié)議設(shè)置在消息的發(fā)送和接收時(shí)都要記錄檢查點(diǎn),因此需要區(qū)分發(fā)送端的檢查點(diǎn)和接收端的檢查點(diǎn)。
[0097]發(fā)送端的狀態(tài)為S?_n,其中P為發(fā)送端的進(jìn)程號(hào),q為接收端的進(jìn)程號(hào),η為邏輯狀態(tài)編號(hào),并與消息時(shí)序編號(hào)一致。
[0098]接收端的狀態(tài)為R?_n,其中P為發(fā)送端的進(jìn)程號(hào),q為接收端的進(jìn)程號(hào)。由于進(jìn)程是到達(dá)時(shí)不是按順序到達(dá)而是亂序到達(dá),因此,進(jìn)程的時(shí)序狀態(tài)并不完全依照有消息的邏輯時(shí)序決定,因?yàn)檫壿嫊r(shí)序按照時(shí)間只能向前不能退后,因此,η為所有消息中邏輯時(shí)序最新的消息的時(shí)序。
[0099]初始化時(shí)的狀態(tài)記為IP_Q。
[01 00] Pm-mn {I m-0 ? Mm—n—i,Sm—η—ι,Mm—n—2,Sm—n—2,,Mm—n—r,Sm—n—r}
[01 01 ] Pm-rmi {I n-0,Mn—m—1,Rn-m-al,Mn—m—2,Rn-m-a2,,Mn—m—s,Rn-m-as}
[0102]as= max (a ” a2, a3,...,aj
[0103]由于發(fā)送端的邏輯狀態(tài)代表消息的發(fā)送狀態(tài),接收端的狀態(tài)代表消息的接收狀態(tài),而根據(jù)邏輯上來說消息只有發(fā)送了才能接收,因此發(fā)送端的時(shí)序狀態(tài)必須大于接收端的時(shí)序狀態(tài)。設(shè)發(fā)送端選取恢復(fù)的檢查點(diǎn)所處的邏輯狀態(tài)為Sm_n_ai,接收端的選取恢復(fù)的檢查點(diǎn)所處的邏輯狀態(tài)是Rn-m-aj。則ai> = a」。
[0104]而依照本文的方案,系統(tǒng)的選取的是a]= B1
【權(quán)利要求】
1.一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的系統(tǒng),其特征在于,該系統(tǒng)包括: 監(jiān)控模塊,負(fù)責(zé)監(jiān)控進(jìn)程是否正確運(yùn)行,在運(yùn)行不正常的時(shí)候關(guān)閉記錄模塊,啟動(dòng)恢復(fù)模塊; 檢查點(diǎn)記錄模塊,負(fù)責(zé)以消息為單位記錄檢查點(diǎn); 檢查點(diǎn)恢復(fù)模塊,負(fù)責(zé)按照一定的規(guī)則選擇檢查點(diǎn)恢復(fù)進(jìn)程; 監(jiān)控模塊分別與檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊相連,監(jiān)控模塊、檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊分別對(duì)進(jìn)程進(jìn)行實(shí)時(shí)監(jiān)控、記錄和恢復(fù)。
2.一種分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的方法,其特征在于,該方法包括下述步驟: A、檢查點(diǎn)記錄: 1)啟動(dòng)計(jì)算任務(wù),對(duì)系統(tǒng)的監(jiān)控模塊、檢查點(diǎn)記錄模塊和檢查點(diǎn)恢復(fù)模塊進(jìn)行初始化; 2)在進(jìn)程正式運(yùn)算前,每個(gè)進(jìn)程各自記錄一個(gè)檢查點(diǎn),作為初始狀態(tài),命名為CK+進(jìn)程IP+Num_0,進(jìn)程IP為進(jìn)程自身所分配的IP地址; 3)系統(tǒng)中每個(gè)進(jìn)程維護(hù)一個(gè)max值列表,將max列表中所有value的值初始化為O; 4)初始化之后,進(jìn)程各自運(yùn)行,發(fā)送的所有消息按照消息在發(fā)送端的發(fā)出順序進(jìn)行編號(hào); 5)監(jiān)控模塊對(duì)系統(tǒng)的通信狀況進(jìn)行監(jiān)控,每檢測(cè)到通信信道有一條消息發(fā)送,檢查點(diǎn)記錄模塊記錄一個(gè)檢查點(diǎn),命名為CKS+源IP+目的IP+Num_M,其中源IP為消息發(fā)送源端的IP,目的IP為消息接收端的IP,M為從源IP向目的IP發(fā)送的信息編號(hào),并按時(shí)間順序保存在磁盤上; 6)監(jiān)控模塊對(duì)系統(tǒng)的通信狀態(tài)進(jìn)行監(jiān)控,每檢測(cè)到通信信道接收到一條消息,檢查點(diǎn)記錄模塊記錄一個(gè)檢查點(diǎn),命名為CKR+源IP+目的IP+Num_M,其中源IP為消息發(fā)送源端的IP,目的IP為消息接收端的IP,M為從源IP向目的IP發(fā)送的信息編號(hào),并按時(shí)間順序保存在磁盤上; 7)接收端接收消息記錄檢查點(diǎn)后,更新max列表; B、檢查點(diǎn)恢復(fù): 1)在崩潰進(jìn)程端尋找所有以CKR開頭的檢查點(diǎn)記錄,并找到最后記錄的檢查點(diǎn)CKRlast,并記錄其源IP為IPlast; 2)依照步驟B-1)中記錄的源IPlast,在max列表中尋找key= IPlast,讀取其value記為M-; 3)將Mmax發(fā)送給步驟B-1)中的IPlast所在的進(jìn)程; 4)崩潰端進(jìn)程從步驟B-1)中的檢查點(diǎn)CKRlast恢復(fù),恢復(fù)后暫停進(jìn)程; 5)在IPlas^根據(jù)Mmax值找到檢查點(diǎn)CKS+源IP+目的IP+Num_Mmax,從此檢查點(diǎn)進(jìn)行恢復(fù),并通知崩潰端繼續(xù)運(yùn)行進(jìn)程; 6)收到確認(rèn)消息,恢復(fù)任務(wù)完成。
3.根據(jù)權(quán)利要求2所述的分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的方法,其特征在于,所述步驟A-3)中,列表用以記錄本進(jìn)程接收系統(tǒng)中其他某個(gè)固定進(jìn)程的所有消息編號(hào)中的最大值,列表具體結(jié)構(gòu)如下: 列表由(P-1)個(gè)key-value對(duì)組成; 其中,P為系統(tǒng)中參與任務(wù)的進(jìn)程個(gè)數(shù);key為消息發(fā)送端的IP,記為IPsmd;value為本端接收IPsmd端發(fā)送的消息中的消息編號(hào)的最大值。
4.根據(jù)權(quán)利要求3所述的分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的方法,其特征在于,所述系統(tǒng)中其他某個(gè)固定進(jìn)程的所有消息編號(hào)中的最大值,即初始化之后,進(jìn)程發(fā)送的所有消息按照消息在發(fā)送端的發(fā)出順序的消息編號(hào)。
5.根據(jù)權(quán)利要求2所述的分布式環(huán)境下檢查點(diǎn)記錄和恢復(fù)的方法,其特征在于,所述步驟A-7)中,更新max列表具體步驟如下: i)讀取檢查點(diǎn)的名字,提取源IP記為IPr-和M值記為I—; ii)在max值列表中尋找key = IPreceived,讀取其value值記為Mmax;
iii)如果 Mmax〈Mreceived,將 Mreeeived賦值給 value,否則不賦值。
【文檔編號(hào)】G06F11/07GK104516790SQ201410816875
【公開日】2015年4月15日 申請(qǐng)日期:2014年12月24日 優(yōu)先權(quán)日:2014年12月24日
【發(fā)明者】馬建峰, 孟園, 李金庫, 姚青松, 馬卓 申請(qǐng)人:西安電子科技大學(xué)