專利名稱:用于保持?jǐn)?shù)據(jù)完整性的設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于保持?jǐn)?shù)據(jù)完整性的設(shè)備。
背景技術(shù):
在“高度可用的”商業(yè)計(jì)算環(huán)境中,硬件和軟件技術(shù)的組合被典型地組合以提供關(guān)鍵程序從硬件和軟件故障的快速恢復(fù),所述環(huán)境被設(shè)計(jì)用于消除單點(diǎn)故障。例如,典型的高度可用的環(huán)境通常包括多個(gè)共享諸如磁盤驅(qū)動(dòng)器的資源的松散連接的計(jì)算機(jī)。關(guān)鍵程序能夠在一組計(jì)算機(jī)中的任何一臺(tái)上運(yùn)行。而且,硬件資源(例如,磁盤驅(qū)動(dòng)器)在計(jì)算機(jī)之間共享。導(dǎo)致關(guān)鍵程序的不可用性的硬件或軟件故障能夠通過(guò)將其移至另一臺(tái)計(jì)算機(jī)由此恢復(fù)它的可用性而得到補(bǔ)救。典型的高度可用的環(huán)境在歷史上是由被稱為高度可用性(HA)軟件的軟件所管理的。典型地,HA軟件通過(guò)監(jiān)視組件并承擔(dān)響應(yīng)于故障而移動(dòng)資源的責(zé)任,提供對(duì)硬件和軟件組件的管理。這樣的高度可用的環(huán)境的示例(100)在圖IA中示出,并包括具有第一 HA軟件 (117)和高度可用的軟件組件(110)的第一實(shí)例的第一計(jì)算機(jī)(105),其中軟件組件(110) 可操作用來(lái)訪問(wèn)共享資源,例如,包括數(shù)據(jù)的共享磁盤(120)。高度可用的環(huán)境(100)還包括具有可操作用來(lái)與第一 HA軟件(117)通信的第二 HA軟件(119)的第二計(jì)算機(jī)(115)。在示例中,第一計(jì)算機(jī)(105)的第一實(shí)例(110)訪問(wèn)共享磁盤(120)。第一 HA軟件(117)具有共享磁盤(120)的“所有權(quán)”。在第一計(jì)算機(jī)(105)的故障的事件中,第二 HA軟件(119)可操作用來(lái)檢測(cè)故障 (例如,響應(yīng)于第二 HA軟件(119)不再能夠與第一 HA軟件(117)通信)。參考圖1B,作為響應(yīng),第二 HA軟件(119)可操作用來(lái)終止第一實(shí)例(110),將共享磁盤(120)的所有權(quán)移至其本身,并接著在第二計(jì)算機(jī)(11 上開(kāi)啟(start)軟件組件 (125)的第二實(shí)例。第二計(jì)算機(jī)(11 接著可操作用來(lái)從第一計(jì)算機(jī)(105) “接管”責(zé)任, 并且在第二計(jì)算機(jī)(11 上運(yùn)行的第二實(shí)例(12 能夠訪問(wèn)共享磁盤(120)。圖IA和IB的環(huán)境(100)提供了軟件組件的有保證的單個(gè)激活——也即,軟件組件的兩個(gè)實(shí)例不可能在不同的計(jì)算機(jī)上同時(shí)開(kāi)啟。如果軟件組件的兩個(gè)實(shí)例要在不同的計(jì)算機(jī)上同時(shí)開(kāi)啟,則這可能引起諸如共享磁盤(120)上的數(shù)據(jù)的損壞的錯(cuò)誤。雖然上述環(huán)境(100)為關(guān)鍵程序的高度可用性和關(guān)鍵程序的有保證的單個(gè)激活作了準(zhǔn)備,但是特殊硬件(例如,必須被具體地配置以使其能夠被多個(gè)計(jì)算機(jī)訪問(wèn)的共享磁盤(120))和軟件(例如,HA軟件)是需要的。憑借更多的現(xiàn)代技術(shù),可以在不需要特殊的硬件和/或軟件的情況下獲得高度可用性和有保證的單個(gè)激活。這樣的環(huán)境的代表(200)在圖2中示出,其中環(huán)境(200)包括相同軟件組件的兩個(gè)實(shí)例。更具體地,環(huán)境(200)包括具有高度可用的軟件組件O10)的第三實(shí)例的第三
3計(jì)算機(jī)005),其中第三實(shí)例(210)可操作用來(lái)訪問(wèn)共享資源,例如,包括數(shù)據(jù)的共享磁盤 O20)。環(huán)境(200)還包括具有高度可用的軟件組件(22 的第四實(shí)例的第四計(jì)算機(jī)(215), 其中第四實(shí)例(225)也可操作用來(lái)訪問(wèn)共享磁盤020)。在圖IA和IB的示例中,軟件組件不需要負(fù)起有保證的單個(gè)激活的責(zé)任,因?yàn)榄h(huán)境 (100)包括HA軟件。因?yàn)閳D2的環(huán)境(200)不包括HA軟件,所以軟件組件需要能夠確保共享磁盤上的數(shù)據(jù)不會(huì)通過(guò)來(lái)自兩個(gè)計(jì)算機(jī)O05、215)的同時(shí)的未協(xié)調(diào)的訪問(wèn)而被損壞。如果軟件組件的每個(gè)實(shí)例分別由單個(gè)進(jìn)程組成,并且如果共享磁盤上的數(shù)據(jù)僅包含在少量文件中,則使用對(duì)共享磁盤上的數(shù)據(jù)文件的文件鎖定以確保數(shù)據(jù)的完整性被保持是充分的。例如,排他的文件鎖定能夠用于確保一次只有軟件組件的一個(gè)運(yùn)行實(shí)例讀取或?qū)懭霐?shù)據(jù)文件。在更復(fù)雜的方法中,數(shù)據(jù)文件的區(qū)域的“范圍鎖定”可用于確保軟件組件的多個(gè)實(shí)例不會(huì)通過(guò)未協(xié)調(diào)的訪問(wèn)而使數(shù)據(jù)文件損壞。當(dāng)軟件組件的復(fù)雜度增加時(shí),需要進(jìn)一步的改進(jìn)。
發(fā)明內(nèi)容
根據(jù)優(yōu)選實(shí)施例的第一方面,提供了一種用于保持?jǐn)?shù)據(jù)完整性的設(shè)備,用于在包括具有第一多個(gè)進(jìn)程的第一軟件實(shí)例、以及第二軟件實(shí)例的環(huán)境中使用,其中所述第一軟件實(shí)例和第二軟件實(shí)例各自可操作用來(lái)訪問(wèn)共享數(shù)據(jù),并且其中,與所述共享數(shù)據(jù)相關(guān)聯(lián)的文件用于鎖定,所述設(shè)備包括第一鎖組件,用于響應(yīng)于第一多個(gè)進(jìn)程的第一父進(jìn)程不持有(hold)第一分層(hierarchical)文件鎖,代表第二實(shí)例獲得所述第一分層文件鎖;部件,用于響應(yīng)于代表所述第二實(shí)例獲得第一分層文件鎖,激活第二鎖組件,其中,所述第二鎖組件可操作用來(lái)響應(yīng)于第一多個(gè)進(jìn)程均不持有作為第一分層文件鎖的子鎖(child)的第二分層文件鎖,代表所述第二實(shí)例獲得第二分層文件鎖;以及部件,用于響應(yīng)于由第一鎖組件獲得所述第一分層文件鎖,并響應(yīng)于由第二鎖組件獲得所述第二分層文件鎖,防止第一實(shí)例訪問(wèn)共享數(shù)據(jù)并允許所述第二實(shí)例訪問(wèn)共享數(shù)據(jù)。根據(jù)優(yōu)選實(shí)施例的第二方面,提供了一種保持?jǐn)?shù)據(jù)完整性的方法,用于在包括具有第一多個(gè)進(jìn)程的第一軟件實(shí)例、以及第二軟件實(shí)例的環(huán)境中使用,其中所述第一軟件實(shí)例和第二軟件實(shí)例各自可操作用來(lái)訪問(wèn)共享數(shù)據(jù),并且其中,與所述共享數(shù)據(jù)相關(guān)聯(lián)的文件用于鎖定,所述方法包括響應(yīng)于第一多個(gè)進(jìn)程的第一父進(jìn)程不持有第一分層文件鎖,代表第二實(shí)例獲得所述第一分層文件鎖;響應(yīng)于代表所述第二實(shí)例獲得第一分層文件鎖、以及第一多個(gè)進(jìn)程均不持有作為第一分層文件鎖的子鎖的第二分層文件鎖,代表所述第二實(shí)例獲得第二分層文件鎖;以及響應(yīng)于獲得所述第一分層文件鎖和所述第二分層文件鎖,防止第一實(shí)例訪問(wèn)共享數(shù)據(jù)并允許所述第二實(shí)例訪問(wèn)共享數(shù)據(jù)。根據(jù)優(yōu)選實(shí)施例的第三方面,提供了一種計(jì)算機(jī)程序,包括程序代碼組件,其被適配為當(dāng)所述程序在計(jì)算機(jī)上運(yùn)行時(shí)執(zhí)行上述方法的所有步驟。
現(xiàn)在將參考以下附圖中圖示的本發(fā)明的優(yōu)選實(shí)施例,僅通過(guò)示例的方式來(lái)描述本發(fā)明
圖IA是現(xiàn)有技術(shù)的高度可用的第一環(huán)境的框圖;圖IB是在高度可用的第一環(huán)境中的計(jì)算機(jī)故障的事件中、圖1的現(xiàn)有技術(shù)的高度可用的第一環(huán)境的框圖;圖2是現(xiàn)有技術(shù)的高度可用的第二環(huán)境的框圖;圖3是根據(jù)優(yōu)選實(shí)施例的高度可用的第二環(huán)境的框圖;圖4是示出與圖3的環(huán)境的父進(jìn)程相關(guān)聯(lián)的進(jìn)程中涉及的操作步驟的流程圖;圖5是示出與圖3的環(huán)境的子進(jìn)程相關(guān)聯(lián)的進(jìn)程中涉及的操作步驟的流程圖;圖6A是與第一父進(jìn)程相關(guān)聯(lián)的組件的框圖;圖6B是與第二父進(jìn)程相關(guān)聯(lián)的組件的框圖;圖7A是與圖6A的父進(jìn)程的第一子進(jìn)程相關(guān)聯(lián)的組件的框圖;以及圖7B是與圖6A的父進(jìn)程的第二子進(jìn)程相關(guān)聯(lián)的組件的框圖。
具體實(shí)施例方式在軟件組件的多個(gè)實(shí)例各自包括能夠訪問(wèn)共享資源的數(shù)據(jù)的多個(gè)進(jìn)程的環(huán)境中, 需要改進(jìn)的方法。在這里的示例中,軟件組件的多個(gè)實(shí)例能夠在多臺(tái)計(jì)算機(jī)上同時(shí)開(kāi)啟。每個(gè)實(shí)例可操作用來(lái)訪問(wèn)環(huán)境中的數(shù)據(jù),并且每個(gè)實(shí)例包括一個(gè)或多個(gè)操作系統(tǒng)進(jìn)程。軟件組件的每個(gè)實(shí)例是“活動(dòng)的(active),,實(shí)例(被允許更新數(shù)據(jù))或“待命的 (standby),,實(shí)例(不被允許更新數(shù)據(jù))。在任何時(shí)間點(diǎn),環(huán)境不包括多于一個(gè)活動(dòng)實(shí)例——然而,可以存在多于一個(gè)待命實(shí)例——這確保關(guān)鍵程序的單個(gè)激活。優(yōu)選地,在活動(dòng)實(shí)例的完全故障(即,與當(dāng)前的活動(dòng)實(shí)例的每個(gè)進(jìn)程相關(guān)聯(lián)的故障)的事件中,單個(gè)待命實(shí)例可變?yōu)樾碌幕顒?dòng)實(shí)例。更優(yōu)選地,活動(dòng)實(shí)例的局部故障(即, 與當(dāng)前的活動(dòng)實(shí)例的進(jìn)程的子集相關(guān)聯(lián)、而不是與當(dāng)前的活動(dòng)實(shí)例的每個(gè)進(jìn)程相關(guān)聯(lián)的故障)防止單個(gè)待命實(shí)例變?yōu)樾碌幕顒?dòng)實(shí)例?,F(xiàn)在將參考附圖描述優(yōu)選實(shí)施例的實(shí)現(xiàn)。圖3描繪了高度可用的環(huán)境的代表(300),其包括具有高度可用的軟件組件(310) 的第五實(shí)例的第五計(jì)算機(jī)(305)。第五實(shí)例(310)包括多個(gè)進(jìn)程(311、312和31 ,每個(gè)進(jìn)程都可操作用來(lái)訪問(wèn)共享資源,例如,包括數(shù)據(jù)的共享磁盤(320)。在示例中,共享磁盤(320)與網(wǎng)絡(luò)文件系統(tǒng)相關(guān)聯(lián)。第一進(jìn)程(311)是具有兩個(gè)子進(jìn)程(也就是,第二進(jìn)程(312)和第三進(jìn)程(313)) 的父進(jìn)程,其中父進(jìn)程啟動(dòng)子進(jìn)程。環(huán)境(300)還包括具有高度可用的軟件組件(325)的第六實(shí)例的第六計(jì)算機(jī) (315),其中第六實(shí)例(32 包括多個(gè)進(jìn)程(3沈、327和328),每個(gè)進(jìn)程都可操作用來(lái)訪問(wèn)共享磁盤(320)。第四進(jìn)程(326)是具有兩個(gè)子進(jìn)程(也就是,第五進(jìn)程(327)和第六進(jìn)程(3 )) 的父進(jìn)程,其中父進(jìn)程啟動(dòng)子進(jìn)程。圖6A是與第一進(jìn)程(311)相關(guān)聯(lián)的組件的框圖,其中第一進(jìn)程(311)包括第一監(jiān)視器組件(600)和第一鎖組件(605),它們每個(gè)都可操作用來(lái)訪問(wèn)共享磁盤(320)。第一進(jìn)程(311)還包括第一啟動(dòng)器組件(610)。圖6B是與第四進(jìn)程(326)相關(guān)聯(lián)的組件的框圖,其中第四進(jìn)程(326)包括第二監(jiān)視器組件(61 和第二鎖組件(620),它們每個(gè)都可操作用來(lái)訪問(wèn)共享磁盤(320)。第四進(jìn)程(326)還包括第二啟動(dòng)器組件(625)。圖7A是與第二進(jìn)程(31 相關(guān)聯(lián)的組件的框圖,其中第二進(jìn)程(31 包括第三監(jiān)視器組件(700)和第三鎖組件(705),它們每個(gè)都可操作用來(lái)訪問(wèn)共享磁盤(320)。第二進(jìn)程(312)還包括第一終止器(710)。圖7B是與第三進(jìn)程(31 相關(guān)聯(lián)的組件的框圖,其中第三進(jìn)程(31 包括第四監(jiān)視器組件(71 和第四鎖組件(720),它們每個(gè)都可操作用來(lái)訪問(wèn)共享磁盤(320)。第三進(jìn)程(31 還包括第二終止器(725)。優(yōu)選地,父進(jìn)程和子進(jìn)程中的每個(gè)都可操作用來(lái)訪問(wèn)一個(gè)或多個(gè)鎖。存儲(chǔ)在共享磁盤(320)上的文件用于鎖定。在這里的示例中,提供了可以被鎖定在排他模式中的主鎖和可以被鎖定在排他或共享模式中的活動(dòng)鎖。本發(fā)明可以用建議的或強(qiáng)制的鎖來(lái)實(shí)現(xiàn)。優(yōu)選地,鎖包括與實(shí)例相關(guān)聯(lián)的標(biāo)識(shí)符,其中所述實(shí)例的父進(jìn)程持有所述鎖。在一個(gè)示例中,將標(biāo)識(shí)符存儲(chǔ)在共享磁盤(320)中的用于鎖定的文件中。在另一個(gè)示例中,將標(biāo)識(shí)符存儲(chǔ)在與用于鎖定的文件分離的文件中。現(xiàn)在將參考圖3至8描述示例。在示例中,第一進(jìn)程(311)開(kāi)始執(zhí)行,使得第五實(shí)例(310)開(kāi)啟。參考圖4,第一進(jìn)程(311)的第一監(jiān)視器組件(600)監(jiān)視主鎖,從而確定(步驟 400)是否可以獲得鎖的排他模式。第一監(jiān)視器組件(600)確定可以獲得主鎖上的排他模式,并且,作為響應(yīng),第一鎖組件(60 獲得主鎖上的排他模式。優(yōu)選地,與第一進(jìn)程(311)相關(guān)聯(lián)的標(biāo)識(shí)符與主鎖相關(guān)聯(lián)。第一進(jìn)程(311)的第一監(jiān)視器組件(600)監(jiān)視活動(dòng)鎖,從而確定是否可以獲得鎖的排他模式。第一監(jiān)視器組件(600)確定可以獲得活動(dòng)鎖上的排他模式,并且,作為響應(yīng),第一鎖組件(60 獲得活動(dòng)鎖上的所述排他模式。優(yōu)選地,與第一進(jìn)程(311)相關(guān)聯(lián)的標(biāo)識(shí)符與活動(dòng)鎖相關(guān)聯(lián)。作為響應(yīng),第五實(shí)例(310)變?yōu)榛顒?dòng)實(shí)例(注意,第五實(shí)例(310)變?yōu)槲ㄒ坏幕顒?dòng)實(shí)例)。作為響應(yīng),第一鎖組件(60 解鎖活動(dòng)鎖上的排他模式,并接著將活動(dòng)鎖鎖定在共享模式中。第一啟動(dòng)器組件(610)啟動(dòng)一個(gè)或多個(gè)子進(jìn)程。在這里的示例中,第一啟動(dòng)器組件(610)啟動(dòng)第二進(jìn)程(312)和第三進(jìn)程(313)??商娲?,第二進(jìn)程(312)和第三進(jìn)程(313)中的至少一個(gè)可以被獨(dú)立地啟動(dòng) (例如,通過(guò)與第一進(jìn)程(311)分離的另一個(gè)進(jìn)程)。
優(yōu)選地,第二進(jìn)程和第三進(jìn)程不做任何工作,直到它們證實(shí)了活動(dòng)鎖的持有者是第一進(jìn)程為止——第三監(jiān)視器組件(700)和第四監(jiān)視器組件(71 中的每一個(gè)都檢查與活動(dòng)鎖相關(guān)聯(lián)的標(biāo)識(shí)符,從而分別確定標(biāo)識(shí)符是否與第二進(jìn)程和第三進(jìn)程的父進(jìn)程相關(guān)聯(lián)。 如果標(biāo)識(shí)符不與父進(jìn)程相關(guān)聯(lián),則第二進(jìn)程和第三進(jìn)程假定父進(jìn)程已經(jīng)失敗并且它們也必須終止——下面將更詳細(xì)地描述終止過(guò)程。在該示例中,標(biāo)識(shí)符與父進(jìn)程(也就是,第一進(jìn)程(311))相關(guān)聯(lián)。作為響應(yīng),參考圖5,一旦啟動(dòng),第三監(jiān)視器組件(700)和第四監(jiān)視器組件(715)中的每一個(gè)就都監(jiān)視活動(dòng)鎖,從而確定(步驟500)是否可以獲得鎖的共享模式。第三監(jiān)視器組件(700)確定可以獲得活動(dòng)鎖上的共享模式,并且,作為響應(yīng),第三鎖組件(70 獲得(步驟50 活動(dòng)鎖上的所述共享模式。第四監(jiān)視器組件(715)確定是否可以獲得活動(dòng)鎖上的共享模式,并且,作為響應(yīng), 第四鎖組件(720)獲得(步驟50 活動(dòng)鎖上的所述共享模式。因此,第一進(jìn)程(311)以排他模式持有主鎖,并且第一進(jìn)程(311)、第二進(jìn)程(312) 和第三進(jìn)程(313)中的每一個(gè)都以共享模式持有活動(dòng)鎖。結(jié)果,另一單個(gè)實(shí)例不能變?yōu)樾碌幕顒?dòng)實(shí)例,并且第一進(jìn)程(311)、第二進(jìn)程 (312)和第三進(jìn)程(313)中的每一個(gè)都能夠安全地訪問(wèn)共享磁盤中的數(shù)據(jù)。應(yīng)該理解, 由于第一進(jìn)程(311)、第二進(jìn)程(312)和第三進(jìn)程(313)與同一實(shí)例(也就是,第五實(shí)例 (310))相關(guān)聯(lián),所以可以使用已知的機(jī)制來(lái)協(xié)調(diào)第一進(jìn)程(311)、第二進(jìn)程(31 和第三進(jìn)程(313)對(duì)共享磁盤(320)的訪問(wèn)。參考圖4,在該示例中,第四進(jìn)程(3 )由第六實(shí)例(325)啟動(dòng)。第四進(jìn)程(326)的第四監(jiān)視器組件(615)監(jiān)視主鎖,從而確定(400)是否可以獲得鎖的排他模式。第四監(jiān)視器組件(61 確定不能獲得主鎖上的排他模式——這是因?yàn)橹麈i的排他模式已經(jīng)被第一進(jìn)程(311)獲得。有利地,第四監(jiān)視器組件(61 可使用與是否可以獲得主鎖的排他模式相關(guān)聯(lián)的確定,從而還確定另一個(gè)實(shí)例是否是活動(dòng)的。如果第四監(jiān)視器組件(615)不能獲得主鎖的排他模式,則第四監(jiān)視器組件(61 確定另一個(gè)實(shí)例已經(jīng)持有主鎖的排他模式。在步驟430,第六實(shí)例(325)確定它是否將重試變?yōu)樾碌幕顒?dòng)實(shí)例。響應(yīng)于第六實(shí)例(325)不重試(步驟435)變?yōu)樾碌幕顒?dòng)實(shí)例,圖4的進(jìn)程結(jié)束。響應(yīng)于第六實(shí)例(325)重試變?yōu)樾碌幕顒?dòng)實(shí)例,第六實(shí)例(325)被標(biāo)記為待命實(shí)例(步驟435)。在該示例中,第六實(shí)例(325)重試(步驟435)變?yōu)樾碌幕顒?dòng)實(shí)例,并且接著,第四監(jiān)視器組件(61 監(jiān)視主鎖,從而確定(步驟400)是否可以獲得鎖的排他模式。第四監(jiān)視器組件(61 確定可以獲得主鎖上的排他模式——這是因?yàn)樵谠撌纠?,主鎖的排他模式已經(jīng)被第一進(jìn)程(311)的鎖組件(60 釋放(例如,被顯式地釋放,因?yàn)榈谝贿M(jìn)程(311)已經(jīng)完成工作;被隱式地釋放,因?yàn)榈谝贿M(jìn)程(311)已經(jīng)失敗)。接著,第四鎖組件(720)獲得(步驟40 主鎖上的排他模式。現(xiàn)在,第六實(shí)例(325)嘗試變?yōu)樾碌幕顒?dòng)實(shí)例。作為響應(yīng),第四監(jiān)視器組件(615)接著監(jiān)視活動(dòng)鎖,從而確定(步驟410)是否可以獲得鎖的排他模式。第一監(jiān)視器組件(600)確定不能獲得主鎖上的排他模式——在這里的示例中,這是因?yàn)榈诙M(jìn)程(31 或第三進(jìn)程(313)中的至少一個(gè)仍然以共享模式持有活動(dòng)鎖。接著,第四鎖組件(720)釋放主鎖上的排他模式,并且第六實(shí)例(32 仍然是(步驟430)待命實(shí)例。應(yīng)該理解,優(yōu)選實(shí)施例提供了“分層的”鎖,也就是,主鎖和活動(dòng)鎖,其中,首先獲得主鎖,并且接著可以獲得活動(dòng)鎖。通過(guò)使用分層鎖,本發(fā)明通過(guò)對(duì)在其期間當(dāng)前活動(dòng)實(shí)例的父進(jìn)程可能已經(jīng)終止、但相關(guān)聯(lián)的子進(jìn)程尚未終止的定時(shí)窗口(timing window)負(fù)責(zé)而提供了可靠性——這導(dǎo)致了主鎖上的排他模式被父進(jìn)程釋放且活動(dòng)鎖上的共享模式被子進(jìn)程釋放。因此,即使第四進(jìn)程(326)能夠獲得主鎖上的排他模式(即,因?yàn)榈谒倪M(jìn)程(326) 由于第二進(jìn)程(31 或第三進(jìn)程(31 中的至少一個(gè)仍然以共享模式持有活動(dòng)鎖而不能獲得主鎖上的排他模式),第六實(shí)例(325)也仍然是待命實(shí)例。響應(yīng)于第六實(shí)例(325)不重試(步驟435)變?yōu)樾碌幕顒?dòng)實(shí)例,進(jìn)程結(jié)束。在該示例中,響應(yīng)于第六實(shí)例(325)重試(步驟435)變?yōu)樾碌幕顒?dòng)實(shí)例,第四監(jiān)視器組件(61 監(jiān)視主鎖,從而確定(步驟400)是否可以獲得鎖的排他模式。第四監(jiān)視器組件(61 確定可以獲得主鎖上的排他模式——在該示例中,這是因?yàn)橹麈i的排他模式已經(jīng)被第一進(jìn)程(311)的第一鎖組件(60 釋放。接著,第四鎖組件(720)獲得主鎖上的排他模式。第四監(jiān)視器組件(61 接著監(jiān)視活動(dòng)鎖,從而確定(步驟410)是否可以獲得鎖的排他模式。第一監(jiān)視器組件(600)確定可以獲得活動(dòng)鎖上的排他模式——在這里的示例中, 這是因?yàn)榈诙M(jìn)程(31 和第三進(jìn)程(31 都不再以共享模式持有活動(dòng)鎖。第二進(jìn)程(31 和第三進(jìn)程(31 都不再以共享模式持有活動(dòng)鎖的事件可由以下情況引起例如,第二進(jìn)程和第三進(jìn)程中的每一個(gè)都被顯式地或隱式地終止;或者第一進(jìn)程(311)(顯式地或者由于故障而隱式地)終止,并且接著,第三監(jiān)視器組件(700)和第四監(jiān)視器組件(715)中的每一個(gè)都確定第一進(jìn)程(311)已經(jīng)通過(guò)使用輪詢功能(步驟510) 而終止——接著,第二進(jìn)程和第三進(jìn)程的第一終止器(710)和第二終止器(725)中的每一個(gè)分別終止(步驟520)并釋放共享模式中的活動(dòng)鎖。應(yīng)該理解,如果第一進(jìn)程(311)未終止,則子進(jìn)程可以繼續(xù)工作(步驟515)。響應(yīng)于第一監(jiān)視器組件(600)確定可以獲得活動(dòng)鎖上的排他模式,第四鎖組件 (720)獲得活動(dòng)鎖上的所述排他模式。作為響應(yīng),第六實(shí)例(325)變?yōu)樾碌幕顒?dòng)實(shí)例。應(yīng)該理解,在上面的示例中,由于沒(méi)有第五實(shí)例(310)(也就是,之前的活動(dòng)實(shí)例) 的子進(jìn)程正在運(yùn)行,所以第四鎖組件(720)可操作用來(lái)獲得活動(dòng)鎖上的排他模式。而且,由于與第五實(shí)例(310)相關(guān)聯(lián)的進(jìn)程(311、312和313)中的每一個(gè)都不在運(yùn)行,所以第四鎖組件(720)可操作用來(lái)獲得主鎖和活動(dòng)鎖中的每一個(gè)上的排他模式。在另一個(gè)實(shí)現(xiàn)中,提供了多個(gè)活動(dòng)鎖。優(yōu)選地,如果主鎖上的排他模式已經(jīng)被釋放了,則活動(dòng)實(shí)例的所有進(jìn)程必須釋放所有的所述多個(gè)活動(dòng)鎖,從而使另一實(shí)例能夠試圖變?yōu)樾碌幕顒?dòng)實(shí)例。
接著,第四鎖組件(720)解鎖活動(dòng)鎖上的排他模式,并接著將活動(dòng)鎖鎖定在共享模式中。第二啟動(dòng)器組件(62 可以啟動(dòng)一個(gè)或多個(gè)子進(jìn)程,例如,第五進(jìn)程(327)和第六進(jìn)程(328)。有利地,在每個(gè)實(shí)例可以包括多個(gè)進(jìn)程的環(huán)境中,本發(fā)明考慮到實(shí)例的高度可用性(例如,實(shí)例可變?yōu)樾碌幕顒?dòng)實(shí)例)和有保證的單個(gè)激活,以便一次只有軟件組件的一個(gè)實(shí)例可以訪問(wèn)共享數(shù)據(jù)(例如,通過(guò)使用“分層”鎖定——例如,排他的主鎖和排他的/共享的活動(dòng)鎖)。有利地,實(shí)例不需要配備另一個(gè)實(shí)例的位置,并且實(shí)例之間的網(wǎng)絡(luò)心跳(network heartbeating)不需要確保單個(gè)激活。這是因?yàn)榭梢允褂梦募i定來(lái)保證單個(gè)激活。有利地,待命實(shí)例可以在不需要知道與故障的實(shí)例相關(guān)聯(lián)的數(shù)據(jù)(例如,與故障的實(shí)例在哪里運(yùn)行相關(guān)聯(lián)的位置)的情況下取代故障的實(shí)例。有利地,不需要HA軟件。這增加了可用性并允許更簡(jiǎn)單地引入待命實(shí)例。而且,持有鎖的進(jìn)程的標(biāo)識(shí)符與鎖的關(guān)聯(lián)是有利的,例如,如果已經(jīng)存在網(wǎng)絡(luò)中斷。在中斷之后,父進(jìn)程可以重新獲得該鎖并查詢標(biāo)識(shí)符,以確定標(biāo)識(shí)符是否是它自己的。 如果標(biāo)識(shí)符是它自己的,則進(jìn)程知道它在中斷之前持有該鎖、以及在中斷期間沒(méi)有其它實(shí)例獲得該鎖。如果標(biāo)識(shí)符不是它自己的,則進(jìn)程知道在中斷期間另一實(shí)例必定已經(jīng)獲得了該鎖一-在這種情況下,父進(jìn)程和與該實(shí)例相關(guān)聯(lián)的其它進(jìn)程必須終止,以保證完整性(并且如果需要,則父進(jìn)程可以重新執(zhí)行并試圖獲得該鎖)。應(yīng)該理解,如果存在多個(gè)待命實(shí)例,則優(yōu)選地,當(dāng)當(dāng)前活動(dòng)實(shí)例不再是活動(dòng)實(shí)例時(shí),實(shí)施選擇進(jìn)程以選擇單個(gè)待命實(shí)例變?yōu)樾碌幕顒?dòng)實(shí)例,例如,其中,所述多個(gè)待命實(shí)例 “競(jìng)爭(zhēng)(race),,以變?yōu)樾碌幕顒?dòng)實(shí)例;其中,所述多個(gè)待命實(shí)例判定它們中的哪一個(gè)變?yōu)樾碌幕顒?dòng)實(shí)例??商娲?,可以使用另外的鎖文件以協(xié)調(diào)和監(jiān)視待命實(shí)例。
9
權(quán)利要求
1.一種用于保持?jǐn)?shù)據(jù)完整性的設(shè)備,用于在包括第二軟件實(shí)例、以及具有第一多個(gè)進(jìn)程的第一軟件實(shí)例的環(huán)境中使用,其中所述第一軟件實(shí)例和所述第二軟件實(shí)例各自可操作用來(lái)訪問(wèn)共享數(shù)據(jù),并且其中,與所述共享數(shù)據(jù)相關(guān)聯(lián)的文件被用于鎖定,所述設(shè)備包括第一鎖組件,用于響應(yīng)于所述第一多個(gè)進(jìn)程的第一父進(jìn)程不持有第一分層文件鎖,代表第二實(shí)例獲得所述第一分層文件鎖;部件,用于響應(yīng)于代表所述第二實(shí)例獲得所述第一分層文件鎖,激活第二鎖組件,其中,所述第二鎖組件可操作用來(lái)響應(yīng)于所述第一多個(gè)進(jìn)程均不持有作為所述第一分層文件鎖的子鎖的第二分層文件鎖,代表所述第二實(shí)例獲得所述第二分層文件鎖;以及部件,用于響應(yīng)于由所述第一鎖組件獲得所述第一分層文件鎖,并響應(yīng)于由所述第二鎖組件獲得所述第二分層文件鎖,防止第一實(shí)例訪問(wèn)所述共享數(shù)據(jù)并允許所述第二實(shí)例訪問(wèn)所述共享數(shù)據(jù)。
2.如權(quán)利要求1所述的設(shè)備,其中所述第二鎖組件可操作用來(lái)響應(yīng)于第二監(jiān)視器組件確定已經(jīng)由所述第一多個(gè)進(jìn)程中的至少一個(gè)獲得了所述第二分層文件鎖,防止代表所述第二實(shí)例獲得所述第二分層文件鎖。
3.如權(quán)利要求1所述的設(shè)備,其中所述第二軟件實(shí)例包括第二多個(gè)進(jìn)程,并且其中所述第二鎖組件可操作用來(lái)代表所述第二多個(gè)進(jìn)程中的至少一個(gè)獲得所述第二分層文件鎖。
4.如權(quán)利要求1所述的設(shè)備,還包括第一監(jiān)視器組件,用于確定所述第一分層文件鎖是否能夠被獲得。
5.如權(quán)利要求1所述的設(shè)備,還包括第二監(jiān)視器組件,用于確定所述第二分層文件鎖是否能夠被獲得。
6.一種用于保持?jǐn)?shù)據(jù)完整性的方法,用于在包括第二軟件實(shí)例、以及具有第一多個(gè)進(jìn)程的第一軟件實(shí)例的環(huán)境中使用,其中所述第一軟件實(shí)例和所述第二軟件實(shí)例各自可操作用來(lái)訪問(wèn)共享數(shù)據(jù),并且其中,與所述共享數(shù)據(jù)相關(guān)聯(lián)的文件被用于鎖定,所述方法包括響應(yīng)于所述第一多個(gè)進(jìn)程的第一父進(jìn)程不持有第一分層文件鎖,代表第二實(shí)例獲得所述第一分層文件鎖;響應(yīng)于代表所述第二實(shí)例獲得所述第一分層文件鎖、以及所述第一多個(gè)進(jìn)程均不持有作為所述第一分層文件鎖的子鎖的第二分層文件鎖,代表所述第二實(shí)例獲得所述第二分層文件鎖;以及響應(yīng)于獲得所述第一分層文件鎖以及所述第二分層文件鎖,防止第一實(shí)例訪問(wèn)所述共享數(shù)據(jù)并允許所述第二實(shí)例訪問(wèn)所述共享數(shù)據(jù)。
7.一種計(jì)算機(jī)程序,包括程序代碼組件,其被適配為當(dāng)所述程序在計(jì)算機(jī)上運(yùn)行時(shí)執(zhí)行如權(quán)利要求6所述的所有步驟。
全文摘要
提供了一種在軟件組件的多個(gè)實(shí)例各自包括能夠訪問(wèn)共享資源的多個(gè)進(jìn)程的環(huán)境中保持?jǐn)?shù)據(jù)完整性的設(shè)備。軟件組件的每個(gè)實(shí)例是“活動(dòng)的”實(shí)例(被允許更新數(shù)據(jù))或“待命的”實(shí)例(不被允許更新數(shù)據(jù))。在任何時(shí)間點(diǎn),環(huán)境不包括多于一個(gè)活動(dòng)實(shí)例,然而,可以存在多于一個(gè)待命實(shí)例。優(yōu)選地,在活動(dòng)實(shí)例完全故障(即,與當(dāng)前活動(dòng)實(shí)例的每個(gè)進(jìn)程相關(guān)聯(lián)的故障)的事件中,單個(gè)待命實(shí)例能夠變?yōu)樾碌幕顒?dòng)實(shí)例。
文檔編號(hào)G06F17/30GK102301368SQ201080005695
公開(kāi)日2011年12月28日 申請(qǐng)日期2010年1月26日 優(yōu)先權(quán)日2009年2月6日
發(fā)明者J. 肖菲爾德 A. 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司