專利名稱:群集客戶端故障轉(zhuǎn)移的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及群集客戶端故障轉(zhuǎn)移。
背景技術(shù):
群集環(huán)境(例如,其中工作負(fù)載跨多個機(jī)器分布的環(huán)境)常被用來向客戶端提供故障轉(zhuǎn)移(failover)和高信息可用性。群集環(huán)境允許客戶端經(jīng)由作為該環(huán)境一部分的一個或多個節(jié)點來訪問資源。群集環(huán)境可擔(dān)當(dāng)客戶端、服務(wù)器、或客戶端和服務(wù)器兩者。在客戶端群集服務(wù)器中,應(yīng)用可駐留于構(gòu)成該群集的任何節(jié)點上。應(yīng)用可發(fā)出對本地存儲在客戶端群集內(nèi)的或遠(yuǎn)程存儲的資源的請求。如果該節(jié)點上出現(xiàn)錯誤,客戶端故障轉(zhuǎn)移(或遷移) 到群集中的不同節(jié)點。然而,當(dāng)客戶端再次請求在錯誤時它正在工作的資源時,服務(wù)器會為該應(yīng)用所駐留的先前的客戶端節(jié)點而阻隔(fence)或鎖定該資源。
各實施例正是對于這些和其它考慮事項而做出的。而且,盡管討論了相對具體的問題,但是應(yīng)當(dāng)理解,各實施例不應(yīng)被限于解決本背景技術(shù)中所標(biāo)識的具體問題。 發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容來以簡化形式介紹將在以下詳細(xì)描述部分中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。
此處公開了在應(yīng)用遷移到群集客戶機(jī)環(huán)境中的新節(jié)點之后向該應(yīng)用或進(jìn)程提供對資源的連續(xù)訪問的系統(tǒng)和方法。駐留在客戶端群集中的一節(jié)點上的應(yīng)用或進(jìn)程向服務(wù)器發(fā)送訪問資源的請求。在實施例中,唯一應(yīng)用實例標(biāo)識符被用來標(biāo)識請求資源的應(yīng)用。唯一應(yīng)用實例標(biāo)識符可與請求一起被提供。當(dāng)客戶端訪問資源時,應(yīng)用實例標(biāo)識符與所請求的資源相關(guān)聯(lián)。
在該應(yīng)用或進(jìn)程完成其對該資源的操作之前,在該應(yīng)用正確釋放該資源之前,該群集環(huán)境中該客戶端所駐留的節(jié)點可能經(jīng)歷導(dǎo)致它失敗或以其它方式丟失對該資源的訪問的錯誤。在這種情況下,對于先前的客戶端的請求,該資源可能在該服務(wù)器上保持在阻隔或鎖定狀態(tài)中。在故障轉(zhuǎn)移到客戶端群集中的不同節(jié)點之后,新客戶端節(jié)點上的應(yīng)用可重新建立與管理該資源的服務(wù)器的連接,并作出對該應(yīng)用先前在錯誤時曾訪問的資源的第二請求。該第二請求可包括曾與第一請求一起發(fā)送的應(yīng)用實例標(biāo)識符。盡管對該資源的第二請求可從群集環(huán)境中的不同節(jié)點接收,然而該應(yīng)用實例標(biāo)識符允許管理該請求的服務(wù)器確定該第二請求屬于先前已鎖定該資源的同一應(yīng)用或進(jìn)程。這樣做允許服務(wù)器使該資源無效 (invalidate)并準(zhǔn)許客戶端訪問該資源的第二請求,同時確保不出現(xiàn)沖突情形。
實施例可被實現(xiàn)為計算機(jī)進(jìn)程、計算系統(tǒng)、或者諸如計算機(jī)程序產(chǎn)品或計算機(jī)可讀介質(zhì)等制品。計算機(jī)程序產(chǎn)品可以是計算機(jī)系統(tǒng)可讀并對用于執(zhí)行計算機(jī)過程的指令的計算機(jī)程序編碼的計算機(jī)存儲介質(zhì)。計算機(jī)程序產(chǎn)品還可以是計算系統(tǒng)可讀并對用于執(zhí)行計算機(jī)過程的指令的計算機(jī)程序編碼的載體上的傳播信號。
參考以下附圖描述非限制性和非窮盡的實施例。
圖I示出了可用于實現(xiàn)此處描述的實施例的系統(tǒng)。
圖2是示出可用于實現(xiàn)此處公開的實施例的軟件環(huán)境的框圖。
圖3是在群集環(huán)境中客戶端可執(zhí)行以獲得的資源的連續(xù)訪問的方法的實施例。
圖4是由群集環(huán)境中的節(jié)點執(zhí)行以提供對資源的連續(xù)訪問的方法的實施例。
圖5示出了適于實現(xiàn)實施例的計算環(huán)境的框圖。
具體實施方式
以下將參考形成本發(fā)明一部分并示出各具體示例性實施例的附圖更詳盡地描述各個實施例。然而實施例被實現(xiàn)為許多不同的形式并且不應(yīng)將其解釋為限制在此處描述的實施例;相反地,提供這些實施例以使得本公開變得透徹和完整,并且將這些實施例的范圍完全傳達(dá)給本領(lǐng)域普通技術(shù)人員。因此,這些實施例可采用硬件實現(xiàn)形式、全軟件實現(xiàn)形式或者結(jié)合軟件和硬件方面的實現(xiàn)形式。因此,以下詳細(xì)描述并非是局限性的。
本公開的實施例涉及提供群集客戶端故障轉(zhuǎn)移機(jī)制,該機(jī)制允許請求者在故障轉(zhuǎn)移事件之后重新獲得對資源的訪問。在實施例中,請求者可以是進(jìn)程、應(yīng)用、或應(yīng)用的一個或多個子進(jìn)程。資源可以是計算環(huán)境中的文件、對象、數(shù)據(jù)、或任何其他類型的資源。在實施例中,資源可駐留于獨(dú)立服務(wù)器上,或者資源可駐留于群集環(huán)境中。在此處公開的實施例中,群集環(huán)境可包括一個或多個節(jié)點(例如,客戶端和/或服務(wù)器設(shè)備)。
在一示例實施例中,駐留在群集環(huán)境中的節(jié)點上的應(yīng)用可請求對特定資源的訪問。在實施例中,該資源可被存儲在本地(例如,在該客戶端節(jié)點上)、在遠(yuǎn)程設(shè)備中(例如, 遠(yuǎn)程服務(wù)器或客戶端群集環(huán)境中的不同節(jié)點)、或在與該客戶端群集環(huán)境不同的群集環(huán)境中(例如,包含多個節(jié)點的環(huán)境)。例如,在實施例中,群集環(huán)境可以是客戶端或服務(wù)器群集; 然而,本領(lǐng)域的技術(shù)人員將理解,此處公開的系統(tǒng)和方法可用于任何其他類型的環(huán)境中,諸如但不限于虛擬網(wǎng)絡(luò)。
在這種的環(huán)境中,可在各客戶端和應(yīng)用之間共享資源。當(dāng)應(yīng)用訪問資源時,該資源可被阻隔或鎖定,由此禁止其他應(yīng)用訪問該資源,直到該進(jìn)行訪問的應(yīng)用釋放該資源。阻隔或鎖定資源可被用來保護(hù)以免于沖突,即,保護(hù)以避免在該進(jìn)行訪問的應(yīng)用已對該資源執(zhí)行其操作之前另一應(yīng)用對該資源的修改。然而,如果群集客戶端環(huán)境中的節(jié)點失敗,則正訪問該資源的應(yīng)用可能不會正確地從阻隔或鎖定狀態(tài)中釋放該資源。例如,在該應(yīng)用完成其操作并正確釋放該資源之前,代表該應(yīng)用訪問該資源的客戶端節(jié)點可能會丟失網(wǎng)絡(luò)連接、 可能會崩潰、或可能會以其他方式丟失對該資源的訪問。從而,該資源可保留在該資源對其他客戶端或應(yīng)用不可用的狀態(tài)中??刹捎脧淖韪艋蜴i定狀態(tài)自動釋放資源的機(jī)制,由此避免該資源被永久鎖定在外。然而,這種機(jī)制在釋放被阻隔或鎖定的資源之前通常等待一段時間。
在一些情況下,當(dāng)該應(yīng)用執(zhí)行故障轉(zhuǎn)移以從失敗的客戶端節(jié)點遷移到客戶端群集中的一不同客戶端節(jié)點時,該應(yīng)用可嘗試經(jīng)由該不同客戶端節(jié)點來重新建立它與服務(wù)器的之前連接并恢復(fù)它對該資源的操作。然而,因為該資源沒有被先前代表該應(yīng)用訪問該資源的失敗的客戶端節(jié)點正確地釋放,所以由于該錯誤,先前訪問該資源的應(yīng)用可能不能夠恢復(fù)它對該資源的訪問,直到服務(wù)器將該資源從其阻隔或鎖定狀態(tài)釋放。然而,因為現(xiàn)在一不同節(jié)點正在嘗試代表該應(yīng)用訪問該資源,所以服務(wù)器可能不能夠?qū)⒃搼?yīng)用標(biāo)識為先前對該資源建立鎖定的同一應(yīng)用。然而,因為同一應(yīng)用正在嘗試訪問該資源,所以不會出現(xiàn)沖突情形。在這種情形下,等待服務(wù)器釋放對該資源的先前鎖定可能會對該應(yīng)用導(dǎo)致無法接受的延遲。
如上所述,因為該應(yīng)用正在群集客戶端環(huán)境中操作,所以當(dāng)該應(yīng)用第二次請求訪問該資源時,訪問該資源的請求可能從一不同位置(諸如,該群集客戶端環(huán)境中的一不同節(jié)點)作出。從而,第二請求可能來自一位置或不同的IP地址。因為該請求可從一不同位置作出,所以服務(wù)器可能難以確保嘗試再次訪問該資源的客戶端或應(yīng)用實際上是先前訪問該資源的同一客戶端。此處公開的系統(tǒng)和方法提供了標(biāo)識其中同一應(yīng)用正嘗試訪問資源的情形的機(jī)制,由此避免了這種延遲并向應(yīng)用提供了對該資源的連續(xù)訪問。
圖I示出了可用于實現(xiàn)此處公開的一些實施例的系統(tǒng)100。系統(tǒng)100包括客戶端群集102和服務(wù)器群集106??蛻舳巳杭ǘ鄠€節(jié)點,諸如客戶端102A和102B??蛻舳?102A和102B可以是駐留于客戶端群集102中的設(shè)備或應(yīng)用??蛻舳巳杭?02可通過網(wǎng)絡(luò) 108與服務(wù)器群集106通信。在實施例中,網(wǎng)絡(luò)108可以是因特網(wǎng)、WAN、LAN、或本領(lǐng)域已知的任何其他類型的網(wǎng)絡(luò)。服務(wù)器群集106存儲由客戶端群集102上的應(yīng)用(例如,駐留在客戶端102A或客戶端102B上的應(yīng)用)訪問的資源。在實施例中,客戶端(例如,客戶端102A) 可建立與群集106的會話以代表駐留在該客戶端上的應(yīng)用來訪問群集106上的資源。盡管在圖I中客戶端群集102只包括兩個客戶端(例如,客戶端102A和客戶端102B),然而本領(lǐng)域的技術(shù)人員將理解,客戶端群集102中可包括任何數(shù)量的客戶端。
如圖I所示,服務(wù)器群集106包括服務(wù)器106A、106B和106C,這些服務(wù)器提供對存儲在群集106上的信息的高可用性和冗余性二者。在實施例中,群集106可以具有文件系統(tǒng)、數(shù)據(jù)庫、或者由客戶端102和104訪問的其他信息。盡管圖I中示出了 3個服務(wù)器,但是在其他實施例中,群集106可以包括3個以上服務(wù)器或3個以下服務(wù)器。而且,盡管此處描述的實施例涉及客戶端與作為服務(wù)器群集的一部分的服務(wù)器進(jìn)行通信,然而本領(lǐng)域的技術(shù)人員將此處公開的實施例還可使用獨(dú)立服務(wù)器來執(zhí)行。
在實施例中,客戶端群集102提供在第一客戶端節(jié)點上出現(xiàn)錯誤或失敗的情況下允許客戶端從第一客戶端節(jié)點向第二客戶端節(jié)點遷移的故障轉(zhuǎn)移機(jī)制。本領(lǐng)域技術(shù)人員將理解,任何類型的故障轉(zhuǎn)移機(jī)制可以與此處公開的系統(tǒng)和方法一起使用。此處公開的方法和系統(tǒng)可用于避免當(dāng)在故障轉(zhuǎn)移的情況下應(yīng)用嘗試再次獲得對從一個客戶端遷移到另一客戶端的資源的訪問時避免過度的延遲。在實施例中,標(biāo)識訪問該資源的應(yīng)用的應(yīng)用實例標(biāo)識符可與該資源相關(guān)聯(lián)。應(yīng)用實例標(biāo)識符可以是與應(yīng)用、應(yīng)用所執(zhí)行的動作、或應(yīng)用的子進(jìn)程相關(guān)聯(lián)的全局唯一標(biāo)識符(GUID)。例如,在一個實施例中,應(yīng)用可與作為GUID的應(yīng)用實例標(biāo)識符相關(guān)聯(lián)。在另一實施例中,應(yīng)用實例標(biāo)識符可與應(yīng)用所執(zhí)行的特定操作或動作相關(guān)聯(lián)。例如,如果該應(yīng)用發(fā)出對兩個不同文件的兩個不同的打開請求,則每個打開請求可具有其自己的應(yīng)用實例標(biāo)識符。在又一實施例中,應(yīng)用實例標(biāo)識符可與應(yīng)用的一個或多個子進(jìn)程相關(guān)聯(lián)。從此處公開的實施例中,對本領(lǐng)域的技術(shù)人員而言顯而易見地,將應(yīng)用的應(yīng)用實例標(biāo)識符與其一個或多個子進(jìn)程相關(guān)聯(lián)將允許該子進(jìn)程在屬于該應(yīng)用的資源被置于鎖定或阻隔狀態(tài)時訪問該資源。在實施例中,該應(yīng)用實例標(biāo)識符可由該客戶端在發(fā)送對資源的請求時或在發(fā)送對資源的請求之后發(fā)送。
根據(jù)另一實施例,除了存儲由作為客戶端群集102的一部分的客戶端訪問的信息之外,服務(wù)器群集106還提供允許在服務(wù)器節(jié)點故障轉(zhuǎn)移的情況下對資源的連續(xù)訪問的故障轉(zhuǎn)移機(jī)制。同樣,本領(lǐng)域技術(shù)人員將理解,任何類型的故障轉(zhuǎn)移機(jī)制可以與此處公開的系統(tǒng)和方法一起使用。
在實施例中,當(dāng)客戶端代表應(yīng)用請求訪問資源時,該應(yīng)用的應(yīng)用實例標(biāo)識符與該請求一起被發(fā)送。接收該請求的服務(wù)器可將該應(yīng)用實例標(biāo)識符與該資源相關(guān)聯(lián)。例如,該服務(wù)器群集可將該應(yīng)用實例標(biāo)識符按照應(yīng)用實例標(biāo)識符與資源相關(guān)聯(lián)的方式存儲在位于在服務(wù)器群集106中的一個或多個節(jié)點(例如,諸如服務(wù)器106AU06B和/或106C等服務(wù)器)上的表或高速緩存中。在該客戶端對該資源完成之前,該客戶端可能經(jīng)歷將迫使它丟失與該資源的連接的錯誤。例如,寄宿(host)該應(yīng)用或代表該應(yīng)用執(zhí)行請求或操作的客戶端可能丟失它對服務(wù)器群集的網(wǎng)絡(luò)連接,該客戶端可能崩潰、或可能出現(xiàn)干擾該應(yīng)用對該資源的使用的任何其他類型的錯誤。在經(jīng)歷該錯誤之后,該應(yīng)用可故障轉(zhuǎn)移到客戶端群集102 中的新客戶端節(jié)點。該新客戶端節(jié)點可重新連接到該服務(wù)器群集并代表該應(yīng)用發(fā)送訪問該資源的第二請求。在實施例中,該客戶端可重新連接到服務(wù)器群集106中的同一節(jié)點或不同節(jié)點。訪問該資源的第二請求可包括該應(yīng)用的應(yīng)用實例標(biāo)識符。接收到第二請求之后, 服務(wù)器(例如,服務(wù)器群集106的服務(wù)器106A)將第二請求的應(yīng)用實例標(biāo)識符與和該資源相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符進(jìn)行比較。如果這兩個應(yīng)用實例標(biāo)識符匹配,則該服務(wù)器群集使該資源無效。在實施例中,使該資源無效可包括關(guān)閉文件、除去對資源的鎖定、或以其他方式采取釋放該資源以供使用的任何動作。該服務(wù)器節(jié)點此時可準(zhǔn)許該應(yīng)用對訪問該資源的第二請求。如果第二節(jié)點的應(yīng)用實例標(biāo)識符與和該資源相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符不匹配,則該服務(wù)器將不允許對該資源的訪問,直到該資源被釋放。
為了示出一個實施例,客戶端群集102中的客戶端102A上的請求者(例如,進(jìn)程、 應(yīng)用等)可請求客戶端102A建立與服務(wù)器群集106的服務(wù)器的會話。例如,客戶端102A可建立與服務(wù)器106A的會話以訪問服務(wù)器106A上所存儲的數(shù)據(jù)庫,或訪問作為服務(wù)器106A 可訪問其中的數(shù)據(jù)庫的服務(wù)器群集106的一部分的數(shù)據(jù)庫??蛻舳?02A隨后代表該請求者發(fā)出對資源的請求。標(biāo)識該請求者的應(yīng)用實例標(biāo)識符與該請求相關(guān)聯(lián)。在實施例中,該請求可包括該應(yīng)用實例標(biāo)識符,或者該應(yīng)用實例標(biāo)識符可按照服務(wù)器106A可確定該應(yīng)用實例標(biāo)識符與該請求相關(guān)聯(lián)的方式被分開發(fā)送。在又一實施例中,服務(wù)器106A或服務(wù)器群集106可能已經(jīng)具有將該應(yīng)用實例標(biāo)識符與該請求相關(guān)聯(lián)所需的信息,而無需隨請求接收該應(yīng)用實例標(biāo)識符。服務(wù)器106A然后準(zhǔn)許該請求者對該資源的訪問,由此允許該請求者對該資源執(zhí)行操作或以其他方式訪問該資源。當(dāng)準(zhǔn)許該請求者對該資源的訪問時,服務(wù)器 106A按照指示該請求者當(dāng)前正在訪問該資源的方式將應(yīng)用實例標(biāo)識符與該資源相關(guān)聯(lián)。該資源隨后可被阻隔或鎖定,因此其他客戶端或應(yīng)用不能訪問或修改該資源,直到客戶端102 已完成其操作。
在該請求者完成它對該資源的操作之前,導(dǎo)致客戶端102A失敗或以其他方式丟失它對該資源的訪問的錯誤發(fā)生。因為客戶端請求者尚未完成其操作,所以它還沒有釋放對該資源的控制。從而,該資源可保留在阻隔或鎖定狀態(tài)中。請求者或客戶端群集102可采用故障轉(zhuǎn)移機(jī)制來將請求者從客戶端102A遷移到客戶端102B。一旦故障轉(zhuǎn)移操作完成之后,客戶端102B可代表該請求者重新連接到服務(wù)器群集106??蛻舳?02B可重新連接到服務(wù)器106A或建立與服務(wù)器群集106中的任何其他服務(wù)器(例如,服務(wù)器106B或106C) 的新連接。在一示例情形中,客戶端102B重新連接到服務(wù)器106A。在重新連接之后,客戶端102B可發(fā)送代表該請求者訪問該資源的第二請求。如同前面指出的,因為請求者沒有釋放對該資源的控制,所以該資源仍處于鎖定或阻隔狀態(tài)中。為了訪問該資源,而不等待服務(wù)器例如通過超時操作來自動改變該資源的狀態(tài),請求者可再次將它的應(yīng)用實例標(biāo)識符與第二請求一起提供。服務(wù)器106A將與第二請求一起提供的應(yīng)用實例標(biāo)識符與和該資源相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符進(jìn)行比較。例如,通過將所接收的或以其他方式與該第二請求相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符和服務(wù)器106A將其與該資源相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符進(jìn)行比較。所關(guān)聯(lián)的應(yīng)用實例標(biāo)識符可被存儲在服務(wù)器106A的本地高速緩存或表中,或可被存儲在服務(wù)器群集106中的別處。如果存儲在高速緩存中的應(yīng)用實例標(biāo)識符與和該資源相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符相匹配,則服務(wù)器106A使該資源無效或以其他方式釋放該資源,并允許客戶端 102B代表該請求者再次訪問該資源而不等待該資源被某種其他機(jī)制釋放(例如,通過阻隔或鎖定狀態(tài)超時)。如果所述應(yīng)用實例標(biāo)識符不相匹配,則客戶端102B在訪問該資源之前將必須等待該資源變?yōu)楸会尫拧?br>
盡管在上述示例中客戶端102B重新連接到同一服務(wù)器106A,然而在其他實施例中,該客戶端連接到服務(wù)器群集106中的另一節(jié)點也是可能的。例如,客戶端102B可重新連接到服務(wù)器106B并提交第二請求以代表該請求者重新獲得對該資源的訪問。該第二請求可再次與該請求者的應(yīng)用實例標(biāo)識符相關(guān)聯(lián),例如,通過被包括在該第二請求中或以其他方式與該第二請求相關(guān)聯(lián)。在本示例中,服務(wù)器106B可能沒有將與該資源相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符存儲在其本地高速緩存中,因為該資源的原始訪問是在服務(wù)器106A上的。在這種情形下,服務(wù)器106B可聯(lián)系服務(wù)器群集106中的其他服務(wù)器來確定它們是否具有與該資源相關(guān)聯(lián)的應(yīng)用標(biāo)識符。如果與該資源相關(guān)聯(lián)的應(yīng)用標(biāo)識符被存儲在該服務(wù)器群集中的一不同節(jié)點(例如,服務(wù)器106A)上,則將該服務(wù)器群集中的該另一節(jié)點上的應(yīng)用實例標(biāo)識符與和該第二請求一起提供的應(yīng)用實例標(biāo)識符進(jìn)行比較。如果它們匹配,則服務(wù)器106B可向服務(wù)器106A發(fā)送請求以使該資源無效,而隨后服務(wù)器106B可允許該請求者(現(xiàn)在在客戶端 102B上)訪問該資源。如果所述應(yīng)用實例標(biāo)識符不相匹配,則客戶端102B將必須等待該資源被釋放。
基于上述示例,本領(lǐng)域的技術(shù)人員將理解,客戶端群集102中的任何客戶端節(jié)點可為客戶端群集102中的請求者請求訪問并隨后向該請求者提供訪問。而且,服務(wù)器群集中的任何服務(wù)器節(jié)點(例如,服務(wù)器群集106中的任何服務(wù)器)能夠確定請求者先前是否具有對該資源的訪問權(quán),即使該訪問發(fā)生在該服務(wù)器群集中的不同服務(wù)器節(jié)點上。本領(lǐng)域的技術(shù)人員將理解,下面的描述僅是圖I中示出的實施例可如何操作的一個示例,并且存在其他實施例。例如,客戶端節(jié)點可執(zhí)行此處描述的實施例以向請求者(例如,應(yīng)用或進(jìn)程)提供對駐留于群集環(huán)境中(例如,在構(gòu)成該客戶端群集的同一或不同客戶端群集節(jié)點上)的資源的連續(xù)訪問,而不是訪問遠(yuǎn)程服務(wù)器或服務(wù)器群集上的資源。如下面更詳細(xì)地描述的,此處描述的實施例可以涉及各種不同的步驟或操作。而且,此處描述的實施例可使用任何合適的軟件或硬件組件或模塊來實現(xiàn)的。
現(xiàn)在轉(zhuǎn)向圖2,圖2示出了軟件環(huán)境200的框圖,軟件環(huán)境200示出了具有多個客戶端節(jié)點(例如,客戶端202和204)的客戶端節(jié)點群集201和具有多個服務(wù)器節(jié)點(例如,節(jié)點1208和節(jié)點2216)的服務(wù)器節(jié)點群集206。在實施例中,客戶端202代表請求者請求訪問服務(wù)器群集環(huán)境206中的資源(諸如資源226)。客戶端節(jié)點群集201可以是諸如客戶端群集102 (圖I)的客戶端群集。盡管未示出,然而客戶端群集可包含超過兩個節(jié)點。服務(wù)器節(jié)點群集206可以是諸如服務(wù)器群集106 (圖I)的服務(wù)器群集,或者可以是任何其他類型的群集環(huán)境,諸如但不限于虛擬網(wǎng)絡(luò)。資源226可被存儲在作為群集環(huán)境的一部分的數(shù)據(jù)存儲228中。盡管未示出,然而在替代實施例中,數(shù)據(jù)存儲228可以不是該群集環(huán)境的一部分,而是可以通過網(wǎng)絡(luò)連接到該群集環(huán)境。這種網(wǎng)絡(luò)的示例包括但不限于因特網(wǎng)、WAN、 LAN、或本領(lǐng)域已知的任何其他類型的網(wǎng)絡(luò)。在另外的實施例中,數(shù)據(jù)存儲可以是作為群集 206的一部分的節(jié)點(例如,設(shè)備)的一部分。
服務(wù)器節(jié)點群集206可包括一個或多個節(jié)點,諸如節(jié)點1208和節(jié)點2216。盡管圖2中只示出了兩個節(jié)點群集,然而在群集環(huán)境206中可包括任何數(shù)量的節(jié)點群集。在實施例中,節(jié)點群集208和216能夠接收對資源226執(zhí)行操作和/或準(zhǔn)許對資源226的訪問的請求。在實施例中,資源226可以是文件、對象、應(yīng)用、數(shù)據(jù)、或存儲在群集節(jié)點206中的節(jié)點或獨(dú)立服務(wù)器上或可由該節(jié)點或獨(dú)立服務(wù)器訪問的任何其他類型的資源。
在實施例中,客戶端向群集環(huán)境206發(fā)送初始請求222。如圖2中所示,初始請求 222可由客戶端202發(fā)送并由節(jié)點1208接收。然而,在替代實施例中,初始請求222可由客戶端或客戶端群集201中的任何其他客戶端節(jié)點發(fā)送并由節(jié)點2216或服務(wù)器群集206中的任何其他節(jié)點接收。示例請求包括但不限于倉Il建、打開、或以其他方式訪問文件的請求。 請求222可通過網(wǎng)絡(luò)(諸如但不限于因特網(wǎng)、WAN、LAN、或本領(lǐng)域已知的任何其他類型的網(wǎng)絡(luò))從該客戶端傳送到節(jié)點群集。初始請求222可包括訪問諸如資源226之類的資源的請求。在實施例中,請求222還可包括標(biāo)識客戶端202正在代表它作出請求的請求者的應(yīng)用實例標(biāo)識符。在實施例中,初始請求222可由一個或多個消息構(gòu)成。例如,請求222可以是包含請求和應(yīng)用實例標(biāo)識符兩者的單個消息。在另一實施例中,請求222可以是包括一個或多個請求以及一個或多個應(yīng)用實例標(biāo)識符的多個消息。在實施例中,客戶端202可包括應(yīng)用實例高速緩存214,該應(yīng)用實例高速緩存用于存儲和/或生成可與請求222 —起傳送的一個或多個應(yīng)用實例標(biāo)識符。
如圖2中所示,節(jié)點1208可從客戶端202接收請求222和應(yīng)用實例標(biāo)識符。如果所請求的資源226可用(例如,未被另一客戶端或應(yīng)用阻隔或鎖定),節(jié)點I可準(zhǔn)許該客戶端 (例如,客戶端202)的代表正在該客戶端上執(zhí)行的請求者訪問資源226的請求。在準(zhǔn)許對資源226的訪問后,過濾器驅(qū)動器210可通過存儲它從客戶端202接收的應(yīng)用實例標(biāo)識符來分配或以其他方式在客戶端202和資源226之間創(chuàng)建關(guān)聯(lián)。在實施例中,該關(guān)聯(lián)可作為對象被存儲在作為節(jié)點I的一部分的應(yīng)用實例高速緩存212中。盡管所示出的實施例將應(yīng)用實例高速緩存212作為節(jié)點1208的一部分示出,然而在實施例中,應(yīng)用實例高速緩存212 可作為節(jié)點群集206的一部分被存儲在別處。本領(lǐng)域的技術(shù)人員將理解,節(jié)點群集206可包括一個或多個應(yīng)用實例高速緩存,諸如節(jié)點2216上的應(yīng)用實例高速緩存220。在實施例中,當(dāng)存在超過一個應(yīng)用實例高速緩存時,存儲在該多個應(yīng)用實例高速緩存中的數(shù)據(jù)可跨所有應(yīng)用實例高速緩存復(fù)制,或每個應(yīng)用實例高速緩存可存儲分別的數(shù)據(jù)。
在一個實施例中,從客戶端接收的、標(biāo)識請求者(例如,應(yīng)用或進(jìn)程)的應(yīng)用實例標(biāo)識符可被存儲在 _NETWORK_APP_INSTANCE_ECP_CONTEXT 結(jié)構(gòu)中。該 _NETW0RK_APP_ INSTANCE_ECP_CONTEXT結(jié)構(gòu)可被定義如下
typdefstruct_NETWORK_APP_INSTANCE_ECP_CONTEXT{
USHORT Size;
USHORT Reserved;
GUID AppInstanceID;
}_NETWORK_APP_INSTANCE_ECP_CONTEXT,
*PNETWORK_APP_INSTANCE_ECP_CONTEXT;
在這種實施例中,變量size (大小)可存儲與該結(jié)構(gòu)的大小有關(guān)的信息,而變量 AppInstanceID可以是故障轉(zhuǎn)移群集客戶端應(yīng)用(諸如在客戶端202上執(zhí)行的請求者)的唯一應(yīng)用實例標(biāo)識符。在實施例中,_NETWORK_APP_INSTANCE_ECP_CONTEXT或包含請求者的應(yīng)用實例標(biāo)識符的另一對象或變量可被存儲在全局唯一標(biāo)識符(GUID)高速緩存214中。在實施例中,_NETWORK_APP_INSTANCE_ECP_CONTEXT結(jié)構(gòu)可與訪問資源的請求(例如,創(chuàng)建或打開請求)相結(jié)合地被從客戶端發(fā)送到服務(wù)器。在一個實施例中,請求者的應(yīng)用實例標(biāo)識符可被存儲在群集客戶端環(huán)境201中的該請求者正在其上執(zhí)行的客戶端節(jié)點的GUID高速緩存中。在另一實施例中,盡管圖2中未示出,然而客戶端節(jié)點群集201可具有存儲應(yīng)用實例標(biāo)識符的中央儲存庫。在這種實施例中,客戶端節(jié)點群集201中的多個客戶端節(jié)點可訪問該集中式的儲存庫。在又一實施例中,應(yīng)用實例標(biāo)識符可跨多個GUID高速緩存(例如,GUID 高速緩存214和GUID高速緩存216)來存儲。在這種實施例中,客戶端節(jié)點群集201可采用復(fù)制算法來確保多個GUID高速緩存包含相同的應(yīng)用實例標(biāo)識符。
如前所述,當(dāng)客戶端202代表請求者訪問資源226時,該應(yīng)用實例標(biāo)識符可與資源 226相關(guān)聯(lián)。服務(wù)器節(jié)點206可將這種關(guān)聯(lián)存儲在作為服務(wù)器節(jié)點群集206的一個或多個應(yīng)用實例高速緩存中,諸如應(yīng)用實例高速緩存212和220。在一個實施例中,可通過將應(yīng)用實例標(biāo)識符添加到資源226的額外創(chuàng)建參數(shù)(ECP)列表來將該應(yīng)用實例標(biāo)識符與該資源相關(guān)聯(lián)。ECP列表可被存儲在作為服務(wù)器節(jié)點群集206的一部分的應(yīng)用實例高速緩存中,諸如應(yīng)用實例高速緩存212和220。在實施例中,當(dāng)ECP被服務(wù)器接收時,服務(wù)器從ECP中提取應(yīng)用實例標(biāo)識符并將該應(yīng)用實例標(biāo)識符添加到高速緩存中以與資源、資源句柄等相關(guān)聯(lián)。 如參考將應(yīng)用實例標(biāo)識符存儲在客戶端群集201中所描述的,與節(jié)點相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符可被存儲在服務(wù)器節(jié)點群集206中的節(jié)點上的個體應(yīng)用實例高速緩存中、在服務(wù)器群集206中的中央儲存庫中、或跨服務(wù)器節(jié)點群集206中的多個節(jié)點上的多個應(yīng)用實例高速緩存復(fù)制。
在實施例中,當(dāng)正在客戶端202上執(zhí)行的請求者具有對資源222的訪問權(quán)時資源 226被阻隔或鎖定,由此阻止其他客戶端或應(yīng)用訪問資源226并避免任何潛在沖突。在實施例中,在請求者完成其對資源226的操作之前,客戶端202經(jīng)歷錯誤,所述錯誤使它丟失與該資源的連接。例如,該客戶端可能崩潰、被下線、或丟失與服務(wù)器節(jié)點208的網(wǎng)絡(luò)連接。在這種情況下,資源226仍可處于阻隔或鎖定狀態(tài)中,因為請求者沒有釋放對該資源的鎖定, 由此阻止其他客戶端訪問資源226。
當(dāng)客戶端202發(fā)生錯誤時,請求者可利用客戶端故障轉(zhuǎn)移機(jī)制232來遷移到客戶端群集201中的新客戶端節(jié)點(例如,客戶端204)。本領(lǐng)域的技術(shù)人員將理解,在客戶端故障轉(zhuǎn)移232處可采用任何類型的故障轉(zhuǎn)移機(jī)制。在實施例中,故障轉(zhuǎn)移機(jī)制232還可包括請求者的應(yīng)用實例標(biāo)識符的遷移,該應(yīng)用實例標(biāo)識符可能已經(jīng)存儲在如今已失敗的客戶端 202上的⑶ID高速緩存214中。在完成遷移之后,請求者可嘗試重新獲得對資源202的訪問。在實施例中,客戶端216可向節(jié)點I發(fā)送第二請求224以代表該請求者請求對資源226 的訪問。然而,在不使用此處公開的連續(xù)訪問實施例的情況下,當(dāng)節(jié)點1208接收到代表客戶端204 (第二請求224的發(fā)送者)訪問資源226的請求時,它可能拒絕該請求,因為資源 226仍處于由客戶端202對該資源進(jìn)行的先前的訪問所導(dǎo)致的阻隔或鎖定狀態(tài)中。在不使用此處公開的實施例的情況下,節(jié)點1208將會認(rèn)識到訪問資源226的第二請求是來自不同位置(例如,客戶端204)的。節(jié)點1208將不能夠確定該請求是用于對資源226保持鎖定的同一請求者的,并且將因此判斷準(zhǔn)許該請求將導(dǎo)致沖突。然而,如果同一請求者正嘗試訪問資源224,則沒有沖突問題,而迫使該客戶端等待該資源被系統(tǒng)釋放可能會導(dǎo)致過度的延遲。
該應(yīng)用實例標(biāo)識符可用于解決此問題。在實施例中,第二請求224也可包括該應(yīng)用實例標(biāo)識符,該應(yīng)用實例標(biāo)識符標(biāo)識在232處示出的故障轉(zhuǎn)移期間遷移到客戶端204的請求者。在實施例中,在請求者在客戶端故障轉(zhuǎn)移232期間的遷移之前,請求者的應(yīng)用實例標(biāo)識符可存在于客戶端204的GUID高速緩存228中。例如,可能已采用復(fù)制機(jī)制將請求者的應(yīng)用實例標(biāo)識符跨客戶端群集201中的節(jié)點復(fù)制。在另一實施例中,請求者203可存儲其應(yīng)用實例標(biāo)識符。在又一實施例中,請求者203的應(yīng)用實例標(biāo)識符可在客戶端故障轉(zhuǎn)移 232期間被遷移。
如參考請求222所描述的,該應(yīng)用實例標(biāo)識符可在與第二請求224的同一消息中傳送,或者第二請求224可由多個不同消息構(gòu)成。當(dāng)在節(jié)點群集206處或在該群集中的個體節(jié)點(諸如節(jié)點1208)處接收到第二請求,且接收服務(wù)器確定該資源被阻隔或鎖定時,就第二請求224中的應(yīng)用實例標(biāo)識符是否與資源226相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符相同作出判斷。 在實施例中,節(jié)點2216會將與第二請求222 —起接收的應(yīng)用實例標(biāo)識符與和資源226相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符進(jìn)行比較。和資源226相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符可被存儲在節(jié)點1212 的應(yīng)用實例高速緩存212中。在其中節(jié)點群集206中存在多個應(yīng)用實例高速緩存的實施例中,該判斷可檢查節(jié)點群集206中的超過一個應(yīng)用實例高速緩存。在這樣的實施例中,如果匹配的應(yīng)用實例標(biāo)識符不位于應(yīng)用實例高速緩存212中,則節(jié)點1216可向節(jié)點2212發(fā)送請求以確定匹配的應(yīng)用實例標(biāo)識符是否位于應(yīng)用實例高速緩存220中。
在一個實施例中,如果在第二請求224中接收的應(yīng)用實例高速緩存不與和資源 226相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符(其可存儲在應(yīng)用實例高速緩存212和/或220中)相匹配, 則第二請求224可能不會被準(zhǔn)許,直到資源226被釋放為止。然而,如果找到匹配,則接收服務(wù)器(例如,節(jié)點1208)和/或服務(wù)器群集206執(zhí)行動作來準(zhǔn)許對資源226的訪問而不會對客戶端204和請求者203導(dǎo)致過度的延遲。在這種的情形中,節(jié)點群集206可使資源226 無效,由此將資源226從阻隔或鎖定狀態(tài)中移除。在實施例中,使前一訪問無效可包括使資源離開阻隔或鎖定狀態(tài)的任何動作。一個非限制性示例是關(guān)閉打開的文件(例如,如果資源 226是文件的話)。一旦前一訪問被無效,則訪問資源226的第二請求224可被準(zhǔn)許,由此向請求者203提供連續(xù)的訪問。
在一個實施例中,如果不同節(jié)點(例如節(jié)點2216)具有訪問權(quán)和/或無效前一訪問的許可,則接收第二請求224的節(jié)點(諸如圖2中的節(jié)點1208)可執(zhí)行所需的動作來使對資源226的前一訪問無效。然而,在一些情況下,接收該請求的節(jié)點可能不具有訪問權(quán)或使前一訪問無效的許可。例如,如果原始請求222是對節(jié)點2216作出的,在這種情況下節(jié)點 2216可對該資源有控制權(quán),則這種情形可能出現(xiàn)。在這種情形下,接收第二請求224的節(jié)點可向控制節(jié)點發(fā)送請求以使前一訪問無效。一旦控制節(jié)點已使前一訪問無效后,接收第二請求224的節(jié)點可準(zhǔn)許第二請求224。在其他實施例中,接收第二請求224的節(jié)點可向不同節(jié)點發(fā)送請求來準(zhǔn)許客戶端204和/或請求者203 (現(xiàn)在駐留于客戶端204上)對資源226 的訪問。
通過使用應(yīng)用實例標(biāo)識符,所描述的過程避免了在從先前訪問資源226并仍舊保持對資源226的鎖定的請求者203準(zhǔn)許訪問資源226的第二請求224時的過度延遲。而且, 該應(yīng)用實例標(biāo)識符提供了確保任何被準(zhǔn)許的請求不會在資源226上產(chǎn)生沖突的好處。例如,如果請求是從不同應(yīng)用接收的,則該請求將包括與和該資源相關(guān)聯(lián)的應(yīng)用實例標(biāo)識符不同的應(yīng)用實例標(biāo)識符,這會導(dǎo)致該請求被拒絕。因為應(yīng)用實例標(biāo)識符是全局唯一標(biāo)識符, 所以不同應(yīng)用的應(yīng)用實例標(biāo)識符將不相同。
圖3是在客戶端群集環(huán)境中請求者可用來獲得對資源的連續(xù)訪問的方法300的實施例。例如,請求者可以是客戶端,諸如客戶端202 (圖2),該客戶端采用方法300來訪問資源(例如,資源226)。在實施例中,資源可駐留于遠(yuǎn)程機(jī)器(諸如服務(wù)器)上。服務(wù)器可以是獨(dú)立服務(wù)器,或是群集環(huán)境(諸如服務(wù)器群集206 (圖2))的一部分。流程開始于操作 302,其中對資源的請求被發(fā)送到服務(wù)器。在實施例中,該請求可以是訪問資源。在實施例中,訪問資源可包括打開文件、創(chuàng)建文件、或以其他方式訪問對客戶端而言可能位于遠(yuǎn)程的資源或?qū)υ撡Y源執(zhí)行操作。在實施例中,請求者可在客戶端群集環(huán)境中操作。在這些實施例中,在操作302發(fā)送的請求可從客戶端群集環(huán)境中的第一客戶端發(fā)送。
流程繼續(xù)到操作304,其中應(yīng)用實例標(biāo)識符被發(fā)送到例如服務(wù)器(例如,獨(dú)立服務(wù)器、或群集環(huán)境中的節(jié)點)。在一個實施例中,發(fā)送請求的第一客戶端 還可代表請求者發(fā)送應(yīng)用實例標(biāo)識符。如同先前描述的,應(yīng)用實例標(biāo)識符是標(biāo)識請求者(例如,請求對資源的訪問的應(yīng)用、客戶端、或應(yīng)用的子進(jìn)程)的GUID。在一個實施例中,可在經(jīng)由網(wǎng)絡(luò)傳送的消息中發(fā)送應(yīng)用實例標(biāo)識符。應(yīng)用實例標(biāo)識符可在包含操作302中的請求的同一消息中傳送, 或者可以在不同消息中傳送。在這些實施例中,在操作302可發(fā)送包含該應(yīng)用實例標(biāo)識符的對象,諸如但不限于參考圖2描述的_NETWORK_APP_INS_TANCE_ECP_CONTEXT。
在一個實施例中,在操作304可使用一接口來發(fā)送應(yīng)用實例標(biāo)識符。該接口可以是位于客戶端上或?qū)υ诳蛻舳巳杭h(huán)境中操作的客戶端可用的內(nèi)核級接口。在實施例中, 該內(nèi)核級接口可被請求者和/或客戶端用來向服務(wù)器發(fā)送應(yīng)用實例標(biāo)識符。下面是可在操作304采用來發(fā)送應(yīng)用實例標(biāo)識符的內(nèi)核級接口的非限制性示例
權(quán)利要求
1.一種提供對資源的連續(xù)訪問的方法,所述方法包括 從請求者接收(402)訪問資源的第一請求,其中所述請求是從第一客戶端接收的; 將第一應(yīng)用實例標(biāo)識符與所述第一資源相關(guān)聯(lián); 允許(412)訪問所述資源的所述第一請求; 在從故障恢復(fù)后,從所述請求者接收(402)對所述資源的第二請求,其中所述第二請求是從不同于所述第一客戶端的第二客戶端接收的; 接收與所述第二請求相關(guān)聯(lián)的第二應(yīng)用標(biāo)識符; 確定(406)所述第一應(yīng)用標(biāo)識符和所述第二應(yīng)用標(biāo)識符是否相同;以及當(dāng)所述第一和第二應(yīng)用標(biāo)識符相同時,執(zhí)行包括以下步驟的步驟 使所述第一請求無效(408);以及 準(zhǔn)許(412)訪問所述資源的所述第二請求。
2.如權(quán)利要求I所述的方法,其特征在于,所述第一應(yīng)用標(biāo)識符與打開請求的應(yīng)用實例相關(guān)聯(lián)。
3.如權(quán)利要求I所述的方法,其特征在于,所述第一應(yīng)用標(biāo)識符與進(jìn)程相關(guān)聯(lián)。
4.如權(quán)利要求I所述的方法,其特征在于,所述第一應(yīng)用標(biāo)識符與應(yīng)用的至少一個子進(jìn)程相關(guān)聯(lián)。
5.如權(quán)利要求I所述的方法,其特征在于,關(guān)聯(lián)所述第一應(yīng)用實例標(biāo)識符包括在NETWORK_APP_INSTANCE_ECP_CONTEXT結(jié)構(gòu)中接收所述第一應(yīng)用實例標(biāo)識符。
6.一種用于提供群集客戶端故障轉(zhuǎn)移的方法,所述方法包括 在第二客戶端處接收請求者的應(yīng)用實例標(biāo)識符,其中所述請求者先前使用第一客戶端訪問資源; 從第二客戶端發(fā)送(310)代表所述請求者訪問所述資源的第二請求; 從所述第二客戶端發(fā)送(312)所述請求者的所述應(yīng)用實例標(biāo)識符; 接收服務(wù)器準(zhǔn)許所述第二請求的指示;以及 由所述第二客戶端代表所述客戶端訪問(314)所述資源。
7.如權(quán)利要求6所述的方法,其特征在于,準(zhǔn)許所述第二請求的所述服務(wù)器先前準(zhǔn)許了來自所述第一客戶端的代表所述請求者訪問所述資源的第一請求。
8.如權(quán)利要求6所述的方法,其特征在于,所述第二客戶端響應(yīng)于客戶端故障轉(zhuǎn)移而發(fā)送所述第二請求。
9.一種用于便于群集環(huán)境中的客戶端故障轉(zhuǎn)移的系統(tǒng),所述系統(tǒng)包括 至少一個服務(wù)器(208),所述至少一個服務(wù)器包括 被配置成執(zhí)行計算機(jī)可執(zhí)行指令的至少一個處理器; 存儲所述計算機(jī)可執(zhí)行指令的至少一個計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可執(zhí)行指令在被所述至少一個處理器執(zhí)行時提供 從第一客戶端接收(402)代表請求者訪問資源的第一請求; 將第一應(yīng)用實例標(biāo)識符與所述第一資源相關(guān)聯(lián); 允許(412)所述請求者對所述資源的訪問; 從第二客戶端接收(402)對所述資源的第二請求,其中所述第二客戶端不同于所述第一客戶端;接收與所述第二請求相關(guān)聯(lián)的第二應(yīng)用標(biāo)識符; 確定(406)所述第一應(yīng)用標(biāo)識符和所述第二應(yīng)用標(biāo)識符是否相同; 當(dāng)所述第一和第二應(yīng)用標(biāo)識符相同時,執(zhí)行包括以下步驟的步驟 使所述第一請求無效(408);以及 準(zhǔn)許(412)訪問所述資源的所述第二請求。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括 所述第一客戶端(202),包括 被配置成執(zhí)行計算機(jī)可執(zhí)行指令的至少一個處理器; 存儲所述計算機(jī)可執(zhí)行指令的至少一個計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可執(zhí)行指令在被所述至少一個處理器執(zhí)行時 發(fā)送(302)所述第一請求; 向第二客戶端發(fā)送(304)所述應(yīng)用實例標(biāo)識符。
全文摘要
本發(fā)明涉及群集客戶端故障轉(zhuǎn)移。應(yīng)用實例標(biāo)識符與各系統(tǒng)和方法一起使用以在客戶端群集環(huán)境中操作時向請求者提供對資源的連續(xù)訪問。駐留于第一客戶端上的請求者可嘗試訪問資源。第一客戶端發(fā)送訪問該資源的請求。該請求可與標(biāo)識該請求的應(yīng)用實例標(biāo)識符相關(guān)聯(lián)。在某一點,第一客戶端失敗而請求者經(jīng)由故障轉(zhuǎn)移機(jī)制與第二客戶端相關(guān)聯(lián)。第二客戶端代表該請求者發(fā)送訪問該資源的第二請求。該第二請求與該請求者的應(yīng)用實例標(biāo)識符相關(guān)聯(lián)。該應(yīng)用實例標(biāo)識符被用來將該第二請求標(biāo)識為屬于與該第一請求相同的請求者,由此準(zhǔn)許訪問該資源的第二請求,同時避免沖突情形。
文檔編號H04L12/24GK102932164SQ20121033072
公開日2013年2月13日 申請日期2012年9月7日 優(yōu)先權(quán)日2011年9月9日
發(fā)明者D·M·克魯斯, D·法薩拉, J·T·平克頓, M·喬治, P·普拉哈達(dá), T·E·喬利 申請人:微軟公司