專利名稱::用于提供有保證的分布式故障通知的方法
技術(shù)領(lǐng)域:
:本發(fā)明主要涉及在分布式系統(tǒng)中的故障通知,更特別地,涉及用于保證在分布式系統(tǒng)中的節(jié)點(diǎn)將接收到在那個(gè)系統(tǒng)任何部分中的故障通知。
背景技術(shù):
:在大樓分布式系統(tǒng)中的一項(xiàng)挑戰(zhàn)是避免系統(tǒng)的一個(gè)部分有福地保持對(duì)該系統(tǒng)中其它地方發(fā)生的重大故障狀態(tài)的無知。在系統(tǒng)中節(jié)點(diǎn)上運(yùn)行的應(yīng)用依賴于彼此的應(yīng)用狀態(tài),諸如數(shù)據(jù)塊、資源、變量、操作狀態(tài)等等。因此,不知道系統(tǒng)中的故障可以導(dǎo)致錯(cuò)誤行為和孤立狀態(tài)。例如,考慮分布式系統(tǒng)中的節(jié)點(diǎn)A、B和C。在節(jié)點(diǎn)B和C上運(yùn)行的應(yīng)用依賴于節(jié)點(diǎn)A的一個(gè)特定的應(yīng)用狀態(tài),諸如當(dāng)前溫度T。如果節(jié)點(diǎn)A故障,或者在節(jié)點(diǎn)A與B或者A與C之間的通信鏈路故障,則這個(gè)應(yīng)用狀態(tài)不再是有效的。如果節(jié)點(diǎn)B和C不知道節(jié)點(diǎn)A故障,則它們假定其對(duì)于T的當(dāng)前值是有效的。然而,當(dāng)實(shí)際的T改變時(shí),在節(jié)點(diǎn)B和C上使用無效的T的應(yīng)用將產(chǎn)生錯(cuò)誤的結(jié)果。因此,存在對(duì)故障檢測(cè)并將系統(tǒng)中的故障通知節(jié)點(diǎn)的需求。在分布式計(jì)算機(jī)系統(tǒng)中的故障檢測(cè)是困難的。在分布式系統(tǒng)上的基礎(chǔ)工作說明,一般不可能區(qū)別已經(jīng)崩潰了的遠(yuǎn)程計(jì)算機(jī)、運(yùn)行非常慢的遠(yuǎn)程計(jì)算機(jī)、正在關(guān)閉的網(wǎng)絡(luò)和若干其它故障場(chǎng)景。因此,故障檢測(cè)服務(wù)不能完美地報(bào)告所有故障,而只報(bào)告在某些條件下的故障。已經(jīng)在分布式計(jì)算機(jī)環(huán)境中使用了前面的故障檢測(cè)服務(wù),試圖通過并行地在幾個(gè)計(jì)算機(jī)上運(yùn)行相同的程序來實(shí)現(xiàn)可靠性和可用性。在這些系統(tǒng)中,將每一輸入發(fā)送給所有計(jì)算機(jī)。在這種背景下,這有時(shí)稱為“鎖-步復(fù)制(lock-stepreplication)”或“虛擬同步(virualsynchrony)”,幾個(gè)計(jì)算機(jī)的每一個(gè)接收所有輸入,進(jìn)行某些計(jì)算,并(典型地)將某種輸出發(fā)送回用戶。用戶隨后聚集應(yīng)答,可能通過將最常出現(xiàn)的應(yīng)答(如果應(yīng)答碰巧不相同)視為確定的。因而,對(duì)于幾個(gè)計(jì)算機(jī)的每一個(gè),經(jīng)常必需一致于組中所有其它計(jì)算機(jī)的身份。隨后,故障檢測(cè)服務(wù)的角色是檢測(cè)已經(jīng)故障的計(jì)算機(jī),并將此信息傳播給組的所有成員。故障檢測(cè)服務(wù)一般與組成員資格服務(wù)(groupmembershipservice)緊密結(jié)合;組成員資格服務(wù)是本地服務(wù),運(yùn)行它的每個(gè)計(jì)算機(jī)對(duì)于哪些計(jì)算機(jī)可用于加入分布式計(jì)算環(huán)境(有可能由加入的新計(jì)算機(jī)來代替認(rèn)為已經(jīng)故障的計(jì)算機(jī))的問題是有權(quán)威的。這些故障檢測(cè)服務(wù)一般不適于同時(shí)處理大量機(jī)器,并且它們一般提供可靠的故障通知,視可靠的消息基礎(chǔ)的持續(xù)操作而定。另一個(gè)故障檢測(cè)服務(wù)尋求確保大多數(shù)計(jì)算機(jī)一致于哪些其它計(jì)算機(jī)正在面對(duì)某些故障運(yùn)行,但不是所有故障。例如,故障通知服務(wù)只檢測(cè)已變成完全不可到達(dá)的計(jì)算機(jī),而不檢測(cè)只阻止某些成對(duì)的計(jì)算機(jī)通信的通信故障。而且,故障檢測(cè)服務(wù)不支持建立多個(gè)小分組,并要求加入故障檢測(cè)服務(wù)的所有計(jì)算機(jī)知道同樣參加的所有其它計(jì)算機(jī)。因此,在本領(lǐng)域中,存在對(duì)輕量的分布式故障通知服務(wù)的需求,該服務(wù)考慮故障通知組(failurenotificationgroup)的形成,并保證故障通知組中的每一計(jì)算機(jī)將可靠地得到影響該組的系統(tǒng)故障的通知。發(fā)明概述本發(fā)明主要針對(duì)在網(wǎng)絡(luò)中的一組計(jì)算機(jī)上的運(yùn)行的分布式系統(tǒng)中保證故障通知。按照本發(fā)明,故障通知(FN)組是由分布式系統(tǒng)中的計(jì)算機(jī)組形成的。FN組可在系統(tǒng)中的所有計(jì)算機(jī)中形成,或者在系統(tǒng)中的任何計(jì)算機(jī)子集中形成。而且,在系統(tǒng)中的相同計(jì)算機(jī)集合上,可存在多個(gè)重疊的FN組。這個(gè)FN組的成員可靠地得到在該分布式系統(tǒng)中影響該FN組中成員的任何故障的通知,因此組成員可響應(yīng)于該故障采取合適的動(dòng)作。如果一個(gè)FN組存在于一個(gè)節(jié)點(diǎn)上(由于其較早的創(chuàng)建),則在該節(jié)點(diǎn)上的應(yīng)用可以通過注冊(cè)用于該FN組的故障處理程序,將一個(gè)狀態(tài)與那個(gè)組相關(guān)聯(lián)。本發(fā)明保證,故障處理程序?qū)⒃谝粋€(gè)故障狀態(tài)影響該FN組時(shí)任何時(shí)候被調(diào)用,并且故障處理程序隨后可以適當(dāng)?shù)卦谠摖顟B(tài)上動(dòng)作。創(chuàng)建一個(gè)FN組的動(dòng)作也創(chuàng)建一個(gè)唯一的標(biāo)識(shí)符,通過這個(gè)標(biāo)識(shí)符知道該FN組,以便故障處理程序可正確地與所想要的組相關(guān)聯(lián)。當(dāng)在FN組中的一個(gè)計(jì)算機(jī)查明已發(fā)生了故障時(shí),該計(jì)算機(jī)用信號(hào)將一個(gè)用于該FN組的故障通知發(fā)給所有可到達(dá)的FN組成員。收到故障通知并擁有用于該FN組(由特有的標(biāo)識(shí)符表示)的故障處理程序的FN組成員將識(shí)別出它們應(yīng)該激活這個(gè)故障處理程序。與該FN組相關(guān)聯(lián)的故障處理程序隨后由組成員執(zhí)行,以在應(yīng)用狀態(tài)上完成適當(dāng)?shù)膽?yīng)用層動(dòng)作(例如,垃圾收集)。如果一個(gè)FN組成員不是可到達(dá)的,但它還沒有崩潰,則它仍將知道這個(gè)故障一未能從其它FN組成員接收確認(rèn)一個(gè)特定FN組的繼續(xù)存在的查驗(yàn)(ping),將具有與接收那個(gè)FN組終止的顯式通知相同的效果。節(jié)點(diǎn)不需要為它們所屬的每一FN組注冊(cè)一個(gè)故障處理程序。例如,特定節(jié)點(diǎn)A可能創(chuàng)建一個(gè)由它本身與另一個(gè)節(jié)點(diǎn)B組成的FN組以便監(jiān)視節(jié)點(diǎn)B是否可到達(dá),此時(shí)不必初始化這兩個(gè)節(jié)點(diǎn)之間的應(yīng)用層協(xié)調(diào)的動(dòng)作。在本例中,節(jié)點(diǎn)B沒有理由為這個(gè)故障通知組注冊(cè)一個(gè)故障處理程序。要查明是否已經(jīng)發(fā)生了故障,本發(fā)明提供三種方法。在一種方法中,每一FN組直接查驗(yàn)每一其它FN組成員。如果被查驗(yàn)的FN組成員未能應(yīng)答查驗(yàn),則發(fā)送查驗(yàn)的FN組成員用信號(hào)將故障通知發(fā)給FN組。在第二種方法中,使用一種樹拓?fù)浞峙洳轵?yàn)的職責(zé)。將每一FN組成員建立為樹中的一個(gè)節(jié)點(diǎn),且每一節(jié)點(diǎn)只負(fù)責(zé)查驗(yàn)樹中毗鄰的節(jié)點(diǎn)。再一次,如果被查驗(yàn)的FN組成員未能應(yīng)答查驗(yàn),則發(fā)送查驗(yàn)的FN組成員用信號(hào)將故障通知發(fā)送給FN組。在用于探知是否已發(fā)生了故障的第三種方法中,本發(fā)明是在現(xiàn)有覆蓋網(wǎng)絡(luò)上實(shí)現(xiàn)的。覆蓋網(wǎng)絡(luò)提供應(yīng)用-層路由至網(wǎng)絡(luò)中的計(jì)算機(jī),盡管依賴于下層的網(wǎng)絡(luò)-層路由協(xié)議(例如,互聯(lián)網(wǎng)協(xié)議(IP)路由)以實(shí)現(xiàn)應(yīng)用-層路由。要維護(hù)覆蓋網(wǎng)絡(luò),每一計(jì)算機(jī)保持一個(gè)覆蓋網(wǎng)絡(luò)中的計(jì)算機(jī)子集的列表,并周期性地查驗(yàn)?zāi)切┯?jì)算機(jī)以查明那些計(jì)算機(jī)是否還有效。本發(fā)明通過要求覆蓋網(wǎng)絡(luò)中的節(jié)點(diǎn)通知本發(fā)明在其列表中的一個(gè)計(jì)算機(jī)是否失效--即它不象所期望的那樣響應(yīng)查驗(yàn),來杠桿調(diào)節(jié)這個(gè)覆蓋維護(hù)。本發(fā)明隨后判定所報(bào)告的覆蓋故障是否沿著FN組的兩個(gè)成員之間的通信路徑。如果覆蓋故障超過兩個(gè)FN組成員之間的路徑,則用信號(hào)將故障通知發(fā)給所有FN組成員。通過下面參考附圖進(jìn)行的說明性實(shí)施例的詳細(xì)描述,將使本發(fā)明的附加特征和優(yōu)點(diǎn)顯而易見。盡管所附的權(quán)利要求書精確地闡述了本發(fā)明的特征,但本發(fā)明連同它的目標(biāo)與優(yōu)點(diǎn)可通過下面結(jié)合下列附圖的詳細(xì)描述來最好地理解圖1a是方框圖,主要例示本發(fā)明駐留的示例性計(jì)算機(jī)系統(tǒng);圖1b是方框圖,主要例示本發(fā)明運(yùn)行的示例性網(wǎng)絡(luò)環(huán)境;圖2是方框圖,例示在本發(fā)明中應(yīng)用、故障通知功能與網(wǎng)絡(luò)節(jié)點(diǎn)之間的交互;圖3a是流程圖,例示通過本發(fā)明創(chuàng)建故障通知組;圖3b是流程圖,例示由一個(gè)應(yīng)用在使用本發(fā)明創(chuàng)建故障通知組時(shí)所采取的步驟;圖4a是偽代碼,代表本發(fā)明的一個(gè)應(yīng)用程序接口;圖4b是偽代碼,代表本發(fā)明的另一個(gè)應(yīng)用程序接口;圖5是流程圖,例示由本發(fā)明的另一個(gè)實(shí)施例創(chuàng)建故障通知組;圖6描繪本發(fā)明的示例生成樹故障通知拓?fù)浣Y(jié)構(gòu);圖7描繪在示例性覆蓋網(wǎng)絡(luò)中節(jié)點(diǎn)的通信拓?fù)浣Y(jié)構(gòu);圖8a是流程圖,例示在本發(fā)明中在創(chuàng)建多播故障通知樹過程中由收到建立消息的節(jié)點(diǎn)所采取的步驟;圖8b是流程圖,在本發(fā)明中在創(chuàng)建多播故障通知樹過程中由收到確認(rèn)的節(jié)點(diǎn)所采取的步驟;圖9描繪本發(fā)明的示例性多播故障通知樹的通信拓?fù)浣Y(jié)構(gòu);圖10描繪疊加在圖7的覆蓋網(wǎng)絡(luò)通信拓?fù)浣Y(jié)構(gòu)上的本發(fā)明的示例性多播故障通知樹的通信拓?fù)浣Y(jié)構(gòu);圖11是流程圖,例示本發(fā)明的多播故障通知樹中的節(jié)點(diǎn)在檢測(cè)到通信故障時(shí)所采取的步驟。詳細(xì)說明轉(zhuǎn)到附圖,其中相同的參考數(shù)字引用相同的元素,例示實(shí)現(xiàn)本發(fā)明的合適計(jì)算環(huán)境。盡管沒有要求,但將在計(jì)算機(jī)可執(zhí)行指令諸如由個(gè)人計(jì)算機(jī)執(zhí)行的程序模塊的一般背景下描述本發(fā)明。通常,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。而且,本領(lǐng)域的熟練技術(shù)人員將意識(shí)到,可與其它計(jì)算機(jī)系統(tǒng)配置一起實(shí)施本發(fā)明,它們包括手持設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型機(jī)等等。也可在分布式計(jì)算環(huán)境中實(shí)施本發(fā)明,其中由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理裝置來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可定位在本地和遠(yuǎn)程兩者的存儲(chǔ)器存儲(chǔ)裝置中。圖1例示在其上實(shí)現(xiàn)本發(fā)明的合適的計(jì)算系統(tǒng)環(huán)境100。計(jì)算系統(tǒng)環(huán)境100只是合適的計(jì)算環(huán)境的一個(gè)例子,且并非想要建立任何有關(guān)本發(fā)明的使用范圍或功能的限制。也不應(yīng)該將這個(gè)計(jì)算環(huán)境解釋為具有與在示例性操作系統(tǒng)100中例示的任何一個(gè)組件或其組合有關(guān)的任何依賴性或要求。本發(fā)明與眾多其它通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置一起運(yùn)行??蛇m用于本發(fā)明的眾所周知計(jì)算系統(tǒng)、環(huán)境和/或配置的例子包括,但不限于,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、機(jī)頂盒、可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型機(jī)、包括上述系統(tǒng)或裝置的分布式計(jì)算環(huán)境等等??稍谟?jì)算機(jī)可執(zhí)行指令諸如由計(jì)算機(jī)執(zhí)行的程序模塊的一般背景下描述本發(fā)明。通常,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。也可在分布式計(jì)算環(huán)境中實(shí)施本發(fā)明,其中由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理裝置執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可定位在本地和遠(yuǎn)程兩者的存儲(chǔ)器存儲(chǔ)裝置中。參考圖1,用于實(shí)現(xiàn)本發(fā)明的示例性系統(tǒng)包括以計(jì)算機(jī)110形式的通用計(jì)算裝置。計(jì)算機(jī)110的組件可包括,但不限于,將處理單元120、系統(tǒng)存儲(chǔ)器130和各種系統(tǒng)組件包括系統(tǒng)存儲(chǔ)器耦合到處理單元120。系統(tǒng)總線121可以是任何若干類型總線結(jié)構(gòu)中,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外設(shè)總線和使用多種多樣總線結(jié)構(gòu)的局部總線。作為例子,但非限制,這樣的結(jié)構(gòu)包括國(guó)際標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線,微通道結(jié)構(gòu)(MCA)總線,增強(qiáng)ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線和外部件互連(PCI),也稱為夾層總線(Mezzaniebus)。計(jì)算機(jī)110一般包括多種多樣的計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是任何可以由計(jì)算機(jī)110存取的可用介質(zhì),并包括易失性與非易失性的介質(zhì)、可移動(dòng)與不可移動(dòng)的介質(zhì)。作為例子,非限制性地,計(jì)算機(jī)可讀介質(zhì)可包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以任何用于存儲(chǔ)信息諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)的方法或技術(shù)實(shí)現(xiàn)的易失性與非易失性、可移動(dòng)與不可移動(dòng)的介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)技術(shù)、CD-ROM、數(shù)字通用盤(DVD)或其它光盤存儲(chǔ)器、磁盒、磁帶、磁盤存儲(chǔ)器或其它磁存儲(chǔ)裝置,或者可被用于存儲(chǔ)想要的信息和能由計(jì)算機(jī)110存取的任何其它介質(zhì)。通信介質(zhì)通常包括在經(jīng)調(diào)制的數(shù)據(jù)信號(hào)諸如載波或其它傳輸機(jī)制中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并包括任何信息傳遞介質(zhì)。術(shù)語“經(jīng)調(diào)制的數(shù)據(jù)信號(hào)”指一種信號(hào),具有一個(gè)或多個(gè)以將信息編碼在該信號(hào)中這樣一種方式設(shè)置或改變的特性。作為例子,而非限制性地,通信介質(zhì)包括有線的介質(zhì)諸如有線的網(wǎng)絡(luò)或直接線連接,并包括無線介質(zhì)諸如聲音、RF、紅外線和其它無線介質(zhì)。上述的任何組合也應(yīng)該包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。系統(tǒng)存儲(chǔ)器130包括以易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì),諸如只讀存儲(chǔ)器(ROM)131和隨機(jī)存取存儲(chǔ)器(RAM)132?;据斎?輸出系統(tǒng)133(BIOS),包含幫助計(jì)算機(jī)110內(nèi)部件之間傳送信息的基本例程,諸如在起動(dòng)期間,它一般被存儲(chǔ)在ROM131中。RAM132一般包含由處理單元120可直接存取和/或目前正在操作的數(shù)據(jù)和/或程序模塊。作為例子,而非限制性地,圖1示出操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。計(jì)算機(jī)110還可包括其它可移動(dòng)的/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。只是作為例子,圖1例示了讀寫不可移動(dòng)的、非易失性磁介質(zhì)的硬盤驅(qū)動(dòng)器141,讀寫可移動(dòng)的、非易失性磁盤152的磁盤驅(qū)動(dòng)器151,和讀寫可移動(dòng)的、非易失性光盤156諸如CDROM或其它光介質(zhì)的光盤驅(qū)動(dòng)器155。能用于示例性操作環(huán)境的其它可移動(dòng)的/不可移動(dòng)的、易失性/非易失性的計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,磁帶盒、閃存卡、數(shù)字通用盤、數(shù)字視頻帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動(dòng)器141一般通過不可移動(dòng)的存儲(chǔ)器接口諸如接口140連接至系統(tǒng)總線121,而磁盤驅(qū)動(dòng)器151和光盤驅(qū)動(dòng)器155一般通過可移動(dòng)的存儲(chǔ)器接口諸如接口150連接至系統(tǒng)總線121。上面所討論的和在圖1中所例示的驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì),為計(jì)算機(jī)110提供計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。在圖1中,例如,硬盤驅(qū)動(dòng)器141被例示為存儲(chǔ)操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147。注意這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137或者相同,或者不同。操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147在這里給出不同的數(shù)字,以說明在最低程度上它們是不同的復(fù)制品。用戶可通過輸入裝置,諸如鍵盤162和通常被稱為鼠標(biāo)、軌跡球或觸摸板的定點(diǎn)裝置161,將命令和信息輸入到計(jì)算機(jī)110中。其它輸入裝置(未示出)可包括話筒、游戲桿、游戲墊、衛(wèi)星天線、掃描儀等等。這些和其它輸入裝置常常通過連接到系統(tǒng)總線的用戶輸入接口160連接至處理單元120,但是也可以通過其它接口和總線結(jié)構(gòu)連接,諸如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器191或其它類型的顯示裝置也通過一個(gè)接口諸如視頻接口190連接至系統(tǒng)總線121。除監(jiān)視器之外,計(jì)算機(jī)還可包括其它外部輸出裝置諸如揚(yáng)聲器197和打印機(jī)196,它們可通過輸出外部接口195連接。在本發(fā)明中的計(jì)算機(jī)110可在一個(gè)使用邏輯連接至一或多個(gè)計(jì)算機(jī)諸如遠(yuǎn)程計(jì)算機(jī)180的網(wǎng)絡(luò)化環(huán)境中運(yùn)行。遠(yuǎn)程計(jì)算機(jī)180可以是另一個(gè)個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等裝置或其它通用網(wǎng)絡(luò)節(jié)點(diǎn),并且一般包括上面相對(duì)于計(jì)算機(jī)110所述的部件的許多或全部,盡管在圖1中只示出存儲(chǔ)器存儲(chǔ)裝置181。圖1中所示的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但還可包括其它網(wǎng)絡(luò)。這樣的網(wǎng)絡(luò)環(huán)境在辦公室、企業(yè)級(jí)計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)中是很普通的。當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)110通過網(wǎng)絡(luò)接口或適配器170連接至LAN171。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)110一般包括調(diào)制解調(diào)器172或用于建立在WAN173諸如因特網(wǎng)上的通信的其它工具。調(diào)制解調(diào)器172,可以是內(nèi)置的或外置的,可通過用戶輸入接口160或其它適當(dāng)?shù)臋C(jī)制連接至系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算機(jī)110所述的程序模塊,或其一部分,可存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器裝置中。作為例子,而非限制性地,圖1例示了駐留在存儲(chǔ)器裝置181上的遠(yuǎn)程應(yīng)用程序185。將意識(shí)到所示的網(wǎng)絡(luò)連接是示例性的,并且可使用用于在計(jì)算機(jī)之間建立通信鏈路的其它裝置?,F(xiàn)在將參考圖1B描述在其中可使用本發(fā)明的網(wǎng)絡(luò)化環(huán)境的例子。這個(gè)示例網(wǎng)絡(luò)包括幾個(gè)彼此通過由云表示的網(wǎng)絡(luò)111通信的計(jì)算機(jī)110。網(wǎng)絡(luò)111可包括許多眾所周知的組件,諸如路由器、網(wǎng)關(guān)、集線器等,并允許計(jì)算機(jī)110通過有線的和/或無線的介質(zhì)通信。當(dāng)通過網(wǎng)絡(luò)111彼此交互時(shí),一個(gè)或多個(gè)計(jì)算機(jī)可用作相對(duì)其它計(jì)算機(jī)的客戶機(jī)、服務(wù)器或?qū)Φ仍O(shè)備。因此,可在客戶機(jī)、服務(wù)器、對(duì)等設(shè)備或它們的組合上實(shí)施本發(fā)明的各種實(shí)施例,即使在此包括的特定例子不涉及所有這些類型的計(jì)算機(jī)。在隨后的描述中,將參考由一個(gè)或多個(gè)計(jì)算機(jī)執(zhí)行的動(dòng)作和操作的符號(hào)表示法來描述本發(fā)明,除非另有說明。因此,將理解,這樣的動(dòng)作和操作,有時(shí)稱為計(jì)算機(jī)執(zhí)行的(computer-executed),包括通過計(jì)算機(jī)的處理單元對(duì)以結(jié)構(gòu)化形式表示的數(shù)據(jù)進(jìn)行的處理。該處理變換數(shù)據(jù)或者將它保存在計(jì)算機(jī)的存儲(chǔ)器系統(tǒng)的單元中,以那些本領(lǐng)域熟練技術(shù)人員所熟知的方式重新配置或改變計(jì)算機(jī)的操作。保存數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是具有由數(shù)據(jù)的格式所定義的特定屬性的存儲(chǔ)器的物理單元。然而,盡管在上述背景中描述本發(fā)明,但并不意味著限制,如那些本領(lǐng)域熟練技術(shù)人員將意識(shí)到的,在下文中描述的各種動(dòng)作和操作也可在硬件中實(shí)現(xiàn)。按照本發(fā)明,故障通知(FN)功能程序保證網(wǎng)絡(luò)111中的計(jì)算機(jī)110的分布式組的任何成員可以將故障通知傳送給該組中每一個(gè)其它有效的成員。在網(wǎng)絡(luò)111中,在計(jì)算機(jī)110上執(zhí)行的應(yīng)用、服務(wù)、操作系統(tǒng)或任何其它軟件中實(shí)現(xiàn)FN功能程序。FN功能程序?yàn)樵诰W(wǎng)絡(luò)111中的計(jì)算機(jī)110上運(yùn)行其它應(yīng)用提供應(yīng)用程序接口(API)。在此使用的術(shù)語“應(yīng)用(application)”指使用本發(fā)明的FN功能程序的軟件,并包括但不限于分布式系統(tǒng)、分布式應(yīng)用和中間件。計(jì)算機(jī)110稱為網(wǎng)絡(luò)111中的“節(jié)點(diǎn)(node)”?!肮收贤ㄖ?FN)組(failurenotificationgroup)”指一組合作的節(jié)點(diǎn),它們提供FN功能程序并用作一個(gè)分布式系統(tǒng),其中FN組的所有成員可靠地獲悉系統(tǒng)中的故障。圖2描繪了本發(fā)明的層次抽象,例示FN功能程序200用作應(yīng)用201與節(jié)點(diǎn)202之間的媒介物(intermediary),應(yīng)用201與節(jié)點(diǎn)202通過通信鏈路彼此相連接。在一組節(jié)點(diǎn)上運(yùn)行的分布式應(yīng)用使用FN功能程序創(chuàng)建FN組,因而確保所有運(yùn)行分布式應(yīng)用的節(jié)點(diǎn)將獲悉系統(tǒng)故障??赏ㄟ^本發(fā)明實(shí)施例的示例性應(yīng)用概念性地理解本發(fā)明保證故障通知的收到??紤]一個(gè)FN組,其中每一組成員周期性地用“你好嗎?(areyouokay?)”消息來查驗(yàn)(ping)每一其它組成員。一個(gè)因任何理由而有問題的組成員,即或者因?yàn)楣?jié)點(diǎn)故障、網(wǎng)絡(luò)斷開、網(wǎng)絡(luò)分區(qū)(networkpartition)或瞬時(shí)過載,將不能應(yīng)答某個(gè)查驗(yàn)。這個(gè)不能應(yīng)答在此一般稱為通信故障。啟動(dòng)這個(gè)未達(dá)到的查驗(yàn)的組成員因而檢測(cè)到這個(gè)通信故障,將確保通過停止對(duì)于那個(gè)FN組的所有查驗(yàn)應(yīng)答其本身或者可選地還通過傳遞一個(gè)故障通知消息給其余可到達(dá)的FN組成員來將故障通知傳播給該組的其它組成員。因此,本發(fā)明確保將獨(dú)立觀測(cè)到的通信故障的個(gè)別觀測(cè)轉(zhuǎn)換成組通知。這個(gè)方案將任何模式的斷開、分區(qū)或故障轉(zhuǎn)成一個(gè)保證每一非-崩潰的參與者接收的故障通知。繼續(xù)考慮本發(fā)明的這個(gè)示例性應(yīng)用,描述本發(fā)明的另一個(gè)實(shí)施例,其中在通知故障時(shí)發(fā)送顯式的故障通知消息。顯式故障通知消息的效果是保證要由每一非-崩潰的參與者在兩個(gè)周期性查驗(yàn)時(shí)間間隔內(nèi)經(jīng)歷過,不管某個(gè)參與者是否還能夠與該組的其它成員通信--這是因?yàn)楸景l(fā)明通過在實(shí)際發(fā)送顯式通知消息之外,讓節(jié)點(diǎn)發(fā)送顯式通知消息,停止響應(yīng)于確認(rèn)該組的繼續(xù)存在的查驗(yàn),來實(shí)現(xiàn)顯式通知。在本文的其余部分,將不再進(jìn)一步說明,術(shù)語“通知組(thegroupisnotified)”將被理解為指明確地將故障通知發(fā)送給所有組成員,可選地包括嘗試顯式傳遞故障通知消息。按照本發(fā)明的第一實(shí)施例,提供一種用于在分布式系統(tǒng)中保證的故障通知的方法。在這種方法中,創(chuàng)建一個(gè)包括網(wǎng)絡(luò)中多個(gè)節(jié)點(diǎn)的FN組。故障通知組與在故障通知組的某些或全部節(jié)點(diǎn)上運(yùn)行的分布式應(yīng)用的故障處理方法相關(guān)聯(lián)。在故障通知組中節(jié)點(diǎn)之間的通信故障(如前所述,可反映通信鏈路的故障、節(jié)點(diǎn)的故障或某種其它原因)是由故障通知組中的節(jié)點(diǎn)檢測(cè)的。在檢測(cè)到故障時(shí)用信號(hào)發(fā)送故障通知。當(dāng)故障通知組的節(jié)點(diǎn)收到故障通知時(shí),如果故障處理方法存在,則執(zhí)行在那個(gè)節(jié)點(diǎn)上與故障通知組相關(guān)聯(lián)的故障處理方法。FN組創(chuàng)建是通過在一個(gè)創(chuàng)建者節(jié)點(diǎn)(creatornode)上運(yùn)行的應(yīng)用調(diào)用與要包括在FN組中的節(jié)點(diǎn)集合接口的CreateGroup來啟動(dòng)的。這個(gè)調(diào)用為FN組產(chǎn)生全局唯一故障通知標(biāo)識(shí)符(FNID)。以某種順序(有可能同時(shí))與這個(gè)集合中的每一節(jié)點(diǎn)接觸以驗(yàn)證節(jié)點(diǎn)的存在。如果成功地與這個(gè)集合中的所有節(jié)點(diǎn)接觸-即如果在創(chuàng)建者節(jié)點(diǎn)與其它FN組成員之間存在有效的通信鏈路--則在所有成員上成功地建立FN組,并向創(chuàng)建者應(yīng)用返回“成功(success)”。創(chuàng)建FN組的應(yīng)用通過在創(chuàng)建節(jié)點(diǎn)上安裝故障處理程序,將應(yīng)用狀態(tài)與那個(gè)組相關(guān)聯(lián)。此外,創(chuàng)建節(jié)點(diǎn)上的應(yīng)用,在一個(gè)邀請(qǐng)消息中以應(yīng)用-專用方式連同F(xiàn)N組的FNID顯式發(fā)送應(yīng)用狀態(tài)給某些或全部FN組成員。收到邀請(qǐng)消息的每一FN組成員隨后為那個(gè)FN組建立一個(gè)與包含在邀請(qǐng)消息中的應(yīng)用狀態(tài)和FNID相關(guān)聯(lián)的故障處理程序。故障處理程序?qū)S糜谠谑盏窖?qǐng)消息和相關(guān)應(yīng)用狀態(tài)的節(jié)點(diǎn)上運(yùn)行的應(yīng)用。例如,故障處理程序可以執(zhí)行與FN組相關(guān)聯(lián)的應(yīng)用狀態(tài)的垃圾收集,或者故障處理程序可以嘗試使用新的FN組重新建立應(yīng)用狀態(tài),或者故障處理程序可以簡(jiǎn)單地執(zhí)行任意代碼。如果收到那個(gè)FN組的故障通知,任何與FN組相關(guān)聯(lián)的被安裝的應(yīng)用狀態(tài)被垃圾收集或者由應(yīng)用更新。如果應(yīng)用嘗試將處理程序與不存在的FN組相關(guān)聯(lián),則立即激活故障處理程序。該行為是確保故障通知一定能到達(dá)一個(gè)曾經(jīng)在第一位置知道FN組的FN組成員的一部分。創(chuàng)建一個(gè)FN組的嘗試總是導(dǎo)致兩種可能結(jié)果之一(1)FN組創(chuàng)建成功且將FN組ID通知?jiǎng)?chuàng)建者應(yīng)用;(2)FN組創(chuàng)建失敗,且將失敗通知?jiǎng)?chuàng)建應(yīng)用。在成功創(chuàng)建FN組之后,創(chuàng)建應(yīng)用接著將組ID和任何與組相關(guān)聯(lián)的應(yīng)用狀態(tài)傳送給組成員,允許它們建立在故障通知時(shí)對(duì)那個(gè)狀態(tài)動(dòng)作的故障處理程序。圖3a例示在一個(gè)應(yīng)用使用FN功能程序創(chuàng)建FN組時(shí)由FN功能程序執(zhí)行的方法。在步驟300,F(xiàn)N功能程序接收FN組的節(jié)點(diǎn)集合。在步驟310,F(xiàn)N功能程序與組中的每一節(jié)點(diǎn)接觸,判定它是否可以成功地與可能的FN組節(jié)點(diǎn)通信。在步驟320,如果FN功能程序判定它可以成功地與可能的FN組節(jié)點(diǎn)通信,則該方法進(jìn)行至步驟330;否則,該方法進(jìn)行至步驟340,F(xiàn)N功能程序通知FN組創(chuàng)建失敗。在步驟330,F(xiàn)N功能程序產(chǎn)生一個(gè)FNID并將這個(gè)FNID返回給應(yīng)用,表示成功地創(chuàng)建了FN組。圖3b例示在從FN功能程序收到FNID之后由應(yīng)用執(zhí)行的方法。在步驟350,應(yīng)用從FN功能程序接收FNID。在步驟360,應(yīng)用將一個(gè)消息發(fā)送給FN組節(jié)點(diǎn)上的一個(gè)應(yīng)用,表示FN組的FNID和與FNID相關(guān)聯(lián)的應(yīng)用狀態(tài)。在FN組上的應(yīng)用接收包括FNID和應(yīng)用狀態(tài)的消息,隨后使用在那個(gè)節(jié)點(diǎn)上的FN功能程序,用FNID注冊(cè)一個(gè)應(yīng)用故障處理方法。這個(gè)注冊(cè)是通過調(diào)用FN功能程序的RegisterFailureHandler函數(shù)來完成的,在下面說明。在創(chuàng)建者節(jié)點(diǎn)上的應(yīng)用也以相同的方法注冊(cè)故障處理方法。這個(gè)方法的優(yōu)點(diǎn)是在FN組節(jié)點(diǎn)上的應(yīng)用從不獲悉不能建立的組,意味著將存在較少的建立應(yīng)用狀態(tài)和相關(guān)聯(lián)的故障處理程序的情況,只具有被調(diào)用的故障處理程序并隨后必須在之后不久進(jìn)行垃圾收集。第二個(gè)優(yōu)點(diǎn)是,在何時(shí)、如果和如何它們將有關(guān)FN組及與之相關(guān)聯(lián)的任何狀態(tài)傳送給組成員的方面,應(yīng)用具有更多的靈活性。在參與FN組的每一節(jié)點(diǎn)上的應(yīng)用,使用RegisterFailureHandler,為在該FN組中的故障通知注冊(cè)故障處理程序。這個(gè)函數(shù)將一個(gè)故障處理方法和一個(gè)FNID作為它的參數(shù),并將FNID與故障處理方法注冊(cè)在一起。無論何時(shí)FN組有FNID被通知,即或者因?yàn)闄z測(cè)到的故障,或者因?yàn)橐粋€(gè)應(yīng)用顯式地用信號(hào)發(fā)送關(guān)于FN組成員之一的故障事件,激活故障處理方法。如果用一個(gè)已經(jīng)用信號(hào)通知其為故障或者不存在的FNID參數(shù)來調(diào)用RegisterFailureHandler,則立即激活故障處理方法。當(dāng)由一個(gè)應(yīng)用調(diào)用RegisterFailureHandler時(shí),F(xiàn)N功能程序?qū)⒐收咸幚矸椒ㄅcFNID相關(guān)聯(lián)。因此,當(dāng)收到表示FNID的故障通知時(shí),F(xiàn)N功能程序?qū)NID識(shí)別為與應(yīng)用故障處理方法相關(guān)聯(lián),并執(zhí)行那些故障處理方法。在創(chuàng)建FN組之后,甚至在FN組成員中還沒有故障的時(shí)候,在一個(gè)FN組節(jié)點(diǎn)上的應(yīng)用可以通過調(diào)用SignalFailure函數(shù)來顯式地用信號(hào)發(fā)送故障通知。SignalFailure函數(shù)將在其中要用信號(hào)發(fā)送故障通知的FN組的FNID作為它的參數(shù)。有許多理由使一個(gè)應(yīng)用可能調(diào)用這個(gè)函數(shù);這樣一個(gè)情景的例子是應(yīng)用何時(shí)判定通信鏈路對(duì)于其應(yīng)用-專用目的是不足的(并且有可能即使FN功能程序正在設(shè)法通過鏈路通信)。在前面描述的本發(fā)明實(shí)施例中,當(dāng)調(diào)用SignalFailure時(shí),F(xiàn)N功能程序通過停止響應(yīng)用于FN組的查驗(yàn)消息來將故障通知FN組成員。然而,F(xiàn)N功能程序仍將響應(yīng)與該FN組無關(guān)的消息,例如用于另外的FN組的查驗(yàn)消息。另外的實(shí)現(xiàn)還可發(fā)送顯式故障通知消息給可到達(dá)的FN組成員。圖4a示出本發(fā)明的這個(gè)實(shí)施例的API,包括CreateGroup、RegisterFailureHandler和SignalFailure函數(shù)。圖4b示出本發(fā)明的另一個(gè)實(shí)施例的API,將在下面描述。在FN組中每一節(jié)點(diǎn)必須與FN組中的一個(gè)或幾個(gè)其它節(jié)點(diǎn)保持連通性,以便有規(guī)則地驗(yàn)證FN組的繼續(xù)存在。用于保持這種連通性所使用的方法取決于用戶對(duì)可伸縮性、可靠性和安全的要求。在FN組中保持連通性的一種方法是創(chuàng)建者節(jié)點(diǎn)通知所有組成員在FN組中的其它成員。然后,在FN組中每一節(jié)點(diǎn)周期性地查驗(yàn)FN組中的每一其它節(jié)點(diǎn)(這個(gè)查驗(yàn)可作為用戶數(shù)據(jù)報(bào)協(xié)議(UDP)的查驗(yàn)(ping)、打開TCP套接字或者任何數(shù)量知名的活性(liveness)檢查方法之一來實(shí)現(xiàn))。如果檢測(cè)到通信故障--例如被查驗(yàn)的節(jié)點(diǎn)未能應(yīng)答--用信號(hào)發(fā)送故障通知給FN組的其余節(jié)點(diǎn)。因?yàn)橹芷谛圆轵?yàn)要求0(n2)的消息復(fù)雜度,該方法甚至不能增加到中等尺度的FN組。而且,合計(jì)的網(wǎng)絡(luò)查驗(yàn)通信量很可能附加在存在于系統(tǒng)中的FN組的數(shù)量中。然而,它具有不要求任何基礎(chǔ)設(shè)施支持的優(yōu)點(diǎn)。有時(shí)將沒必要產(chǎn)生FN組通知,并將這樣的通知稱為假陽性(falsepositive)。例如,假陽性的一個(gè)原因是瞬時(shí)鏈路故障。本發(fā)明試圖最小化假陽性的數(shù)量。通過這樣一個(gè)事實(shí),即活性和連通性監(jiān)視不涉及任何可能自己提供附加故障的第三方“媒介物”節(jié)點(diǎn),來幫助這個(gè)方法的假陽性率。然而,因?yàn)楸O(jiān)視所有0(n2)的可能通信路徑,且大多數(shù)應(yīng)用實(shí)際上只使用這些路徑的一個(gè)小子集,與只監(jiān)視實(shí)際使用的通信路徑相比,有可能觀測(cè)到多得多的瞬時(shí)通信故障。由這種方法提供的通知等待時(shí)間低,其中在最壞情況下等待時(shí)間是兩個(gè)超時(shí)時(shí)間時(shí)段,而在平均情況下等待時(shí)間小于一個(gè)超時(shí)時(shí)段。更重要地,這個(gè)方法對(duì)安全攻擊的敏感度非常低。系統(tǒng)中無惡意的節(jié)點(diǎn)可以防止FN組的成員接收由除有惡意節(jié)點(diǎn)本身之外的節(jié)點(diǎn)引起的故障通知。有惡意節(jié)點(diǎn)也只能安裝針對(duì)它們所屬的FN組的拒絕服務(wù)(denialofservice)(DoS)攻擊,至少如果FN組成員具有某些驗(yàn)證故障通知的發(fā)送者的裝置。因此,提供一種用于在分布式系統(tǒng)中保證故障通知的方法。通過確保故障通知從不失敗,本發(fā)明極大地簡(jiǎn)化了在具有它們想要以協(xié)調(diào)方式處理的狀態(tài)的節(jié)點(diǎn)之間的故障處理。本發(fā)明有效并可靠地通知FN組的所有成員關(guān)于影響該組的任何故障狀態(tài)。使用本發(fā)明的應(yīng)用不必?fù)?dān)心故障消息沒有通過或者在系統(tǒng)中保持孤立狀態(tài)。在本發(fā)明的另一個(gè)實(shí)施例中,提供一種可替換的方法,用于創(chuàng)建故障通知組。象前面的實(shí)施例,F(xiàn)N組創(chuàng)建是通過一個(gè)應(yīng)用在創(chuàng)建者節(jié)點(diǎn)上調(diào)用與包括在FN組中的節(jié)點(diǎn)集合接口的CreateGroup來啟動(dòng)的。不象前面的實(shí)施例,該函數(shù)將除節(jié)點(diǎn)集合參數(shù)之外的應(yīng)用狀態(tài)作為一個(gè)參數(shù)。修改后的API在圖4b中描繪。本發(fā)明的這個(gè)實(shí)施例為FN組產(chǎn)生一個(gè)全局唯一故障通知標(biāo)識(shí)符(FNID)。以某種順序(有可能同時(shí))與在這個(gè)集合中的每一節(jié)點(diǎn)接觸并請(qǐng)它加入正在建立的FN組。包括在這個(gè)邀請(qǐng)消息中的是正在建立的FN組的FNID,以及與FN組相關(guān)聯(lián)的應(yīng)用狀態(tài)。如果在FN組中受邀請(qǐng)的全部節(jié)點(diǎn)成功地參加FN組,則將成功返回給創(chuàng)建者應(yīng)用。如前面的實(shí)施例,在FN組中每一節(jié)點(diǎn)上的應(yīng)用為與FNID相關(guān)聯(lián)的應(yīng)用-狀態(tài)建立故障處理程序。如果任何FN組成員是不可到達(dá)的,則FN組建立失敗,將“失敗”返回給創(chuàng)建者節(jié)點(diǎn)上的應(yīng)用,并通知所有已收到邀請(qǐng)消息的節(jié)點(diǎn)。獲悉FN組但接著變成不可到達(dá)的組成員同樣地通過它們的不能與其它FN組成員通信來檢測(cè)故障。這個(gè)檢測(cè)到的故障引起應(yīng)用專用故障處理(例如,垃圾收集)發(fā)生,用于與失敗的組相關(guān)聯(lián)的所有應(yīng)用狀態(tài)。圖5例示當(dāng)應(yīng)用使用FN功能程序創(chuàng)建FN組時(shí)由FN功能程序執(zhí)行的方法。在步驟500,F(xiàn)N功能程序接收FN組的節(jié)點(diǎn)集合和與FN組相關(guān)聯(lián)的應(yīng)用狀態(tài)。在步驟520,F(xiàn)N功能程序發(fā)送包含F(xiàn)NID和應(yīng)用狀態(tài)的邀請(qǐng)消息給節(jié)點(diǎn)集合中的每一節(jié)點(diǎn)。在步驟530,如果所有節(jié)點(diǎn)成功接收邀請(qǐng)消息,則該方法進(jìn)行至步驟540,其中FN功能程序通知應(yīng)用成功創(chuàng)建FN組,并返回FNID。如果不是所有節(jié)點(diǎn)成功接收邀請(qǐng)消息,則該方法進(jìn)行至步驟550,其中FN功能程序發(fā)出故障通知消息給已經(jīng)通過接受邀請(qǐng)消息而參加FN組的FN組節(jié)點(diǎn)。在步驟560,F(xiàn)N功能程序通知應(yīng)用沒有成功創(chuàng)建FN組。應(yīng)用注冊(cè)故障處理程序,如前面的實(shí)施例。因而,創(chuàng)建FN組的嘗試總是導(dǎo)致兩種可能結(jié)果之一(1)FN組創(chuàng)建成功,且FN組成員收到要與組相關(guān)聯(lián)的應(yīng)用狀態(tài),且FN組成員建立在故障通知時(shí)用于組的故障處理程序(例如,垃圾收集那個(gè)狀態(tài));或者(2)FN組創(chuàng)建失敗,且任何被通知要與FN組相關(guān)聯(lián)的應(yīng)用狀態(tài)的FN組成員讓它們的故障處理程序被調(diào)用(可能使它們垃圾收集那個(gè)狀態(tài))。因此,在創(chuàng)建期間(或之后)FN組失敗導(dǎo)致與所有狀態(tài)與正在要求收回的FN組相關(guān)聯(lián)。在本發(fā)明的另一個(gè)實(shí)施例中,提供另一種保持連通性的方法。在FN組的節(jié)點(diǎn)之間構(gòu)造生成樹以監(jiān)視連通性和活性(liveness)。要構(gòu)造生成樹,將FN組中每一節(jié)點(diǎn)看作是圖中的頂點(diǎn),在節(jié)點(diǎn)之間作出連接,以便在圖中沒有回路的情況下連接圖中的每一節(jié)點(diǎn)。這些連接實(shí)現(xiàn)類似生成樹的路由拓?fù)?。?dāng)?shù)谝粋€(gè)節(jié)點(diǎn)記錄至作為子節(jié)點(diǎn)的第二個(gè)節(jié)點(diǎn)的指針而第二個(gè)節(jié)點(diǎn)同樣記錄至作為父節(jié)點(diǎn)的第一個(gè)節(jié)點(diǎn)的指針的時(shí)候,形成節(jié)點(diǎn)之間的連接。例如,圖6示出一棵示例生成樹,其中創(chuàng)建者節(jié)點(diǎn),即節(jié)點(diǎn)1是樹的根節(jié)點(diǎn),而節(jié)點(diǎn)1記錄了至節(jié)點(diǎn)2和3的指針,節(jié)點(diǎn)2和3是節(jié)點(diǎn)1的子節(jié)點(diǎn)。節(jié)點(diǎn)2和3都記錄了至作為它們父節(jié)點(diǎn)的節(jié)點(diǎn)1的指針。節(jié)點(diǎn)2還記錄了至其子節(jié)點(diǎn)4的指針。節(jié)點(diǎn)4記錄了至作為其父節(jié)點(diǎn)的節(jié)點(diǎn)2的指針,并記錄了作為它的子節(jié)點(diǎn)的節(jié)點(diǎn)5和6。節(jié)點(diǎn)3、5和6沒有要指向的子節(jié)點(diǎn),因此它們是生成樹的葉子。在這種用于保持連通性的方法中,樹中每一節(jié)點(diǎn)只查驗(yàn)其毗鄰的節(jié)點(diǎn)。如果節(jié)點(diǎn)是父-子關(guān)系的一部分則節(jié)點(diǎn)在樹中是毗鄰的。例如,在圖6中,節(jié)點(diǎn)4毗鄰于節(jié)點(diǎn)2、5和6,而節(jié)點(diǎn)3只毗鄰于節(jié)點(diǎn)1。因?yàn)槊恳还?jié)點(diǎn)只查驗(yàn)其父與子節(jié)點(diǎn),所以減少了查驗(yàn)的通信量。當(dāng)檢測(cè)到故障時(shí),檢測(cè)節(jié)點(diǎn)停止響應(yīng)用于FN組的查驗(yàn)。另外,也可使用生成樹通過發(fā)送故障通知至其父與子節(jié)點(diǎn)來傳播故障通知消息。收到故障通知的節(jié)點(diǎn)將故障通知轉(zhuǎn)發(fā)給它的父與子節(jié)點(diǎn)。因此,生成樹中每一節(jié)點(diǎn)一即FN組中每一節(jié)點(diǎn)一最終通過或者因未到得到的查驗(yàn)來檢測(cè)到通信故障或者接收顯式故障通知消息來獲悉故障。這種方法支持大尺寸的組,但如果系統(tǒng)包含大量FN組時(shí),仍產(chǎn)生相當(dāng)大量的探測(cè)通信量。這種方法的假陽性率一般來說應(yīng)該相似于并可能略微小于直接查驗(yàn)方法,在后者中查驗(yàn)通信只在FN組的成員節(jié)點(diǎn)之間發(fā)生,但不監(jiān)視FN組內(nèi)所有可能的通信路徑。在平均情況下等待時(shí)間一般來說應(yīng)該也相似,假定通過生成樹可以快速地完成廣播通知消息。在最壞情況下等待時(shí)間將取決于所使用的樹構(gòu)造算法的細(xì)節(jié)。本領(lǐng)域中一種眾所周知的示例性生成樹算法是由D.Karger、P.Klein和R.Tarjan在“ARandomizedLinear-TimeAlgotithmtoFindMinimumSpanningTrees(查找最小生成樹的隨機(jī)化線性時(shí)間算法)”中描述,發(fā)表于1995年42(2)期的JournaloftheAssociationforComputingMachinery(計(jì)算機(jī)器協(xié)會(huì)雜志),通過引用將它全部包含在此。該論文的方法將每一路徑的成本作為輸入;在本領(lǐng)域中眾所周知的一種用于分配路徑成本的方法是使用來回程路徑等待時(shí)間作為成本,其中等待時(shí)間是通過取三次獨(dú)立試驗(yàn)的中值來估計(jì)的。這種方法對(duì)安全攻擊的敏感度是對(duì)于有惡意的組成員節(jié)點(diǎn);不屬于該組的節(jié)點(diǎn)不能阻止故障通知消息被傳遞給組成員,它們也不能注入偽造的故障通知消息以安裝DoS攻擊。然而,有惡意的組成員可以阻止其它組成員聽取合法的故障通知,也能夠安裝DoS攻擊。盡管這種方法的生成樹方法在伸縮性方面比直接查驗(yàn)方法要好,但它在系統(tǒng)包含許多組時(shí)仍導(dǎo)致冗余探測(cè)通信。按照本發(fā)明的另一個(gè)實(shí)施例,還提供另一種保持連通性的方法。這個(gè)方法使用現(xiàn)有的覆蓋網(wǎng)絡(luò)來監(jiān)視活性和連通性。覆蓋網(wǎng)絡(luò)是在下層的路由拓?fù)?即IP路由)的頂上存在與運(yùn)行的覆蓋節(jié)點(diǎn)之間的應(yīng)用-層路由拓?fù)?。一個(gè)合適的覆蓋網(wǎng)絡(luò)實(shí)現(xiàn)是SkipNet,在一般指派的美國(guó)專用申請(qǐng)序列號(hào)10/356,961中描述,通過引用將它全部包括在此。盡管可使用任何覆蓋網(wǎng)絡(luò),但在覆蓋網(wǎng)絡(luò)將積極地執(zhí)行在覆蓋網(wǎng)絡(luò)中節(jié)點(diǎn)之間的查驗(yàn)以保持網(wǎng)絡(luò)中的活性和連通性時(shí),保持連通性的這種方法是最有利的。本發(fā)明的這個(gè)實(shí)施例通過用由覆蓋網(wǎng)絡(luò)提供的連通性代替由下層的路由拓?fù)涮峁┑腇N組成員之間的直接連通性,以杠桿調(diào)節(jié)可伸縮的覆蓋路由拓?fù)湟员O(jiān)視在FN組中的連通性。在圖7中描繪示例覆蓋網(wǎng)絡(luò)拓?fù)?。覆蓋網(wǎng)絡(luò)提供在覆蓋網(wǎng)絡(luò)中節(jié)點(diǎn)1-12之間的應(yīng)用-層路由。在覆蓋網(wǎng)絡(luò)中每一節(jié)點(diǎn)保持一個(gè)節(jié)點(diǎn)的路由表,通過路由表建立通信鏈路。例如,在圖5中節(jié)點(diǎn)2在其路由表中保持至節(jié)點(diǎn)1和3的指針,而節(jié)點(diǎn)3在其路由表中保持至節(jié)點(diǎn)2、4和7的指針。因而,如果節(jié)點(diǎn)4發(fā)送一個(gè)消息給節(jié)點(diǎn)1,則該消息必須穿越節(jié)點(diǎn)4和1之間覆蓋路由路徑中的節(jié)點(diǎn)3和2。為了保持網(wǎng)絡(luò)中的活性和連通性,每一節(jié)點(diǎn)周期性地查驗(yàn)其路由表中的節(jié)點(diǎn)。如果一個(gè)節(jié)點(diǎn)未能應(yīng)答查驗(yàn),則查驗(yàn)的發(fā)送者更新其路由表以刪除不-應(yīng)答的節(jié)點(diǎn)。如果一個(gè)節(jié)點(diǎn)從不在其路由表中的節(jié)點(diǎn)收到查驗(yàn),則它可用至新節(jié)點(diǎn)的指針更新其路由表。要在現(xiàn)有覆蓋網(wǎng)絡(luò)的頂上實(shí)現(xiàn)FN功能程序,覆蓋網(wǎng)絡(luò)必須提供1)通過覆蓋網(wǎng)絡(luò)路由的消息導(dǎo)致在每一中間節(jié)點(diǎn)上的應(yīng)用-層上調(diào)用(upcall)(從覆蓋網(wǎng)絡(luò)來看,將FN功能程序視為一個(gè)應(yīng)用);和2)一個(gè)節(jié)點(diǎn)的路由表中的變化導(dǎo)致詳述該變化的應(yīng)用-層上調(diào)用,該變化可能或者是覆蓋通信故障,或者是因覆蓋網(wǎng)絡(luò)中新鄰居節(jié)點(diǎn)的出現(xiàn)所導(dǎo)致的變化。也就是說,每一覆蓋節(jié)點(diǎn)必須將經(jīng)過該節(jié)點(diǎn)的所有消息和所有路由表變化通知FN功能程序。在用于監(jiān)視FN組中連通性的這種方法中,構(gòu)造多播樹(multicasttree)用于傳播故障通知。多播樹實(shí)際上是如前所述的FN組節(jié)點(diǎn)的生成樹,但還包括在FN組的創(chuàng)建者節(jié)點(diǎn)與FN組的所有其它節(jié)點(diǎn)之間的覆蓋路由路徑中的每一節(jié)點(diǎn)。可構(gòu)造的一種類型的多播樹是Scribe樹(見M.Castro和P.Druschel和A.Kermarrec和A.Rowstron的“ScribeALarge-ScaleandDecentralizedApplication-LevelMulticastInfrastructure(Scribe大尺度和分散化應(yīng)用-層多播基礎(chǔ)設(shè)施)”,IEEEJournalonSelectedAreasinCommunications(IEEE通信中選擇的區(qū)域的雜志)(JSAC)(SpecialissueonNetworkSupportforMulticastCommunications(關(guān)于多播通信的網(wǎng)絡(luò)支持的特別期刊)),2002年十月20(8)期,通過引用將它全部包括在此)。本發(fā)明假設(shè)FN功能程序在要參加多播樹的每一節(jié)點(diǎn)上運(yùn)行。當(dāng)由創(chuàng)建者節(jié)點(diǎn)創(chuàng)建FN組時(shí)構(gòu)造多播樹。當(dāng)應(yīng)用給每一FN組節(jié)點(diǎn)發(fā)送包含F(xiàn)NID(有可能和應(yīng)用狀態(tài),如前所述)的建立消息(set-upmessage)時(shí),建立消息設(shè)置一個(gè)存儲(chǔ)FN組ID和在每一節(jié)點(diǎn)使用的路由路徑鄰居的內(nèi)部狀態(tài),所述每一節(jié)點(diǎn)是建立消息在創(chuàng)建者節(jié)點(diǎn)與FN組節(jié)點(diǎn)之間的覆蓋路由路徑中所穿越的。這個(gè)內(nèi)部狀態(tài)表示節(jié)點(diǎn)要傳遞在該節(jié)點(diǎn)收到的所有消息,以及所有路由表變化信息,至在該節(jié)點(diǎn)上運(yùn)行FN功能程序。在建立消息穿越創(chuàng)建者節(jié)點(diǎn)與FN組節(jié)點(diǎn)之間覆蓋路由路徑中的節(jié)點(diǎn)時(shí),在該路徑中每一節(jié)點(diǎn)記錄至從其接收該消息的節(jié)點(diǎn)的FN組指針。在來自FN組節(jié)點(diǎn)的確認(rèn)消息(confirmationmessage)穿越在那個(gè)相同路徑中的覆蓋節(jié)點(diǎn)時(shí),使用記錄了的指針,每一節(jié)點(diǎn)再次記錄至從其接收確認(rèn)消息的節(jié)點(diǎn)的FN組指針。因此,在創(chuàng)建者節(jié)點(diǎn)和明確地與FN組相關(guān)聯(lián)的FN組節(jié)點(diǎn)之間的覆蓋路由路徑中創(chuàng)建雙向通信鏈路。在本發(fā)明的另一個(gè)實(shí)施例中,只要求一個(gè)建立消息以創(chuàng)建多播樹。在建立消息穿越創(chuàng)建者節(jié)點(diǎn)與FN組節(jié)點(diǎn)之間覆蓋路由路徑中的節(jié)點(diǎn)時(shí),該路徑中每一節(jié)點(diǎn)記錄至從其接收該消息的節(jié)點(diǎn)的FN組指針。在這個(gè)實(shí)施例中,該路徑中每一節(jié)點(diǎn)還記錄至覆蓋路由路徑中將建立消息轉(zhuǎn)發(fā)給的下一節(jié)點(diǎn)的FN組指針。這是在覆蓋網(wǎng)絡(luò)支持“下一跳(NextHop)”調(diào)用時(shí)實(shí)現(xiàn)的,該調(diào)用可以通知在一個(gè)覆蓋節(jié)點(diǎn)上運(yùn)行的FN功能程序,哪一個(gè)覆蓋節(jié)點(diǎn)將是該消息在它被繼續(xù)路由時(shí)將遇到的。因此,在創(chuàng)建者節(jié)點(diǎn)和確定地與FN組相關(guān)聯(lián)的FN組節(jié)點(diǎn)之間的覆蓋路由路徑中創(chuàng)建雙向通信鏈路。在本發(fā)明的另一個(gè)實(shí)施例中,建立消息被拆分成兩個(gè)消息,其中之一直接在組創(chuàng)建者與正在接觸的特定成員之間行進(jìn),而另一個(gè)使用由覆蓋提供的路由路徑。直接消息足以建立組,并使FN功能程序讓應(yīng)用知道在創(chuàng)建者節(jié)點(diǎn)的組。經(jīng)路由的消息還必須在之后不久完成以避免關(guān)于FN組的故障通知。在建立之后,沿覆蓋路徑保持連通性。圖8a例示由在從創(chuàng)建者節(jié)點(diǎn)接收建立消息的覆蓋網(wǎng)絡(luò)中每一節(jié)點(diǎn)上的FN功能程序執(zhí)行的方法。在步驟800,在節(jié)點(diǎn)上的FN功能程序從節(jié)點(diǎn)接收建立消息。在步驟810,F(xiàn)N功能程序在節(jié)點(diǎn)內(nèi)建立內(nèi)部狀態(tài)。在步驟820,F(xiàn)N功能程序記錄至從其接收消息的節(jié)點(diǎn)的指針。在步驟830,F(xiàn)N功能程序?qū)⒔⑾⑥D(zhuǎn)發(fā)給覆蓋路由路徑中的下一個(gè)節(jié)點(diǎn)。圖8b例示由在覆蓋網(wǎng)絡(luò)中從FN組節(jié)點(diǎn)接收確認(rèn)消息的每一節(jié)點(diǎn)上的FN功能程序執(zhí)行的方法。在步驟840,在節(jié)點(diǎn)上的FN功能程序從節(jié)點(diǎn)接收確認(rèn)消息。在步驟850,F(xiàn)N功能程序記錄至從其接收消息的節(jié)點(diǎn)的指針。在步驟860,F(xiàn)N功能程序?qū)⑾⑥D(zhuǎn)發(fā)給它在步驟820中記錄的指針?biāo)恋墓?jié)點(diǎn)??紤]在圖7中的覆蓋網(wǎng)絡(luò),其中節(jié)點(diǎn)1、4、5和8是一個(gè)FN組中的節(jié)點(diǎn)。節(jié)點(diǎn)4,即創(chuàng)建者節(jié)點(diǎn),或者在FN組創(chuàng)建(即,確定每一節(jié)點(diǎn)的可到達(dá)性)期間或者之后,發(fā)送建立消息給節(jié)點(diǎn)1、5和8。該消息由節(jié)點(diǎn)3接收,并在節(jié)點(diǎn)3中設(shè)置內(nèi)部狀態(tài)。在節(jié)點(diǎn)3記錄與FN組相關(guān)聯(lián)的、至節(jié)點(diǎn)4的指針。隨后將該消息轉(zhuǎn)發(fā)給節(jié)點(diǎn)2(在至節(jié)點(diǎn)1的覆蓋路由路徑中的下一個(gè)節(jié)點(diǎn))和節(jié)點(diǎn)7(在至節(jié)點(diǎn)5和8的覆蓋路由路徑中的下一個(gè)節(jié)點(diǎn))。節(jié)點(diǎn)2和7重復(fù)這個(gè)過程,設(shè)置內(nèi)部狀態(tài)并記錄與FN組相關(guān)聯(lián)的、至3的指針。節(jié)點(diǎn)2將該消息轉(zhuǎn)發(fā)給節(jié)點(diǎn)1,而節(jié)點(diǎn)7將該消息轉(zhuǎn)發(fā)給節(jié)點(diǎn)6(在至節(jié)點(diǎn)5的覆蓋路由路徑中的下一個(gè)節(jié)點(diǎn))和節(jié)點(diǎn)8。節(jié)點(diǎn)6重復(fù)這個(gè)過程,設(shè)置內(nèi)部狀態(tài),記錄與FN組相關(guān)聯(lián)的、至節(jié)點(diǎn)7的指針,并將該消息轉(zhuǎn)發(fā)給節(jié)點(diǎn)5。當(dāng)在節(jié)點(diǎn)1、5和8接收該消息時(shí),那些節(jié)點(diǎn)記錄至從其接收該消息的節(jié)點(diǎn)的指針。那些節(jié)點(diǎn)還根據(jù)消息首部確定它們是建立消息所想要的接收者。代替繼續(xù)轉(zhuǎn)發(fā)該消息,節(jié)點(diǎn)1、5和8發(fā)送確認(rèn)消息返回給創(chuàng)建者節(jié)點(diǎn)4。確認(rèn)消息使用由建立消息創(chuàng)建的指針路徑來穿越覆蓋路由路徑返回給創(chuàng)建者節(jié)點(diǎn)。因而,確認(rèn)消息穿越與建立消息相同的覆蓋路由路徑。在接收確認(rèn)消息的覆蓋路由路徑中每一節(jié)點(diǎn)記錄至從其接收該消息的節(jié)點(diǎn)的指針。例如,節(jié)點(diǎn)5轉(zhuǎn)發(fā)確認(rèn)消息給節(jié)點(diǎn)6,后者記錄至節(jié)點(diǎn)5的指針。節(jié)點(diǎn)6轉(zhuǎn)發(fā)該確認(rèn)消息給節(jié)點(diǎn)7,后者記錄至節(jié)點(diǎn)6的指針。節(jié)點(diǎn)7轉(zhuǎn)發(fā)該確認(rèn)消息給節(jié)點(diǎn)3,后者記錄至節(jié)點(diǎn)7的指針。節(jié)點(diǎn)3轉(zhuǎn)發(fā)該確認(rèn)消息給節(jié)點(diǎn)4,后者記錄至節(jié)點(diǎn)3的指針。節(jié)點(diǎn)1和8同樣發(fā)送確認(rèn)消息給節(jié)點(diǎn)4。當(dāng)節(jié)點(diǎn)4從FN組中所有節(jié)點(diǎn)收到確認(rèn)消息時(shí),節(jié)點(diǎn)4,即創(chuàng)建者節(jié)點(diǎn)確定已成功創(chuàng)建FN組。也已成功地創(chuàng)建多播樹,在圖9中例示的拓?fù)?。多播樹包括FN組的每一節(jié)點(diǎn)(節(jié)點(diǎn)1、4、5和8)以及在FN組節(jié)點(diǎn)與創(chuàng)建者節(jié)點(diǎn)即節(jié)點(diǎn)4之間的每一路由路徑中的每一節(jié)點(diǎn)。因而,在下列表達(dá)式中表示多播樹路徑P1,4=節(jié)點(diǎn)1,2,3和4路徑P5,4=節(jié)點(diǎn)5,6,7,3和4路徑P8,4=節(jié)點(diǎn)8,7,3和4其中Pn,c是從一個(gè)FN組節(jié)點(diǎn)n至FN組創(chuàng)建者節(jié)點(diǎn)c的覆蓋節(jié)點(diǎn)的路徑。因而,多播樹T=P1,4P5,4P8,1因此,多播樹T包括覆蓋網(wǎng)絡(luò)的節(jié)點(diǎn)1-8。疊加在覆蓋網(wǎng)絡(luò)上的多播樹T的例子在圖10中由虛線描繪。如果建立消息包括FNID和應(yīng)用狀態(tài),F(xiàn)N組中每一節(jié)點(diǎn)在接收建立消息時(shí),建立與應(yīng)用狀態(tài)和FNID相關(guān)聯(lián)的故障處理方法。如果沒有成功地創(chuàng)建FN組(即,至少FN組的一個(gè)節(jié)點(diǎn)不能到達(dá)),則創(chuàng)建者節(jié)點(diǎn)停止響應(yīng)用于該FN組的查驗(yàn),并發(fā)送故障通知給那些已接收了建立消息的節(jié)點(diǎn)。已接收了建立消息并建立故障處理方法的節(jié)點(diǎn)隨后在接收故障通知時(shí)執(zhí)行故障處理方法(從而垃圾收集應(yīng)用狀態(tài))。如果建立消息不包括FNID和應(yīng)用狀態(tài),則創(chuàng)建者節(jié)點(diǎn)在成功地創(chuàng)建FN組之后發(fā)送FNID和應(yīng)用狀態(tài)到FN組節(jié)點(diǎn)。覆蓋網(wǎng)絡(luò)中每一節(jié)點(diǎn)周期性地查驗(yàn)毗鄰的節(jié)點(diǎn)以監(jiān)視至其路由表中節(jié)點(diǎn)的活性和連通性。因?yàn)槭窃诟采w網(wǎng)絡(luò)的頂上建立多播樹,所以在多播樹中的毗鄰節(jié)點(diǎn)必須是覆蓋網(wǎng)絡(luò)中的毗鄰節(jié)點(diǎn)。當(dāng)在多播樹中的一個(gè)節(jié)點(diǎn)在其路由表中產(chǎn)生變化時(shí),該節(jié)點(diǎn)通知在節(jié)點(diǎn)上運(yùn)行的FN功能程序。如果路由表只是增加了新節(jié)點(diǎn),則忽略該變化。然而,如果一個(gè)節(jié)點(diǎn)查驗(yàn)毗鄰的節(jié)點(diǎn)而被查驗(yàn)的節(jié)點(diǎn)不應(yīng)答,則進(jìn)行查驗(yàn)的節(jié)點(diǎn)改變其路由表以刪除無應(yīng)答的節(jié)點(diǎn)。當(dāng)路由表滿時(shí)還從路由表中刪除節(jié)點(diǎn)并由不同的節(jié)點(diǎn)代替。將此變化通知FN功能程序,并判定覆蓋路由表變化是否影響FN組。例如,如果在圖10中的節(jié)點(diǎn)6檢測(cè)到它與節(jié)點(diǎn)10之間的覆蓋通信故障,則在節(jié)點(diǎn)6上的FN功能程序?qū)⒑雎杂纱艘鸬穆酚杀碜兓?,因?yàn)楣?jié)點(diǎn)10不在與FN組相關(guān)聯(lián)的多播樹中。然而,如果在節(jié)點(diǎn)6的路由表變化表示在至節(jié)點(diǎn)5的覆蓋路徑中的通信故障,則FN功能程序?qū)⑴卸ㄔ摳采w網(wǎng)絡(luò)通信故障也是在FN組中節(jié)點(diǎn)之間的通信故障。圖11例示在接收路由表變化報(bào)告時(shí)由FN功能程序執(zhí)行的方法。在步驟1100,F(xiàn)N功能程序根據(jù)路由表變化報(bào)告判定發(fā)生故障的覆蓋通信相關(guān)的覆蓋節(jié)點(diǎn)是否也是多播樹中的毗鄰節(jié)點(diǎn)。如果否,則在步驟1101FN功能程序忽略該路由表變化;然而,如果故障的覆蓋節(jié)點(diǎn)是多播樹中的毗鄰節(jié)點(diǎn),則在步驟1102FN功能程序發(fā)送故障通知消息到多播樹中所有可到達(dá)的毗鄰節(jié)點(diǎn)。在步驟1103,F(xiàn)N功能程序判定是否為與在其上檢測(cè)到故障的多播樹相關(guān)聯(lián)的FNID建立了故障處理程序。如果是,則在步驟1104FN功能程序調(diào)用為該FNID建立的故障處理方法;如果否,則FN功能程序直接進(jìn)行至步驟1105。在步驟1105,F(xiàn)N功能程序解除故障處理程序與FNID的關(guān)聯(lián)。步驟1102-1105也是由在每一接收故障通知消息的節(jié)點(diǎn)上的FN功能程序執(zhí)行的。為了例示故障通知過程,假定圖10中節(jié)點(diǎn)6已經(jīng)故障并不再響應(yīng)來自毗鄰覆蓋節(jié)點(diǎn)的查驗(yàn)。節(jié)點(diǎn)7在節(jié)點(diǎn)6未能應(yīng)答查驗(yàn)時(shí)檢測(cè)覆蓋網(wǎng)絡(luò)通信故障。節(jié)點(diǎn)7改變其路由表以刪除節(jié)點(diǎn)6,并將該變化通知在節(jié)點(diǎn)7上運(yùn)行的FN功能程序。在節(jié)點(diǎn)7上的FN功能程序確定因?yàn)楣?jié)點(diǎn)6在多播樹中,節(jié)點(diǎn)6與7之間的覆蓋網(wǎng)絡(luò)通信故障隱含著FN組中至少兩個(gè)節(jié)點(diǎn)之間的通信故障。在響應(yīng)中,節(jié)點(diǎn)7發(fā)送故障通知消息至多播樹中仍可到達(dá)的毗鄰節(jié)點(diǎn)節(jié)點(diǎn)3和8。當(dāng)節(jié)點(diǎn)3接收故障通知消息時(shí),將該消息傳遞給在節(jié)點(diǎn)3上運(yùn)行的FN功能程序。故障通知消息表示對(duì)于FNID已檢測(cè)到一個(gè)故障。在節(jié)點(diǎn)3上的FN功能程序隨后將故障通知消息轉(zhuǎn)發(fā)給多播樹或與FNID相關(guān)聯(lián)的樹中的毗鄰節(jié)點(diǎn)。在此情況下,故障通知消息被轉(zhuǎn)發(fā)給節(jié)點(diǎn)2和4。在節(jié)點(diǎn)2上的FN功能程序重復(fù)在節(jié)點(diǎn)3執(zhí)行的過程,并將故障通知消息轉(zhuǎn)發(fā)給其毗鄰的節(jié)點(diǎn),即節(jié)點(diǎn)1。當(dāng)在節(jié)點(diǎn)1、4和8接收故障通知消息時(shí),將該消息傳遞給FN功能程序。FN功能程序識(shí)別出在該消息中的FNID在那個(gè)節(jié)點(diǎn)上有一個(gè)已注冊(cè)的故障處理方法。因此,F(xiàn)N功能程序調(diào)用為那個(gè)FNID建立的故障處理方法。隨后解除故障處理程序與FNID的關(guān)聯(lián),因?yàn)镕N組不再存在。因?yàn)樵诠?jié)點(diǎn)6的故障,節(jié)點(diǎn)5不能接收故障通知消息。然而,當(dāng)節(jié)點(diǎn)5未能從節(jié)點(diǎn)6接收查驗(yàn)應(yīng)答時(shí),節(jié)點(diǎn)5將從其路由表中刪除節(jié)點(diǎn)6并將該變化通知在節(jié)點(diǎn)5上的FN功能程序。FN功能程序?qū)⒋_定,因?yàn)楣?jié)點(diǎn)6是多播樹中毗鄰的節(jié)點(diǎn),所以節(jié)點(diǎn)5與6之間的覆蓋網(wǎng)絡(luò)通信故障隱含著與多播樹相關(guān)聯(lián)的FN組中至少兩個(gè)節(jié)點(diǎn)之間的通信故障。FN功能程序識(shí)別出在其中檢測(cè)出通信故障的FN組的FNID與在節(jié)點(diǎn)5上的故障處理程序相關(guān)聯(lián)。因此,F(xiàn)N功能程序調(diào)用為那個(gè)FNID建立的故障處理方法,并為那個(gè)FNID解除注冊(cè)故障處理程序。因?yàn)樵诙嗖渲袥]有其它節(jié)點(diǎn)是可到達(dá)的,節(jié)點(diǎn)5不轉(zhuǎn)發(fā)故障通知消息??晒┨鎿Q地,在一個(gè)節(jié)點(diǎn)上的應(yīng)用用信號(hào)發(fā)送故障通知消息,即使沒有覆蓋網(wǎng)絡(luò)通信故障報(bào)告。如果應(yīng)用發(fā)送消息到FN組中另一個(gè)節(jié)點(diǎn)并且沒有收到應(yīng)答,則應(yīng)用可使用FN功能程序通過停止響應(yīng)來自其它FN組節(jié)點(diǎn)的FN組消息來用信號(hào)發(fā)送FN組中的故障,使那些節(jié)點(diǎn)檢測(cè)到FN組中的故障。此外,該實(shí)現(xiàn)還可發(fā)送故障通知消息到多播樹中的所有可到達(dá)的節(jié)點(diǎn)。因?yàn)橛蒄N功能程序使用的覆蓋路由鏈路是從兩邊被查驗(yàn)的(如果不是由覆蓋則由FN功能程序),失敗的查詢將導(dǎo)致兩種最終動(dòng)作之一(1)來自鏈路另一邊的相應(yīng)查驗(yàn)也將失敗,導(dǎo)致將覆蓋第一個(gè)通知消息不可到達(dá)的多播的那個(gè)部分的第二個(gè)通知消息;或者(2)來自鏈路另一邊的相應(yīng)查驗(yàn)成功,在這種情況下被查驗(yàn)的多播樹節(jié)點(diǎn)相應(yīng)于表示它已用信號(hào)發(fā)送關(guān)于組的故障通知的查驗(yàn)。這隨后也導(dǎo)致將覆蓋未由第一個(gè)通知消息覆蓋的活性鏈(livenesschain)的那個(gè)部分的第二個(gè)通知消息。在任一情況下,結(jié)果是多播樹的每一非-崩潰節(jié)點(diǎn)將最終收到故障通知消息。即使更多的節(jié)點(diǎn)或鏈路故障發(fā)生,也是如此,因?yàn)樗鼈儗⒅皇菍?dǎo)致另外的故障報(bào)告和相應(yīng)的通知消息。在中間節(jié)點(diǎn)故障或覆蓋路由表變化使得多播樹鏈路與路由表鏈路之間沒有直接通信的任何時(shí)候,剛才描述的方法可以導(dǎo)致假陽性。本發(fā)明通過在FN功能程序內(nèi)實(shí)現(xiàn)自動(dòng)-修復(fù)能力來屏蔽這些假陽性中的許多。當(dāng)一個(gè)FN組節(jié)點(diǎn)檢測(cè)到通信故障時(shí),它試圖為FN組建立新多播樹,而不是立即調(diào)用應(yīng)用的故障處理程序。如果在一個(gè)超時(shí)時(shí)段內(nèi)不能成功地建立新的FN組,則每一組成員節(jié)點(diǎn)傳遞掛起(pending)故障通知給應(yīng)用。本發(fā)明在存在多個(gè)具有覆蓋多播樹的FN組時(shí),可以獲得共享經(jīng)濟(jì)實(shí)惠。每一覆蓋網(wǎng)絡(luò)查驗(yàn)消息正在有效地監(jiān)視所有其多播樹包括相應(yīng)的覆蓋路由鏈路的FN組。而且,可以在兩個(gè)節(jié)點(diǎn)之間發(fā)送單個(gè)故障通知消息,該消息編碼所有應(yīng)該為其經(jīng)過該鏈路發(fā)送通知消息的FN組的FNID。而且,應(yīng)用可以建立多個(gè)同時(shí)存在的FN組。要處理崩潰恢復(fù)和慢時(shí)鐘(slowclock),節(jié)點(diǎn)必須能夠交換和比較它們正在監(jiān)視的FN組集合。由于可能有許多組,只交換FNID的列表代價(jià)很高。取而代之,本發(fā)明使用單向(one-way)散列函數(shù),在一個(gè)節(jié)點(diǎn)正在監(jiān)視的FNID的集合上產(chǎn)生“校驗(yàn)和”。這個(gè)校驗(yàn)和可以在兩個(gè)節(jié)點(diǎn)之間以很低的代價(jià)交換,以便確認(rèn)自從上次這兩個(gè)節(jié)點(diǎn)相互比較它們的FNID列表起沒有發(fā)生變化。結(jié)果,只有在由一個(gè)節(jié)點(diǎn)監(jiān)視的組集合變化時(shí)才交換全部FNID列表。通過在活性查驗(yàn)消息中并有可能在應(yīng)答消息中包括有關(guān)校驗(yàn)和,校驗(yàn)和的交換與每一覆蓋網(wǎng)絡(luò)活性查驗(yàn)一起發(fā)生。這種方法的可伸縮性比所提供的其它方法的好得多它是唯一一種網(wǎng)絡(luò)探測(cè)通信的負(fù)擔(dān)與正在保持的FN組數(shù)量無關(guān)的方法。用自動(dòng)-修復(fù),本發(fā)明產(chǎn)生低假陽性率。執(zhí)行自動(dòng)-修復(fù)的成本將與位于FN組的任意兩個(gè)給定成員之間的覆蓋路由路徑上的覆蓋節(jié)點(diǎn)的平均數(shù)量無關(guān),并與覆蓋成員的攪拌率(churnrate)無關(guān)。中間節(jié)點(diǎn)的數(shù)量將取決于屬于覆蓋和覆蓋展現(xiàn)的任何“局部性(locality)”屬性的節(jié)點(diǎn)數(shù)量。例如,如果使用SkipNet作為覆蓋網(wǎng)絡(luò),則其成員彼此為本地的組將經(jīng)歷較低的自動(dòng)-修復(fù)率,因?yàn)橥ㄟ^覆蓋網(wǎng)絡(luò)連接任何兩個(gè)組成員所要求的中間路由跳(hop)的數(shù)量減少了。這種方法的通知等待時(shí)間與那些專有的、每組生成樹方法相似,除了由通知消息所取的通信跳數(shù)量一般為0(logn),其中n是覆蓋網(wǎng)絡(luò)中節(jié)點(diǎn)的數(shù)量,而不是0(logm),其中m是單獨(dú)的組中節(jié)點(diǎn)的數(shù)量。遺憾的是,這種設(shè)計(jì)的安全攻擊的敏感度比任何其它設(shè)計(jì)大得多。每一FN組必須信任不是FN組的成員的節(jié)點(diǎn)正確地運(yùn)行。的確,由于必須信任任意覆蓋成員正確地監(jiān)視活性并轉(zhuǎn)發(fā)故障通知,在覆蓋中包含不能信任的第三方將使第三方DoS攻擊難以防止。因而,如果不能接受由這種方法提供的安全等級(jí),則應(yīng)該代之以使用前面討論的其它兩種方法之一。在從崩潰恢復(fù)時(shí),運(yùn)行FN功能程序的節(jié)點(diǎn)知道已發(fā)生一個(gè)故障,并知道它應(yīng)該清除與任何FN組相關(guān)聯(lián)的任何過時(shí)的應(yīng)用狀態(tài)。如果在非易失性存儲(chǔ)器中存儲(chǔ)應(yīng)用狀態(tài),則崩潰可能已為該節(jié)點(diǎn)完成清除。此外,恢復(fù)的節(jié)點(diǎn)可能不知道是否將故障通知傳播給其它組成員。因此,本發(fā)明要求節(jié)點(diǎn)積極地比較它們的有效FN組列表,作為檢查活性的消息的一部分。通過觸發(fā)關(guān)于任何已由某個(gè)組成員認(rèn)為是已經(jīng)故障的組的通知來解決不一致。在本發(fā)明的一個(gè)實(shí)施例中,只有當(dāng)兩個(gè)節(jié)點(diǎn)在超時(shí)時(shí)段內(nèi)不能交換任何通信時(shí)斷開,節(jié)點(diǎn)產(chǎn)生因斷開的故障通知。因而,持續(xù)時(shí)間小于超時(shí)時(shí)段的瞬時(shí)節(jié)點(diǎn)崩潰和通信故障被屏蔽,除非它們使應(yīng)用顯式地觸發(fā)故障通知。在本發(fā)明的另一個(gè)實(shí)施例中,使用穩(wěn)定存儲(chǔ)器(stablestorage)來試圖屏蔽短期節(jié)點(diǎn)崩潰。從崩潰恢復(fù)的節(jié)點(diǎn)假定它所參加的所有FN組仍都有效;FNID的積極比較足以可靠地使這個(gè)節(jié)點(diǎn)與世界上的其余節(jié)點(diǎn)相一致。而且,沒有兼容性問題使用穩(wěn)定存儲(chǔ)器的節(jié)點(diǎn)可與不使用穩(wěn)定存儲(chǔ)器的節(jié)點(diǎn)共存。在從崩潰恢復(fù)的節(jié)點(diǎn)上的通信故障仍將使它所參加的所有FN組故障。如果在FN組的成員的某些子集之間的所有通信是不可能的,本發(fā)明保證FN功能程序最終將通知。然而,一個(gè)FN組成員可能仍試圖可靠地發(fā)送消息給另一個(gè)FN組成員,并在所想要的接收者不知道有些東西出錯(cuò)了的情況下使這個(gè)嘗試失敗。例如,在無線網(wǎng)絡(luò)中,有時(shí)有這種情況,即鏈路狀態(tài)將只允許小的消息--諸如活性查詢消息--以獲得通過而較大的消息不行。為了保證節(jié)點(diǎn)能夠顯式地通信或者使它們知道它們不能,本發(fā)明要求在一個(gè)節(jié)點(diǎn)上運(yùn)行的應(yīng)用,如果它嘗試通信并失敗(并因此希望觸發(fā)通知),則通知節(jié)點(diǎn)上的FN功能程序。因而,當(dāng)發(fā)送失敗時(shí),保證通知的故障發(fā)生。本發(fā)明還處理非可遞(intransitive)或?qū)ΨQ連通性故障。如果兩個(gè)節(jié)點(diǎn)不能直接通信,但同時(shí)正在響應(yīng)來自第三方的消息,則它們可能只在試圖交換可靠消息時(shí)經(jīng)歷故障。本發(fā)明還保證,如果任何一方要在這一點(diǎn)觸發(fā)因發(fā)送故障的通知,所有有效的FN組成員將聽到通知。本發(fā)明還處理FN組成員產(chǎn)生混合的確認(rèn)和非確認(rèn)的通信的情況。例如,一個(gè)節(jié)點(diǎn)可能通過用戶數(shù)據(jù)報(bào)協(xié)議(UDP)發(fā)送流化的視頻,同時(shí)通過用戶數(shù)據(jù)報(bào)協(xié)議(TCP)的控制流。應(yīng)用決定哪個(gè)傳遞故障保證觸發(fā)通知。本發(fā)明不監(jiān)視應(yīng)用的通信,因此只發(fā)送它不期望確認(rèn)的通信的應(yīng)用可能不知道是否要觸發(fā)通知。決定不可靠鏈路的責(zé)任保證故障通知保持在應(yīng)用的掌握之中。在此引用的所有參考,包括專利、專利申請(qǐng)和公布,通過引用將它們?nèi)堪ㄔ诖恕S捎谟性S多可應(yīng)用本發(fā)明的原理的可能實(shí)施例,應(yīng)該認(rèn)識(shí)到,在此參考附圖描述的實(shí)施例僅表示例示性的,并不應(yīng)該理解為限制本發(fā)明的范圍。例如,那些本領(lǐng)域熟練技術(shù)人員將認(rèn)識(shí)到,在軟件中所示的被例示的實(shí)施例的元素可在硬件中實(shí)現(xiàn),反之亦然,并且在不脫離本發(fā)明精神的情況下,可對(duì)被例示的實(shí)施例的安排與細(xì)節(jié)進(jìn)行修改。因此,在此所述的本發(fā)明預(yù)期所有這樣的實(shí)施例可出現(xiàn)在所附權(quán)利要求書及其等價(jià)物的范圍之內(nèi)。權(quán)利要求1.一種在網(wǎng)絡(luò)中多個(gè)節(jié)點(diǎn)上運(yùn)行的分布式系統(tǒng)中保證故障通知的方法,其特征在于,所述方法包括創(chuàng)建包括所述多個(gè)節(jié)點(diǎn)的故障通知組,其中,所述故障通知組具有特有的標(biāo)識(shí)符;將一個(gè)應(yīng)用的故障處理方法與故障通知組的特有的標(biāo)識(shí)符相關(guān)聯(lián);查明故障;以及當(dāng)查明故障時(shí),將故障通知采用信號(hào)方式發(fā)送到故障通知組中每一節(jié)點(diǎn)并執(zhí)行故障處理方法。2.如權(quán)利要求1所述的方法,其特征在于,還包括在查明故障并已執(zhí)行故障處理方法之后解除故障處理方法與特有的標(biāo)識(shí)符的關(guān)聯(lián)。3.如權(quán)利要求1所述的方法,其特征在于,創(chuàng)建故障通知組包括驗(yàn)證故障通知組中每一節(jié)點(diǎn)的存在;以及如果成功地接觸了故障通知組中每一節(jié)點(diǎn),則為故障通知組產(chǎn)生特有的標(biāo)識(shí)符。4.如權(quán)利要求3所述的方法,其特征在于,創(chuàng)建故障通知組包括如果沒有成功地接觸故障通知組中每一節(jié)點(diǎn),則執(zhí)行故障處理方法。5.如權(quán)利要求1所述的方法,其特征在于,創(chuàng)建故障通知組包括為故障通知組產(chǎn)生特有的標(biāo)識(shí)符;發(fā)送包含應(yīng)用狀態(tài)與特有的標(biāo)識(shí)符的邀請(qǐng)消息到故障通知組的每一節(jié)點(diǎn);以及驗(yàn)證故障通知組中的每一成員收到所述邀請(qǐng)消息。6.如權(quán)利要求5所述的方法,其特征在于,還包括,如果節(jié)點(diǎn)組中的任一節(jié)點(diǎn)未能收到邀請(qǐng),則采用信號(hào)方式將故障通知發(fā)送到已收到邀請(qǐng)消息的節(jié)點(diǎn);以及執(zhí)行故障處理方法。7.如權(quán)利要求1所述的方法,其特征在于,采用信號(hào)方式發(fā)送故障通知包括向故障通知組中的節(jié)點(diǎn)發(fā)送故障通知消息。8.如權(quán)利要求1所述的方法,其特征在于,采用信號(hào)發(fā)送發(fā)送故障通知包括在對(duì)來自故障通知組中某一節(jié)點(diǎn)的通信請(qǐng)求作出響應(yīng)時(shí)失敗。9.如權(quán)利要求1所述的方法,其特征在于,采用信號(hào)方式發(fā)送故障通知包括僅在對(duì)與已查明故障的故障通知組相關(guān)的通信請(qǐng)求作出響應(yīng)時(shí)失敗。10.如權(quán)利要求1所述的方法,其特征在于,查明故障包括查明與故障通知組中至少一個(gè)其它節(jié)點(diǎn)的通信鏈路中的故障。11.如權(quán)利要求1所述的方法,其特征在于,查明故障包括從應(yīng)用接收指令以用信號(hào)方式發(fā)送故障通知。12.如權(quán)利要求1所述的方法,其特征在于,查明故障包括已一次或多次未能修復(fù)故障通知組。13.如權(quán)利要求1所述的方法,其特征在于,查明故障包括在都在故障通知組中的兩個(gè)節(jié)點(diǎn)之間的通信故障與都不在故障通知組中的兩個(gè)節(jié)點(diǎn)之間的通信故障二通信故障之間作出鑒別。14.如權(quán)利要求1所述的方法,其特征在于,通過應(yīng)用查驗(yàn)故障通知組中每一節(jié)點(diǎn)來查明故障,并在沒有收到對(duì)查驗(yàn)的響應(yīng)時(shí)來確定所述故障。15.如權(quán)利要求1所述的方法,其特征在于,故障通知組中的節(jié)點(diǎn)具有生成樹拓?fù)浣Y(jié)構(gòu),其中,通過應(yīng)用查驗(yàn)生成樹中的毗鄰節(jié)點(diǎn)來查明故障,并在沒有收到對(duì)查驗(yàn)的響應(yīng)時(shí)來確定所述故障。16.如權(quán)利要求1所述的方法,其特征在于,故障通知組中的節(jié)點(diǎn)是覆蓋網(wǎng)絡(luò)中節(jié)點(diǎn)的子集,其中,創(chuàng)建故障通知組包括通過發(fā)送構(gòu)造消息至故障通知組中每一節(jié)點(diǎn)來創(chuàng)建多播樹。17.如權(quán)利要求16所述的方法,其特征在于,將構(gòu)造消息通過覆蓋路由路徑路由到故障通知組中每一節(jié)點(diǎn),并且覆蓋路由路徑中的節(jié)點(diǎn)將指針記錄至覆蓋路由路徑中毗鄰節(jié)點(diǎn)。18.如權(quán)利要求16所述的方法,其特征在于,還包括接收確認(rèn)消息,其中,構(gòu)造消息通過覆蓋路由路徑路由到故障通知組中的每一節(jié)點(diǎn),并在接收到確認(rèn)消息時(shí),覆蓋路由路徑中每一節(jié)點(diǎn)將指針記錄至前一節(jié)點(diǎn),并且其中,通過覆蓋路由路徑逆向選擇確認(rèn)消息的路由,并在接收到確認(rèn)消息時(shí),反向覆蓋路由路徑中的每一節(jié)點(diǎn)將指針記錄到前一節(jié)點(diǎn)。19.如權(quán)利要求16所述的方法,其特征在于,查明故障包括,查明至覆蓋網(wǎng)絡(luò)中某一節(jié)點(diǎn)的通信鏈路已經(jīng)故障,并判定所述節(jié)點(diǎn)是否為多播樹的一個(gè)成員。20.如權(quán)利要求19所述的方法,其特征在于,如果所述節(jié)點(diǎn)是多播樹的成員,則采用信號(hào)方式將故障通知發(fā)送至多播樹中的毗鄰節(jié)點(diǎn)。21.如權(quán)利要求19所述的方法,其特征在于,如果所述節(jié)點(diǎn)是多播樹的成員,則通過不對(duì)來自毗鄰節(jié)點(diǎn)的消息作出響應(yīng)來采用信號(hào)方式將故障通知發(fā)送至多播樹中的毗鄰節(jié)點(diǎn)。22.如權(quán)利要求19所述的方法,其特征在于,如果所述節(jié)點(diǎn)是多播樹的成員,則執(zhí)行所述故障處理方法。23.一種在網(wǎng)絡(luò)中多個(gè)節(jié)點(diǎn)上運(yùn)行的分布式系統(tǒng)中保證故障通知的方法,其特征在于,所述方法包括接收用于故障通知組的特有的標(biāo)識(shí)符,所述故障通知組包括所述多個(gè)節(jié)點(diǎn);將某一應(yīng)用的故障處理方法與故障通知組的特有的標(biāo)識(shí)符相關(guān)聯(lián);查明故障;以及當(dāng)查明故障時(shí),采用信號(hào)方式將某一故障通知發(fā)送至故障通知組中每一節(jié)點(diǎn),并執(zhí)行所述故障處理方法。24.如權(quán)利要求23所述的方法,其特征在于,還包括在查明故障并執(zhí)行故障處理方法之后,執(zhí)行垃圾收集以解除故障處理方法與應(yīng)用狀態(tài)的關(guān)聯(lián)。25.如權(quán)利要求23所述的方法,其特征在于,采用信號(hào)方式發(fā)送故障通知包括發(fā)送故障通知消息至故障通知組中的節(jié)點(diǎn)。26.如權(quán)利要求23所述的方法,其特征在于,采用信號(hào)方式發(fā)送故障通知包括對(duì)來自故障通知組中某一節(jié)點(diǎn)的通信請(qǐng)求作出的響應(yīng)失敗。27.如權(quán)利要求23所述的方法,其特征在于,采用信號(hào)方式發(fā)送故障通知包括僅對(duì)與某一已查明故障的故障通知組相關(guān)的通信請(qǐng)求作出響應(yīng)失敗。28.如權(quán)利要求23所述的方法,其特征在于,查明故障包括查明至故障通知組中至少一個(gè)其它節(jié)點(diǎn)的通信鏈路中的故障。29.如權(quán)利要求23所述的方法,其特征在于,查明故障包括從應(yīng)用程序接收指令以采用信號(hào)方式發(fā)送故障通知。30.如權(quán)利要求23所述的方法,其特征在于,查明故障包括已一次或多次未能修復(fù)故障通知組。31.如權(quán)利要求23所述的方法,其特征在于,通過查驗(yàn)故障通知組中每一節(jié)點(diǎn)的應(yīng)用程序來查明故障,并在沒有收到對(duì)查驗(yàn)的響應(yīng)時(shí)確定所述故障。32.如權(quán)利要求23所述的方法,其特征在于,故障通知組中的節(jié)點(diǎn)具有生成樹拓?fù)浣Y(jié)構(gòu),其中,通過查驗(yàn)生成樹中的毗鄰節(jié)點(diǎn)的應(yīng)用程序來查明故障,并在沒有收到對(duì)查驗(yàn)的響應(yīng)時(shí)確定所述故障。33.如權(quán)利要求23所述的方法,其特征在于,故障通知組中的節(jié)點(diǎn)是覆蓋網(wǎng)絡(luò)中節(jié)點(diǎn)的子集,還包括加入故障通知樹,所述方法包括通過覆蓋路由路徑從創(chuàng)建者節(jié)點(diǎn)接收構(gòu)造消息;以及記錄至覆蓋路由路徑中毗鄰節(jié)點(diǎn)的指針。34.如權(quán)利要求33所述的方法,其特征在于,還包括發(fā)送確認(rèn)消息至創(chuàng)建者節(jié)點(diǎn),其中,構(gòu)造消息通過覆蓋路由路徑路由到故障通知組中的每一節(jié)點(diǎn),并在接收到確認(rèn)消息時(shí),覆蓋路由路徑中的每一節(jié)點(diǎn)記錄至前一節(jié)點(diǎn)的指針,并且其中,通過覆蓋路由路徑逆向選擇確認(rèn)消息的路由,并在接收到確認(rèn)消息時(shí),反向覆蓋路由路徑中的每一節(jié)點(diǎn)記錄至前一節(jié)點(diǎn)的指針。35.如權(quán)利要求33所述的方法,其特征在于,查明故障包括在都在故障通知組中的兩個(gè)節(jié)點(diǎn)之間的通信故障與都不在故障通知組中的兩個(gè)節(jié)點(diǎn)之間的通信故障二通信故障之間作出鑒別。36.如權(quán)利要求33所述的方法,其特征在于,查明故障包括查明至覆蓋網(wǎng)絡(luò)中一個(gè)節(jié)點(diǎn)的通信鏈路已經(jīng)失敗,并判斷所述節(jié)點(diǎn)是否為多播樹中的一個(gè)成員。37.如權(quán)利要求36所述的方法,其特征在于,如果所述節(jié)點(diǎn)是多播樹的成員,則采用信號(hào)方式發(fā)送故障通知至多播樹中的毗鄰節(jié)點(diǎn)。38.如權(quán)利要求36所述的方法,其特征在于,如果所述節(jié)點(diǎn)是多播樹的成員,則通過不對(duì)來自毗鄰節(jié)點(diǎn)的消息作出響應(yīng)來采用信號(hào)方式發(fā)送故障通知至多播樹中的毗鄰節(jié)點(diǎn)。39.如權(quán)利要求36所述的方法,其特征在于,如果所述節(jié)點(diǎn)是多播樹的成員,則執(zhí)行故障處理方法。40.一種在網(wǎng)絡(luò)中多個(gè)節(jié)點(diǎn)上運(yùn)行的分布式系統(tǒng)中保證故障通知的方法,所述多個(gè)節(jié)點(diǎn)是覆蓋網(wǎng)絡(luò)中節(jié)點(diǎn)的子集,其特征在于,所述方法包括加入故障通知樹;查明至樹中一個(gè)毗鄰節(jié)點(diǎn)的通信鏈路中的故障;以及當(dāng)查明故障時(shí)采用信號(hào)方式發(fā)送故障通知。41.如權(quán)利要求40所述的方法,其特征在于,加入故障通知樹包括通過覆蓋路由路徑從創(chuàng)建者節(jié)點(diǎn)接收第一消息;記錄至從其接收第一消息的覆蓋節(jié)點(diǎn)的指針;以及經(jīng)由覆蓋路由路徑中下一節(jié)點(diǎn),轉(zhuǎn)發(fā)第一消息至故障通信組中的一個(gè)節(jié)點(diǎn)。42.如權(quán)利要求41所述的方法,其特征在于,還包括記錄至下一節(jié)點(diǎn)的指針。43.如權(quán)利要求41所述的方法,其特征在于,加入故障通知還包括通過覆蓋路由路徑從故障通知組中的節(jié)點(diǎn)接收第二消息;記錄至從其接收第二消息的覆蓋節(jié)點(diǎn)的指針;以及經(jīng)由從其接收第一消息的覆蓋節(jié)點(diǎn),轉(zhuǎn)發(fā)第二消息至創(chuàng)建者節(jié)點(diǎn)。44.如權(quán)利要求40的方法,其特征在于,查明故障包括在都在故障通知組中的兩個(gè)節(jié)點(diǎn)之間的通信故障與都不在故障通知組中的兩個(gè)節(jié)點(diǎn)之間的通信故障二通信故障之間作出鑒別。45.如權(quán)利要求40所述的方法,其特征在于,查明故障包括已一次或多次未能修復(fù)故障通知組。46.如權(quán)利要求40所述的方法,其特征在于,查明故障包括查明至覆蓋網(wǎng)絡(luò)中一個(gè)節(jié)點(diǎn)的通信鏈路已經(jīng)失敗,并判斷所述節(jié)點(diǎn)是否為多播樹的一個(gè)成員。47.如權(quán)利要求46所述的方法,其特征在于,如果所述節(jié)點(diǎn)是多播樹的成員,則通過不對(duì)來自毗鄰節(jié)點(diǎn)的消息作出響應(yīng)來采用信號(hào)方式發(fā)送故障通知至多播樹中的毗鄰節(jié)點(diǎn)。48.一種在計(jì)算機(jī)可讀介質(zhì)上實(shí)施的應(yīng)用程序接口,其特征在于,它包含用于創(chuàng)建故障通知組并分配特有的標(biāo)識(shí)符給故障通知組的第一函數(shù);用于將某一應(yīng)用的故障處理方法與特有的標(biāo)識(shí)符相關(guān)聯(lián)的第二函數(shù);以及用于采用信號(hào)方式發(fā)送故障通知至故障通知組的第三函數(shù)。49.如權(quán)利要求48所述的應(yīng)用程序接口,其特征在于,所述第一函數(shù)包括代表節(jié)點(diǎn)集合的第一參數(shù)和返回作為第一函數(shù)的結(jié)果的特有的標(biāo)識(shí)符的第二參數(shù)。50.如權(quán)利要求48所述的應(yīng)用程序接口,其特征在于,所述第一函數(shù)包括代表節(jié)點(diǎn)集合的第一參數(shù)、代表應(yīng)用狀態(tài)的第二參數(shù),以及返回作為第一函數(shù)的結(jié)果的特有的標(biāo)識(shí)符的第三參數(shù)。51.如權(quán)利要求48所述的應(yīng)用程序接口,其特征在于,第二函數(shù)包括代表故障處理方法的第一參數(shù)和代表特有的標(biāo)識(shí)符的第二參數(shù)。52.如權(quán)利要求48所述的應(yīng)用程序接口,其特征在于,第三函數(shù)包括代表特有的標(biāo)識(shí)符的第一參數(shù)。全文摘要描述一種有保證的分布式故障通知方法,其中故障通知(FN)功能程序允許使用功能程序的應(yīng)用創(chuàng)建該應(yīng)用將應(yīng)用狀態(tài)與其相關(guān)聯(lián)的FN組。應(yīng)用將故障處理程序與FN組中節(jié)點(diǎn)上的FN功能程序注冊(cè)在一起;將每一故障處理程序與特定FN組相關(guān)聯(lián)。在一個(gè)給定的節(jié)點(diǎn)上,當(dāng)FN功能程序獲悉FN組中的故障時(shí),功能程序執(zhí)行在那個(gè)節(jié)點(diǎn)上相關(guān)聯(lián)的故障處理程序。使用功能程序?qū)⒂蓱?yīng)用檢測(cè)到的系統(tǒng)故障用信號(hào)發(fā)送至其它FN組成員。功能程序檢測(cè)在其上實(shí)現(xiàn)功能程序的覆蓋網(wǎng)絡(luò)中發(fā)生的系統(tǒng)故障,并用信號(hào)發(fā)送故障通知至其它FN組成員。文檔編號(hào)H04L12/18GK1610312SQ20041008826公開日2005年4月27日申請(qǐng)日期2004年10月18日優(yōu)先權(quán)日2003年10月17日發(fā)明者A·沃爾曼,D·克斯笛克,J·杜納根,M·M·西伊米,M·B·瓊斯,N·J·A·哈維申請(qǐng)人:微軟公司