用于對數(shù)據(jù)處理系統(tǒng)的集群中的共享資源執(zhí)行寫入操作的方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本申請一般性地涉及改進的數(shù)據(jù)處理裝置和方法,并且更具體地涉及用于提供高效分布的緩存一致性的機制。
【背景技術(shù)】
[0002]也稱為集群多處理器系統(tǒng)(CMP)或簡稱為“集群”的集群系統(tǒng)是具有在那些數(shù)據(jù)處理系統(tǒng)當(dāng)中共享的硬件和軟件的聯(lián)網(wǎng)數(shù)據(jù)處理系統(tǒng)(或“節(jié)點”)的集合,通常(但不必然)被配置為提供高度可用和高度可擴展的應(yīng)用服務(wù)。集群系統(tǒng)被頻繁地實施以實現(xiàn)高可用性,作為對用于任務(wù)關(guān)鍵的應(yīng)用(諸如數(shù)據(jù)中心、飛機控制等)的容錯性的替代。容錯性數(shù)據(jù)處理系統(tǒng)依賴于專用硬件來檢測硬件故障,并且切換到冗余硬件組件,不論該組件是否是處理器、存儲器板、硬盤驅(qū)動器、適配器、電源等。盡管提供了無縫切換和不中斷的性能,但是容錯性系統(tǒng)由于需要冗余硬件而是昂貴的,并且無法解決軟件錯誤一數(shù)據(jù)處理系統(tǒng)失效的更常見的源。
[0003]高可用性能夠通過使用準許資源在全系統(tǒng)被共享的軟件來在利用標準硬件實施的集群中被實現(xiàn)。當(dāng)節(jié)點、組件或應(yīng)用失效時,該軟件快速建立對期望資源的替代路徑。重建期望資源的可用性所需要的短暫中斷在許多情形中是可接受的。硬件成本顯著小于容錯性系統(tǒng),并且備用設(shè)施可以在正常操作期間被使用。
[0004]集群的節(jié)點共享該集群的資源,包括文件、數(shù)據(jù)結(jié)構(gòu)、存儲設(shè)備等。如此,集群的各種節(jié)點每個都可以嘗試從/向這些共享資源讀取和寫入數(shù)據(jù)。因此,通常實施了用于控制讀取和寫入以確保共享資源的準確性的機制。
【發(fā)明內(nèi)容】
[0005]在一個說明性實施例中,提供了一種在包括處理器和存儲器的數(shù)據(jù)處理系統(tǒng)中的方法,該方法用于對數(shù)據(jù)處理系統(tǒng)的集群中的共享資源執(zhí)行寫入操作。該方法包括:由數(shù)據(jù)處理系統(tǒng)來確定共享資源的本地緩存的副本是否存在于數(shù)據(jù)處理系統(tǒng)的本地緩存存儲器中。該方法進一步包括:響應(yīng)于共享資源的本地緩存的副本存在于本地緩存存儲器中的確定,確定共享資源的本地緩存的副本是否是共享資源的最新版本。此外,該方法包括,響應(yīng)于確定共享資源的該本地緩存的副本是共享資源的最新版本:對共享資源的本地緩存的副本執(zhí)行寫入操作,以生成共享資源的更新的本地緩存的副本;以及向集群的其他數(shù)據(jù)處理系統(tǒng)傳輸集群事件通知,該集群事件通知指示共享資源被寫入并且標識集群中的哪個數(shù)據(jù)處理系統(tǒng)執(zhí)行了該寫入操作。集群事件通知被記錄在與其他數(shù)據(jù)處理系統(tǒng)相關(guān)聯(lián)的至少一個改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)中。
[0006]在其他說明性實施例中,提供了一種計算機程序產(chǎn)品,包括具有計算機可讀程序的計算機可用或可讀介質(zhì)。該計算機可讀程序在計算設(shè)備上執(zhí)行時,使得該計算設(shè)備執(zhí)行上面關(guān)于方法說明性實施例所概述的操作中的各種操作和組合。
[0007]在又另一說明性實施例中,提供了一種系統(tǒng)/裝置。該系統(tǒng)/裝置可以包括一個或多個處理器以及耦合到該一個或多個處理器的存儲器。該存儲器可以包括指令,這些指令當(dāng)由該一個或多個處理器執(zhí)行時,使得該一個或多個處理器執(zhí)行上面關(guān)于方法說明性實施例所概述的操作中的各種操作和組合。
[0008]本發(fā)明的這些和其他特征和優(yōu)點在本發(fā)明的示例實施例的以下詳細描述中被描述,或者鑒于本發(fā)明的示例實施例的以下詳細描述而對于本領(lǐng)域的普通技術(shù)人員而言將變得明顯。
【附圖說明】
[0009]當(dāng)結(jié)合附圖閱讀時,通過參考以下說明性實施例的詳細描述,將最好地理解本發(fā)明及其使用的優(yōu)選模式以及其他目標和優(yōu)點,其中:
[0010]圖1是根據(jù)一個實施例的可以配置為集群系統(tǒng)的示例性數(shù)據(jù)處理環(huán)境的高層級框圖;
[0011]圖2描繪了根據(jù)一個實施例的存儲集群配置數(shù)據(jù)庫的可信數(shù)據(jù)存儲設(shè)備;
[0012]圖3圖示了根據(jù)一個實施例的示例性集群配置數(shù)據(jù)庫;
[0013]圖4是圖示了根據(jù)一個說明性實施例的用于執(zhí)行共享資源和訪問通知的全集群鎖定的操作的示例框圖;
[0014]圖5是圖示了根據(jù)一個說明性實施例的已經(jīng)具有對共享資源的鎖定的用于訪問共享資源的操作的示例框圖;
[0015]圖6是根據(jù)一個說明性實施例的改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)的示例圖;
[0016]圖7是概述了根據(jù)一個說明性實施例的由集群的節(jié)點對共享資源執(zhí)行讀取/寫入操作的示例操作的流程圖;以及
[0017]圖8是概述了根據(jù)一個說明性實施例的用于對集群的節(jié)點執(zhí)行沖刷操作的示例操作的流程圖。
【具體實施方式】
[0018]說明性實施例提供了用于提供高效分布的緩存一致性的機制。特別地,說明性實施例的機制解決了當(dāng)對共享資源的寫入被緩存在諸如集群的節(jié)點組中的節(jié)點的本地緩存處時的緩存一致性。因為許多基于共享資源系統(tǒng),諸如集群計算系統(tǒng),允許個人計算設(shè)備、處理器等(即節(jié)點)在作為同步操作的一部分而將它們的寫入沖刷至集中式共享資源之前,將這些寫入緩存到本地緩存中的共享資源,對相同共享資源的讀取可能變得陳舊,即可能指向共享資源的過期版本。例如,第一節(jié)點A可以執(zhí)行對集群的共享資源R的多次寫入,并且將這些寫入緩存在與節(jié)點A相關(guān)聯(lián)的本地緩存中。同時,在對共享資源R的寫入在共享資源R的集中式副本處被提交之前,即在節(jié)點A處的寫入的緩存與集中式共享資源R之間執(zhí)行的同步操作之前,節(jié)點B可能希望讀取共享資源R。結(jié)果,集群的節(jié)點可能具有共享資源R的非一致視圖。
[0019]說明性實施例提供了用于確保在這樣的分布式緩存架構(gòu)中的一致性的機制。此夕卜,說明性實施例提供了高效的機制,這些高效的機制用于通過提供利用小的大小的事件通知的通知機制來確保這樣的一致性,當(dāng)任何一個節(jié)點獲得對共享資源的全集群鎖定并且執(zhí)行對該共享資源的寫入時,這些小的大小的事件通知在集群的節(jié)點之間被傳達。由獲得鎖定并且執(zhí)行寫入操作的節(jié)點傳輸?shù)男〉拇笮〉氖录ㄖ?小的固定大小的有效載荷,該有效載荷指定改變的資源的標識;執(zhí)行改變的節(jié)點的標識;以及陳舊指示符,例如時間戳、版本號等。該事件通知由源節(jié)點傳輸給集群中的其他節(jié)點中的每個節(jié)點,或者傳輸給集中式集群控制節(jié)點。
[0020]該事件通知被存儲在用于識別哪些資源由集群中的節(jié)點訪問以及哪些節(jié)點正訪問這些資源的改變?nèi)罩局???梢源嬖诖鎯υ诩惺轿恢弥械膯蝹€改變?nèi)罩?,該集中式位置維護用于所有共享資源的來自集群的各種節(jié)點的事件通知,或者可以存在在這些節(jié)點中的每個節(jié)點中維護的單獨的改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)。此外,可以存在在這些節(jié)點中的每個節(jié)點中或者在集中式位置中維護的多個改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu),諸如一個用于每個用戶、一個用于每個目錄、一個用于每個共享資源等。
[0021]事件通知由節(jié)點響應(yīng)于由節(jié)點對共享資源執(zhí)行的每次寫入操作而被發(fā)送,其中對共享資源的本地緩存副本本地執(zhí)行寫入操作。因此,多個條目可以被存儲在用于對共享資源執(zhí)行的一系列寫入操作的(多個)改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)中。改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)中的事件通知條目中的陳舊指示符指示最近的事件通知條目。事件通知條目進一步指定哪個節(jié)點負責(zé)對在事件通知條目中標識的共享資源的最新寫入。
[0022]當(dāng)節(jié)點嘗試打開諸如經(jīng)由例如文件打開過程對用于讀取或?qū)懭氩僮鞯墓蚕碣Y源的路徑時,該節(jié)點首先嘗試獲得對該共享資源的全集群鎖定。如果另一節(jié)點當(dāng)前具有對該共享資源的全集群鎖定,則本節(jié)點不能獲得鎖定,并且將僅圍繞鎖定打轉(zhuǎn)(spin on thelock)以等待鎖定被釋放。假設(shè)全集群的鎖定是可用的,并且不由另一節(jié)點持有,那么該節(jié)點取決于特定實施例來檢查(多個)集中式改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)或者(多個)其自己的本地改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu),并且搜索改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu),以尋找具有如下共享資源標識符的條目,該共享資源標識符與該節(jié)點正嘗試通過打開該路徑來訪問的共享資源的共享資源標識符相匹配。如果共享資源標識符沒有存在于改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)中,或者條目被發(fā)布到改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu),指示先前的改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)由于對共享資源的緩存的寫入的同步而應(yīng)當(dāng)被忽略,那么該節(jié)點可以獲得對該共享資源的全集群鎖定,獲得并且存儲來自其源位置的共享資源的緩存副本,并且執(zhí)行其對共享資源的其本地緩存副本的讀取/寫入操作。
[0023]如果共享資源標識符存在于改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)中,則可以執(zhí)行各種操作以促進該節(jié)點對共享資源的訪問,同時維持分布式緩存環(huán)境中的共享資源狀態(tài)的一致性。在改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)的最近的匹配條目中所標識的節(jié)點被識別為最后訪問該共享資源的節(jié)點,并且因此,它在其本地緩存中具有最新的版本。在第一實施例中,希望訪問共享資源的節(jié)點發(fā)送指令節(jié)點處理共享資源的最近版本以執(zhí)行同步操作(即強制該同步操作)的控制消息。這樣的同步操作可以包括執(zhí)行卸載操作,例如,強制節(jié)點的本地緩存的沖刷,使得緩存的寫入被提交到共享資源等。在另一說明性實施例中,節(jié)點希望對共享資源執(zhí)行的訪問操作可由處理共享資源的最新版本的節(jié)點來遠程地執(zhí)行。也就是說,I/O訪問請求可以被發(fā)送到處理共享資源的最新版本的節(jié)點,并且該節(jié)點可以充當(dāng)替代物并且對共享資源的其自己的本地緩存的副本執(zhí)行操作。這可以通過將調(diào)用請求連接到套接字來實現(xiàn),其中該套接字的另一側(cè)修補該連接并且模擬原始調(diào)用。
[0024]在任何時間,處理共享資源的最新版本的節(jié)點可以將其緩存沖刷至共享資源的中心位置。在沖刷緩存中,共享資源的本地緩存的副本復(fù)制覆蓋或者以其他方式替換如今過時的集中式共享資源。
[0025]說明性實施例具有相對于在刷新分布式緩存的領(lǐng)域中的已有技術(shù)的顯著優(yōu)點。當(dāng)前的解決方案使本地緩存中的陳舊條目(例如,資源的本地副本)超時或者連續(xù)輪詢對共享資源屬性的改變。在陳舊條目超時的情況下,在某個預(yù)定時間量之后,緩存條目被自動宣告陳舊并丟棄。結(jié)果,下一次訪問必須從源處取回資源的刷新副本。這種機制本身不能保證節(jié)點將總是對資源的當(dāng)前副本進行操作。此外,這種解決方案可能生成無關(guān)的網(wǎng)絡(luò)流量,因為當(dāng)緩存條目過期時,不論資源是否已經(jīng)改變,其都將盲目地重新取回資源。
[0026]關(guān)于輪詢解決方案,取決于實施方式,將查詢以常規(guī)間隔發(fā)送到資源的源,例如,每秒一次、每分鐘一次等,詢問資源是否已經(jīng)被更新。這個查詢能夠采取許多形式,包括將當(dāng)前資源狀態(tài)與最后已知修改日期作比較、與最后已知校驗和作比較等。如果查詢確定了資源已經(jīng)被修改,則該節(jié)點將取回資源的刷新副本用于其緩存。這是比超時解決方案更好的解決方案,因為僅重新取回已經(jīng)修改的資源。然而,存在的缺點在于如果其被修改,則資源總是被重新取回,而不論該資源是否將被使用。這種解決方案還留下了輪詢之間的窗口,在該窗口處,資源仍然能夠變得陳舊,并且因此利用這種解決方案沒有保證一致性。
[0027]說明性實施例消除了對檢查資源是否已經(jīng)被更新的需要,