背景技術(shù):
通過(guò)因特網(wǎng)或經(jīng)由企業(yè)網(wǎng)絡(luò)可用于用戶的信息量實(shí)際上是無(wú)限的,這就是當(dāng)今的時(shí)代通常被稱為“信息時(shí)代”的原因。當(dāng)計(jì)算硬件為計(jì)算機(jī)提供硬件支持時(shí),指導(dǎo)硬件操作以執(zhí)行無(wú)數(shù)功能的是應(yīng)用程序。為了支持信息時(shí)代,這樣的應(yīng)用需要訪問信息,信息通常被稱為數(shù)據(jù)。
為了獲得最佳性能,數(shù)據(jù)通常以層級(jí)形式存在,其中更加頻繁地和/或最近使用的數(shù)據(jù)以更高的訪問速度更多地被本地高速緩存,并且其中較少使用的數(shù)據(jù)以較慢的訪問速度被高速緩存外部可用。數(shù)據(jù)訪問的新近度和/或頻率常常是對(duì)數(shù)據(jù)的未來(lái)訪問的預(yù)測(cè),并且常常與類似于溫度(諸如“溫暖”、“熱度”、“冷度”、“溫度”)的參考一起被提及。例如,氣體分子越熱,其與周圍分子更頻繁且更積極地相互作用。因此,溫度隱喻被廣泛地應(yīng)用于數(shù)據(jù)訪問。
當(dāng)應(yīng)用與底層數(shù)據(jù)存儲(chǔ)層級(jí)交互時(shí),應(yīng)用建立高速緩存,以使得應(yīng)用能夠接近峰值性能,因?yàn)闇嘏瘮?shù)據(jù)被加載到更高效地被訪問的高速緩存中。為了實(shí)現(xiàn)可用性,特別是在云計(jì)算環(huán)境中,應(yīng)用通常會(huì)具有運(yùn)行在不同的計(jì)算節(jié)點(diǎn)上的一個(gè)或兩個(gè)次級(jí)副本應(yīng)用。對(duì)主應(yīng)用進(jìn)行的寫入也在次級(jí)應(yīng)用處被進(jìn)行。如果在一個(gè)計(jì)算節(jié)點(diǎn)上的主應(yīng)用失敗,則云計(jì)算基礎(chǔ)架構(gòu)將切換到次級(jí)應(yīng)用之一。
本文中要求保護(hù)的主題不限于解決任何缺點(diǎn)或只在諸如上述環(huán)境中操作的實(shí)施例。相反,僅提供該背景技術(shù)部分以說(shuō)明一個(gè)示例性技術(shù)領(lǐng)域,其中可以實(shí)踐本文中描述的一些實(shí)施例。
技術(shù)實(shí)現(xiàn)要素:
本文中描述的至少一些實(shí)施例操作在這樣的環(huán)境中,其中主應(yīng)用具有操作在其他網(wǎng)絡(luò)節(jié)點(diǎn)上的一個(gè)或多個(gè)次級(jí)應(yīng)用(諸如副本應(yīng)用)。作為示例,這樣的冗余應(yīng)用可以被操作為用于應(yīng)用的可用性的目的。根據(jù)本文中描述的原理,主應(yīng)用的主應(yīng)用高速緩存被評(píng)估,以用于朝向相同狀態(tài)移動(dòng)次級(jí)應(yīng)用的次級(jí)應(yīng)用高速緩存的目的。這樣,如果主應(yīng)用確實(shí)失敗,則次級(jí)應(yīng)用可以繼續(xù)以與次級(jí)應(yīng)用占據(jù)主要作用的應(yīng)用高速緩存的類似的(如果不是相同的)內(nèi)容進(jìn)行操作。
對(duì)主應(yīng)用的寫入請(qǐng)求也在次級(jí)應(yīng)用處被執(zhí)行。然而,任何給定的次級(jí)應(yīng)用高速緩存仍然可能處于與主應(yīng)用高速緩存不同的狀態(tài),因?yàn)橹鲬?yīng)用暴露于與次級(jí)應(yīng)用不同的讀取請(qǐng)求。例如,主應(yīng)用可以是讀取請(qǐng)求的排他性執(zhí)行者。此外,可能存在一些情況,其中雖然在主應(yīng)用處執(zhí)行寫入,但是次級(jí)應(yīng)用中的一個(gè)或多個(gè)不執(zhí)行寫入操作(例如,由于通信難度)。因此,任何給定的次級(jí)應(yīng)用高速緩存的狀態(tài)在任何給定的時(shí)間可以不同于主應(yīng)用高速緩存的狀態(tài)。
根據(jù)本文中描述的原理,存在一種用于在次級(jí)應(yīng)用高速緩存中至少部分地復(fù)制主應(yīng)用高速緩存的方法。該方法包括標(biāo)識(shí)主應(yīng)用高速緩存內(nèi)的至少一些高速緩存部分標(biāo)識(shí)符,并且引起所標(biāo)識(shí)的高速緩存部分標(biāo)識(shí)符被傳送到第二網(wǎng)絡(luò)節(jié)點(diǎn)。例如,這可以由與主應(yīng)用高速緩存位于同一機(jī)器上的分布式復(fù)制模塊的部分來(lái)實(shí)現(xiàn)。一旦這些標(biāo)識(shí)符被接收到,則至少一個(gè)高速緩存部分被取回到次級(jí)應(yīng)用高速緩存中,該至少一個(gè)高速緩存部分被標(biāo)識(shí)在所傳送的高速緩存部分標(biāo)識(shí)符中次級(jí)。例如,該取回可以由與次級(jí)應(yīng)用高速緩存位于同一計(jì)算機(jī)上的分布式復(fù)制模塊的部分來(lái)實(shí)現(xiàn)。這個(gè)過(guò)程可以重復(fù)地被執(zhí)行,使得次級(jí)應(yīng)用高速緩存朝著與主應(yīng)用高速緩存相同的狀態(tài)移動(dòng),盡管當(dāng)主應(yīng)用通過(guò)接收讀寫入請(qǐng)求而操作時(shí),主應(yīng)用高速緩存的狀態(tài)也在改變。此外,這個(gè)過(guò)程可以被執(zhí)行以用于多個(gè)次級(jí)副本應(yīng)用,使得其各自的應(yīng)用高速緩存趨于更接近于主應(yīng)用高速緩存的狀態(tài)。
與高速緩存部分本身相比,高速緩存部分標(biāo)識(shí)符可能非常小。因此,在一個(gè)實(shí)施例中,可以使用在主應(yīng)用高速緩存中的高速緩存部分的標(biāo)識(shí)符來(lái)頻繁地更新運(yùn)行次級(jí)應(yīng)用的第二網(wǎng)絡(luò)節(jié)點(diǎn)。然而,由于高速緩存部分本身大得多,所以標(biāo)識(shí)的高速緩存部分被取回和放置到次級(jí)應(yīng)用高速緩存中的頻率可能不那么頻繁。這樣的較低頻率的取回可以利用效率,因?yàn)樵诟咚倬彺娌糠直粡椚牒蛷棾鲋鲬?yīng)用高速緩存的情況下,可以避免將該高速緩存部分加載到次級(jí)應(yīng)用高速緩存中。此外,如果溫暖信息也與每個(gè)標(biāo)識(shí)符相關(guān)聯(lián),則可以通過(guò)高速緩存部分的溫暖來(lái)將高速緩存部分的取回優(yōu)先化。
本發(fā)明內(nèi)容不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或基本特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。
附圖說(shuō)明
為了描述可以獲得的上述以及其他優(yōu)點(diǎn)和特征的方式,將通過(guò)參考附圖來(lái)呈現(xiàn)各種實(shí)施例的更具體的描述。應(yīng)當(dāng)理解,這些附圖僅描繪了示例性實(shí)施例,并且因此不應(yīng)當(dāng)被認(rèn)為是對(duì)本發(fā)明的范圍的限制,將通過(guò)使用附圖以附加的特征和細(xì)節(jié)來(lái)描述和解釋實(shí)施例,在附圖中:
圖1抽象地示出了其中可以采用本文中描述的一些實(shí)施例的計(jì)算系統(tǒng);
圖2示出了包括多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的網(wǎng)絡(luò)系統(tǒng),每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)在其上操作應(yīng)用副本的至少部分、相關(guān)聯(lián)的高速緩存和分布式高速緩存復(fù)制模塊的部分;
圖3示出了用于在次級(jí)應(yīng)用高速緩存中至少部分地復(fù)制主應(yīng)用高速緩存的方法的流程圖;
圖4a示出了圖2的網(wǎng)絡(luò)系統(tǒng)的狀態(tài),但是其中示出了由主應(yīng)用的操作所致的在主應(yīng)用高速緩存內(nèi)的三個(gè)高速緩存部分;
圖4b示出了圖2的網(wǎng)絡(luò)系統(tǒng)的后續(xù)狀態(tài),但是其中源部分已經(jīng)通知了主應(yīng)用高速緩存內(nèi)的至少一些標(biāo)識(shí)符的目標(biāo)部分;
圖4c示出了圖2的網(wǎng)絡(luò)系統(tǒng)的后續(xù)狀態(tài),但是其中目標(biāo)部分已經(jīng)取回到相關(guān)聯(lián)的次級(jí)應(yīng)用高速緩存中,那些高速緩存部分中的至少一些由所接收的標(biāo)識(shí)符的至少一些所標(biāo)識(shí)標(biāo)識(shí);以及
圖5示出了所捕獲的高速緩存部分狀態(tài),其包括用于相關(guān)聯(lián)的高速緩存部分的高速緩存部分標(biāo)識(shí)符以及用于相關(guān)聯(lián)的高速緩存部分的熱度度量。
具體實(shí)施方式
本文中描述的至少一些實(shí)施例操作在這樣的環(huán)境中,其中主應(yīng)用具有操作在其他網(wǎng)絡(luò)節(jié)點(diǎn)上的一個(gè)或多個(gè)次級(jí)應(yīng)用(諸如副本應(yīng)用)。作為示例,這樣的冗余應(yīng)用可以被操作以用于應(yīng)用的可用性的目的。根據(jù)本文中描述的原理,主應(yīng)用的主應(yīng)用高速緩存被評(píng)估,以用于朝著相同狀態(tài)移動(dòng)次級(jí)應(yīng)用的次級(jí)應(yīng)用高速緩存的目的。這樣,如果主應(yīng)用確實(shí)失敗,則次級(jí)應(yīng)用可以繼續(xù)以與次級(jí)應(yīng)用占據(jù)主要作用的應(yīng)用高速緩存的類似的(如果不是相同的)內(nèi)容進(jìn)行操作。
對(duì)主應(yīng)用進(jìn)行的寫入請(qǐng)求也在次級(jí)應(yīng)用處被執(zhí)行。然而,任何給定的次級(jí)應(yīng)用高速緩存仍然可能與主應(yīng)用高速緩存處于不同的狀態(tài),因?yàn)橹鲬?yīng)用暴露于與次級(jí)應(yīng)用不同的讀取請(qǐng)求。例如,主應(yīng)用可以是讀取請(qǐng)求的排他性的執(zhí)行者。此外,可能存在一些情況,其中雖然在主應(yīng)用處執(zhí)行寫入,但是次級(jí)應(yīng)用中的一個(gè)或多個(gè)不執(zhí)行寫入操作(例如,由于通信難度)。因此,任何給定的次級(jí)應(yīng)用高速緩存的狀態(tài)在任何給定的時(shí)間可以不同于主應(yīng)用高速緩存的狀態(tài)。
根據(jù)本文中描述的原理,存在一種用于在次級(jí)應(yīng)用高速緩存中至少部分地復(fù)制主應(yīng)用高速緩存的方法。該方法包括標(biāo)識(shí)主應(yīng)用高速緩存內(nèi)的至少一些高速緩存部分標(biāo)識(shí)符,并且引起所標(biāo)識(shí)的高速緩存部分標(biāo)識(shí)符被傳送到第二網(wǎng)絡(luò)節(jié)點(diǎn)。例如,這可以由分布式復(fù)制模塊的部分來(lái)實(shí)現(xiàn),該分布式復(fù)制模塊的部分與主應(yīng)用高速緩存位于同一機(jī)器上。一旦這些標(biāo)識(shí)符被接收到,則至少一個(gè)高速緩存部分被取回到次級(jí)應(yīng)用高速緩存中,該至少一個(gè)高速緩存部分被標(biāo)識(shí)在所傳送的高速緩存部分標(biāo)識(shí)符中次級(jí)。例如,該取回可以由與次級(jí)應(yīng)用高速緩存位于同一計(jì)算機(jī)上的分布式復(fù)制模塊的部分來(lái)實(shí)現(xiàn)。這個(gè)過(guò)程可以重復(fù)地被執(zhí)行,使得次級(jí)應(yīng)用高速緩存朝著與主應(yīng)用高速緩存相同的狀態(tài)移動(dòng),盡管在主應(yīng)用通過(guò)接收讀寫請(qǐng)求而操作時(shí),主應(yīng)用高速緩存的狀態(tài)也在改變。此外,這個(gè)過(guò)程可以被執(zhí)行以用于多個(gè)次級(jí)副本應(yīng)用,使得其各自的應(yīng)用高速緩存趨于更接近主應(yīng)用高速緩存的狀態(tài)。
與高速緩存部分本身相比,高速緩存部分標(biāo)識(shí)符可能非常小。因此,在一個(gè)實(shí)施例中,可以使用在主應(yīng)用高速緩存中的高速緩存部分的標(biāo)識(shí)符來(lái)頻繁地更新運(yùn)行次級(jí)應(yīng)用的第二網(wǎng)絡(luò)節(jié)點(diǎn)。然而,由于高速緩存部分本身大得多,所以所標(biāo)識(shí)的高速緩存部分被取回和放置到次級(jí)應(yīng)用高速緩存中的頻率可能不那么頻繁。這樣的較低頻率的取回可以利用效率,因?yàn)樵诟咚倬彺娌糠直粡椚牒蛷棾鲋鲬?yīng)用高速緩存的情況下,可以避免將該高速緩存部分加載到次級(jí)應(yīng)用高速緩存中。此外,如果溫暖信息也與每個(gè)標(biāo)識(shí)符相關(guān)聯(lián),則可以通過(guò)高速緩存部分的溫暖來(lái)將高速緩存部分到次級(jí)應(yīng)用高速緩存中的取回優(yōu)先化。
將關(guān)于圖1來(lái)描述對(duì)計(jì)算系統(tǒng)的一些介紹性討論。然后,將關(guān)于隨后的圖來(lái)呈現(xiàn)本文中描述的實(shí)施例的結(jié)構(gòu)和操作。
計(jì)算系統(tǒng)現(xiàn)在越來(lái)越多地采用各種各樣的形式。計(jì)算系統(tǒng)可以例如是手持設(shè)備、家用電器、膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、大型機(jī)、分布式計(jì)算系統(tǒng)、數(shù)據(jù)中心、甚至是在傳統(tǒng)上不被認(rèn)為是計(jì)算系統(tǒng)的設(shè)備,諸如可穿戴設(shè)備(例如眼鏡)。在本說(shuō)明書和權(quán)利要求書中,術(shù)語(yǔ)“計(jì)算系統(tǒng)”廣義地被定義為包括具有至少一個(gè)物理和有形處理器、以及能夠在其上具有可以由處理器執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的物理和有形存儲(chǔ)器的任何設(shè)備或系統(tǒng)(或其組合)。存儲(chǔ)器可以采用任何形式,并且可以取決于計(jì)算系統(tǒng)的性質(zhì)和形式。計(jì)算系統(tǒng)可以分布在網(wǎng)絡(luò)環(huán)境上,并且可以包括多個(gè)組成的計(jì)算系統(tǒng)。
如圖1所示,在其最基本的配置中,計(jì)算系統(tǒng)100通常包括至少一個(gè)硬件處理單元102和存儲(chǔ)器104。存儲(chǔ)器104可以是物理系統(tǒng)存儲(chǔ)器,其可以是易失性的、非易失性的、或兩者的某種組合。本文中也可以使用術(shù)語(yǔ)“存儲(chǔ)器”來(lái)指代非易失性大容量存儲(chǔ)裝置,諸如物理存儲(chǔ)介質(zhì)。如果計(jì)算系統(tǒng)是分布式的,則處理、存儲(chǔ)器和/或存儲(chǔ)能力也可以是分布式的。如本文中使用的,術(shù)語(yǔ)“可執(zhí)行模塊”或“可執(zhí)行部件”可以指代可在計(jì)算系統(tǒng)上執(zhí)行的軟件對(duì)象、例程或方法。本文中描述的不同的部件、模塊、引擎和服務(wù)可以被實(shí)現(xiàn)為在計(jì)算系統(tǒng)上執(zhí)行的對(duì)象或過(guò)程(例如,作為單獨(dú)的線程)。
在下面的描述中,參考由一個(gè)或多個(gè)計(jì)算系統(tǒng)執(zhí)行的動(dòng)作來(lái)描述實(shí)施例。如果這樣的動(dòng)作以軟件來(lái)實(shí)現(xiàn),則(執(zhí)行該動(dòng)作的相關(guān)聯(lián)的計(jì)算系統(tǒng)的)一個(gè)或多個(gè)處理器響應(yīng)于已經(jīng)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令來(lái)引導(dǎo)計(jì)算系統(tǒng)的操作。例如,這樣的計(jì)算機(jī)可執(zhí)行指令可以在形成計(jì)算機(jī)程序產(chǎn)品的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)上實(shí)施。這樣的操作的示例涉及數(shù)據(jù)的操縱。計(jì)算機(jī)可執(zhí)行指令(和所操縱的數(shù)據(jù))可以被存儲(chǔ)在計(jì)算系統(tǒng)100的存儲(chǔ)器104中。計(jì)算系統(tǒng)100還可以包含通信信道108,該通信信道108使得計(jì)算系統(tǒng)100能夠通過(guò)例如網(wǎng)絡(luò)110來(lái)與其他計(jì)算系統(tǒng)通信。
本文中描述的實(shí)施例可以包括或利用具有計(jì)算機(jī)硬件(諸如例如一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器)的專用或通用計(jì)算系統(tǒng),如下面更詳細(xì)地討論的。本文中描述的實(shí)施例還包括用于攜帶或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計(jì)算機(jī)可讀介質(zhì)。這樣的計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算系統(tǒng)訪問的任何可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是物理存儲(chǔ)介質(zhì)。攜帶計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。因此,作為示例而非限制,本發(fā)明的實(shí)施例可以包括至少兩種明顯不同種類的計(jì)算機(jī)可讀介質(zhì):存儲(chǔ)介質(zhì)和傳輸介質(zhì)。
計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括ram、rom、eeprom、cd-rom或其他光盤存儲(chǔ)裝置、磁盤存儲(chǔ)裝置或其他磁存儲(chǔ)設(shè)備、或者可以用于以計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的形式來(lái)存儲(chǔ)所需程序代碼裝置并且可以由通用或?qū)S糜?jì)算系統(tǒng)來(lái)訪問的任何其他物理和有形存儲(chǔ)介質(zhì)。
“網(wǎng)絡(luò)”被定義為使得能夠在計(jì)算系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳送電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息通過(guò)網(wǎng)絡(luò)或其他通信連接(硬連線、無(wú)線、或者硬連線或無(wú)線的組合)傳送或提供給計(jì)算系統(tǒng)時(shí),計(jì)算系統(tǒng)正確地將連接視為傳輸介質(zhì)。傳輸介質(zhì)可以包括可用于以計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的形式來(lái)攜帶期望的程序代碼裝置并且可以由通用或?qū)S糜?jì)算系統(tǒng)來(lái)訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)當(dāng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。
此外,在到達(dá)各種計(jì)算系統(tǒng)部件時(shí),計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可以被自動(dòng)地從傳輸介質(zhì)傳送到存儲(chǔ)介質(zhì)(反之亦然)。例如,通過(guò)網(wǎng)絡(luò)或數(shù)據(jù)鏈路所接收的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可以被緩沖在網(wǎng)絡(luò)接口模塊(例如,“nic”)內(nèi)的ram中,并且然后最終被傳送到計(jì)算系統(tǒng)處的計(jì)算系統(tǒng)ram和/或更不易失性的存儲(chǔ)介質(zhì)。因此,應(yīng)當(dāng)理解,存儲(chǔ)介質(zhì)可以被包括在也(或者甚至主要地)利用傳輸介質(zhì)的計(jì)算系統(tǒng)部件中。
計(jì)算機(jī)可執(zhí)行指令包括例如當(dāng)在處理器處被執(zhí)行時(shí)引起通用計(jì)算系統(tǒng)、專用計(jì)算系統(tǒng)或?qū)S锰幚碓O(shè)備執(zhí)行某個(gè)功能或功能組的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如在由處理器直接執(zhí)行之前經(jīng)歷一些轉(zhuǎn)換(諸如編譯)的二進(jìn)制或甚至指令,諸如中間格式指令,諸如匯編語(yǔ)言、或甚至源代碼。雖然已經(jīng)用特定于結(jié)構(gòu)特征和/或方法動(dòng)作的語(yǔ)言描述了主題,但是應(yīng)當(dāng)理解,所附權(quán)利要求中限定的主題不一定限于上述特征或動(dòng)作。相反,所描述的特征和動(dòng)作被公開作為實(shí)現(xiàn)權(quán)利要求的示例形式。
本領(lǐng)域技術(shù)人員將理解,本發(fā)明可以在具有很多類型的計(jì)算系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,包括個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)pc、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、pda、尋呼機(jī)、路由器、交換機(jī)、數(shù)據(jù)中心、可穿戴設(shè)備(諸如眼鏡)等。本發(fā)明也可以在分布式系統(tǒng)環(huán)境中實(shí)現(xiàn),在分布式系統(tǒng)環(huán)境中,通過(guò)網(wǎng)絡(luò)(通過(guò)硬連線數(shù)據(jù)鏈路、無(wú)線數(shù)據(jù)鏈路、或通過(guò)硬連線和無(wú)線數(shù)據(jù)鏈路的組合)鏈接的本地和遠(yuǎn)程計(jì)算系統(tǒng)都執(zhí)行任務(wù)。在分布式系統(tǒng)環(huán)境中,程序模塊可能位于本地和遠(yuǎn)程存儲(chǔ)設(shè)備二者中。
圖2示出了包括多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的網(wǎng)絡(luò)系統(tǒng)200。例如,網(wǎng)絡(luò)系統(tǒng)200包括第一網(wǎng)絡(luò)節(jié)點(diǎn)210、第二網(wǎng)絡(luò)節(jié)點(diǎn)220和潛在的第三網(wǎng)絡(luò)節(jié)點(diǎn)230。然而,省略號(hào)240表示可以在包括兩個(gè)或更多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的任何網(wǎng)絡(luò)環(huán)境中操作的、本文中描述的原理。在一個(gè)實(shí)施例中,網(wǎng)絡(luò)系統(tǒng)200是云計(jì)算環(huán)境,并且網(wǎng)絡(luò)節(jié)點(diǎn)210、220、230和240可以是該云計(jì)算環(huán)境內(nèi)的計(jì)算節(jié)點(diǎn)。
網(wǎng)絡(luò)200還包括存儲(chǔ)器250,網(wǎng)絡(luò)節(jié)點(diǎn)210、220、230和240可能潛在地從該存儲(chǔ)器250讀取或向其寫入。存儲(chǔ)器250可以位于單個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上,或者可以跨多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)而分布。作為示例,如果網(wǎng)絡(luò)系統(tǒng)200處于云計(jì)算環(huán)境中,則存儲(chǔ)器250可以是存儲(chǔ)節(jié)點(diǎn)。
第一網(wǎng)絡(luò)節(jié)點(diǎn)210具有在其上操作的應(yīng)用211的至少部分。第二網(wǎng)絡(luò)節(jié)點(diǎn)220具有在其上操作的、用于主應(yīng)用211的次級(jí)應(yīng)用221的至少部分。第三網(wǎng)絡(luò)節(jié)點(diǎn)230具有在其上的操作的、用于主應(yīng)用211的次級(jí)應(yīng)用231的至少部分。
為了提供應(yīng)用的高可用性,應(yīng)用211的次級(jí)版本(例如,副本)221、231在網(wǎng)絡(luò)系統(tǒng)200內(nèi)操作,并且與主應(yīng)用211相關(guān)聯(lián)。因此,在第一網(wǎng)絡(luò)節(jié)點(diǎn)210上運(yùn)行的應(yīng)用211可以考慮“主”應(yīng)用211。換言之,如果主應(yīng)用211由于任何原因(諸如主應(yīng)用211的軟件的故障或第一網(wǎng)絡(luò)節(jié)點(diǎn)210本身的故障)而停止正確操作,則次級(jí)應(yīng)用221和231之一準(zhǔn)備好至少大致在主應(yīng)用211停止之處繼續(xù),并且接管作為主應(yīng)用的角色。如果成為主應(yīng)用的次級(jí)應(yīng)用(例如,次級(jí)應(yīng)用221)也失敗,則其他次級(jí)應(yīng)用231大致可以在其他次級(jí)應(yīng)用221停止之處接管。在保證有兩層冗余的上下文中,如果主應(yīng)用211確實(shí)失敗,并且次級(jí)應(yīng)用221成為主應(yīng)用,則附加應(yīng)用(未示出)可能與目前的主應(yīng)用221相關(guān)聯(lián),從而維持兩級(jí)冗余。
應(yīng)用211可以是如下任何應(yīng)用,對(duì)這種應(yīng)用而言,高可用性可能是有利的。作為示例,應(yīng)用211可以是數(shù)據(jù)庫(kù)應(yīng)用,在這種情況下,次級(jí)應(yīng)用221和231可能是類似的(例如,副本)數(shù)據(jù)庫(kù)應(yīng)用。應(yīng)用211也可以是虛擬機(jī),在這種情況下,次級(jí)應(yīng)用221和231可能是類似的(例如,副本)虛擬機(jī)。應(yīng)用211也可以是操作系統(tǒng),在這種情況下,次級(jí)應(yīng)用221和231可能是類似的(例如,副本)操作系統(tǒng)。
每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)還包括用于該網(wǎng)絡(luò)節(jié)點(diǎn)的高速緩存。例如,網(wǎng)絡(luò)節(jié)點(diǎn)210、220和230具有對(duì)應(yīng)的高速緩存212、222和232,該對(duì)應(yīng)的高速緩存212、222和232可以用作相應(yīng)的本地應(yīng)用211、221和231的應(yīng)用高速緩存。例如,主應(yīng)用211從存儲(chǔ)器250讀取或向存儲(chǔ)器250寫入的數(shù)據(jù)可以被高速緩存在主應(yīng)用高速緩存212內(nèi)。在本文中描述的實(shí)施例中,向存儲(chǔ)器250的寫入由主應(yīng)用211執(zhí)行,而不是次級(jí)應(yīng)用221和231執(zhí)行,向存儲(chǔ)器250的這種寫入直接從應(yīng)用邏輯產(chǎn)生并從而導(dǎo)致數(shù)據(jù)被存儲(chǔ)在應(yīng)用高速緩存中。應(yīng)用高速緩存212、222和232可以是易失性的、非易失性的或其組合。此外,應(yīng)用高速緩存212、222和232可以是多于一級(jí)的高速緩存,并且因此表示潛在的多級(jí)高速緩存。
本文中稱為“主中心”實(shí)施例的一個(gè)實(shí)施例中,所有讀取操作都被引導(dǎo)到主應(yīng)用211,并且因此只有主應(yīng)用211通過(guò)從存儲(chǔ)器250讀取并且在主應(yīng)用高速緩存212中高速緩存讀取的內(nèi)容來(lái)響應(yīng)于讀取請(qǐng)求。次級(jí)應(yīng)用221和231僅響應(yīng)于主應(yīng)用高速緩存212中的變化來(lái)執(zhí)行讀取操作,以便應(yīng)用高速緩存222和232變得更加跟上主應(yīng)用高速緩存212。
本文中將另一實(shí)施例稱為“分布式讀取”實(shí)施例。在分布式讀取實(shí)施例中,應(yīng)用副本211、221和231中的任一個(gè)可以通過(guò)從存儲(chǔ)器250讀取數(shù)據(jù)、并且在相應(yīng)的應(yīng)用高速緩存212、222和232內(nèi)高速緩存所讀取的數(shù)據(jù),來(lái)對(duì)讀取請(qǐng)求做出響應(yīng)。雖然給出了這兩個(gè)具體實(shí)施例,但是本文中描述的一般原理絕不限于這些具體實(shí)施例。
在任一實(shí)施例中,對(duì)主應(yīng)用211的寫入請(qǐng)求也被嘗試,并且優(yōu)選地在次級(jí)應(yīng)用221和231處完成。因此,高速緩存狀態(tài)的差異可能是由于暴露于不同的讀取請(qǐng)求集合(例如,在主中心實(shí)施例中,次級(jí)應(yīng)用221和231根本不接收讀取請(qǐng)求)。但是,高速緩存狀態(tài)的一些差異可能是由于一個(gè)或多個(gè)次級(jí)應(yīng)用處的寫入請(qǐng)求失敗而導(dǎo)致。然而,在寫入請(qǐng)求失敗的情況下,也可能存在一致性問題,這些問題也應(yīng)當(dāng)被解決。在如下實(shí)施例中,其中在單個(gè)事務(wù)處理中以原子方式進(jìn)行對(duì)主應(yīng)用高速緩存的寫入和對(duì)次級(jí)應(yīng)用高速緩存的寫入,則所有差異將歸因于讀取請(qǐng)求的差異。
每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都具有在其上操作的分布式高速緩存復(fù)制模塊的部分。例如,網(wǎng)絡(luò)節(jié)點(diǎn)210、220和230具有存儲(chǔ)在其上的分布式高速緩存復(fù)制模塊的相應(yīng)部分213、223和233。部分213、223和233以如下目標(biāo)通信:應(yīng)用高速緩存222和232至少隨時(shí)間趨向于朝著與主應(yīng)用高速緩存相同的狀態(tài)移動(dòng)。這樣,如果主應(yīng)用211失敗,則次級(jí)應(yīng)用221或231之一可以以如下的應(yīng)用高速緩存狀態(tài)繼續(xù)進(jìn)行,該應(yīng)用高速緩存狀態(tài)至少比沒有分布式高速緩存復(fù)制模塊的操作更接近主應(yīng)用高速緩存212的狀態(tài)。
圖3示出了用于在次級(jí)應(yīng)用高速緩存中至少部分地復(fù)制主應(yīng)用高速緩存的方法300的流程圖。例如,方法300可以在圖2的網(wǎng)絡(luò)系統(tǒng)200中執(zhí)行,在該環(huán)境中,主應(yīng)用高速緩存是主應(yīng)用高速緩存212,并且次級(jí)應(yīng)用高速緩存是次級(jí)應(yīng)用高速緩存222和/或次級(jí)應(yīng)用高速緩存232。因此,圖3的方法300將經(jīng)常參考圖2的網(wǎng)絡(luò)系統(tǒng)200來(lái)描述。此外,圖4a至4c分別示出了環(huán)境200的各種狀態(tài)400a至400c。因此,圖3的方法300還將分別經(jīng)常參考圖4a至4c的狀態(tài)400a至400c來(lái)描述。首先,將關(guān)于圖4a至4c來(lái)描述主中心實(shí)施例。此后,這些原理將被擴(kuò)展以適用于分布式讀取實(shí)施例。
方法300的一些部分可以由分布式高速緩存復(fù)制模塊的部分(下文中稱為“源部分”)來(lái)執(zhí)行,該分布式高速緩存復(fù)制模塊與主應(yīng)用高速緩存駐留在同一網(wǎng)絡(luò)節(jié)點(diǎn)上。由源部分執(zhí)行的動(dòng)作在圖3的左列中在標(biāo)題“源部分”下被示出。方法300的其他部分可以由與次級(jí)應(yīng)用高速緩存駐留在同一網(wǎng)絡(luò)節(jié)點(diǎn)上的分布式高速緩存復(fù)制模塊的部分(下文中稱為“目標(biāo)部分”)來(lái)執(zhí)行。由目標(biāo)部分執(zhí)行的動(dòng)作在圖3的右欄中在標(biāo)題“目標(biāo)部分”下被示出。例如,在次級(jí)應(yīng)用高速緩存222和232朝向主應(yīng)用高速緩存212被復(fù)制的情況下,在第一網(wǎng)絡(luò)節(jié)點(diǎn)210上的分布式高速緩存復(fù)制模塊的部分213將是源部分,并且在第二和第三網(wǎng)絡(luò)節(jié)點(diǎn)220和230上的分布式高速緩存復(fù)制模塊的相應(yīng)的部分223和233每個(gè)分別是目標(biāo)部分的實(shí)例。部分223將用作用于次級(jí)應(yīng)用高速緩存222朝向主應(yīng)用高速緩存212的復(fù)制的目標(biāo)部分。部分233將用作用于次級(jí)應(yīng)用高速緩存232朝向主應(yīng)用高速緩存212的復(fù)制的目標(biāo)部分。
根據(jù)方法300,源部分標(biāo)識(shí)主應(yīng)用高速緩存內(nèi)的高速緩存部分的至少一些高速緩存部分標(biāo)識(shí)符(動(dòng)作311)。例如,圖4a示出了圖2的網(wǎng)絡(luò)系統(tǒng)200的狀態(tài)400a。圖4a中的網(wǎng)絡(luò)系統(tǒng)類似于圖2的網(wǎng)絡(luò)系統(tǒng),不同之處在于,示出了由于主應(yīng)用的操作而在主應(yīng)用高速緩存212內(nèi)的三個(gè)高速緩存部分401、402和403。源部分213標(biāo)識(shí)這些高速緩存部分401、402和403在主應(yīng)用高速緩存212內(nèi)。因此,相應(yīng)的標(biāo)識(shí)符411、412和413在源部分213內(nèi)。高速緩存部分401、402和403的標(biāo)識(shí)符411、412和413遠(yuǎn)小于高速緩存部分401、402和403本身。
在源部分標(biāo)識(shí)在主應(yīng)用高速緩存內(nèi)的高速緩存部分的至少一些高速緩存部分標(biāo)識(shí)符之后,源部分將用于所標(biāo)識(shí)的高速緩存部分中的至少一些的標(biāo)識(shí)符傳送到在另一網(wǎng)絡(luò)節(jié)點(diǎn)上操作的相應(yīng)的次級(jí)應(yīng)用(動(dòng)作312)。該通信被執(zhí)行(動(dòng)作312)以用于潛在的多個(gè)次級(jí)應(yīng)用。例如,圖4b示出了網(wǎng)絡(luò)系統(tǒng)200的后續(xù)狀態(tài)400b。具體地,源部分213將標(biāo)識(shí)符411、412、413中的至少一些傳送到目標(biāo)部分223,如箭頭421所示。因此,箭頭421表示源部分213執(zhí)行動(dòng)作312的一個(gè)實(shí)例。替代地或另外地,源部分213將標(biāo)識(shí)符411、412、413中的至少一些傳送到目標(biāo)部分233,如箭頭422所示。因此,箭頭422表示源部分213執(zhí)行動(dòng)作312的另一潛在實(shí)例。
在一些實(shí)施例中,所傳送的標(biāo)識(shí)符將取決于應(yīng)用的作用。例如,在圖4b中,次級(jí)應(yīng)用221在主應(yīng)用211發(fā)生故障的情況下或許將成為主應(yīng)用211的直接后繼者。此外,假設(shè)次級(jí)應(yīng)用231僅是后繼者的后繼者。在這種情況下,與對(duì)于針對(duì)第三應(yīng)用231進(jìn)行操作的目標(biāo)部分233相比,與對(duì)于針對(duì)次級(jí)應(yīng)用221進(jìn)行操作的目標(biāo)部分223的標(biāo)識(shí)可能更為完整。例如,在圖4b中,目標(biāo)部分223被示出為被通知所有的標(biāo)識(shí)符411、412和413,而目標(biāo)部分232被示出為僅被通知這些標(biāo)識(shí)符中的一些標(biāo)識(shí)符411和412。
作為另一示例,標(biāo)識(shí)符可以被限制為由于讀取操作而被放置到主應(yīng)用高速緩存中的那些高速緩存部分。因此,由于已知已經(jīng)在次級(jí)應(yīng)用高速緩存處也被成功完成的寫入操作而在主應(yīng)用高速緩存內(nèi)的高速緩存部分可能被排除在通信之外。
在接收到標(biāo)識(shí)符(動(dòng)作321)之后,目標(biāo)部分將在所傳送的高速緩存部分標(biāo)識(shí)符中所標(biāo)識(shí)的至少一個(gè)高速緩存部分取回到次級(jí)應(yīng)用高速緩存中(動(dòng)作322)。例如,圖4c示出了網(wǎng)絡(luò)系統(tǒng)200的后續(xù)狀態(tài)400c。具體地,目標(biāo)部分223接收標(biāo)識(shí)符(如箭頭421所示),并且目標(biāo)部分233也接收標(biāo)識(shí)符(如箭頭422所示)。目標(biāo)部分223通過(guò)將所標(biāo)識(shí)的高速緩存部分中的至少一個(gè)取回到次級(jí)應(yīng)用高速緩存222中(如虛線箭頭431所示)來(lái)響應(yīng)于接收到標(biāo)識(shí)符(如箭頭421所示)。目標(biāo)部分233通過(guò)將所標(biāo)識(shí)的高速緩存部分中的至少一個(gè)取回到次級(jí)應(yīng)用高速緩存232中(如虛線箭頭432所示)來(lái)響應(yīng)于接收到標(biāo)識(shí)符(如箭頭422所示)。
在一個(gè)實(shí)施例中,目標(biāo)部分將其被立即通知的所有高速緩存部分取回到相應(yīng)的次級(jí)應(yīng)用高速緩存中。這樣做會(huì)導(dǎo)致次級(jí)應(yīng)用高速緩存是主應(yīng)用高速緩存的實(shí)時(shí)的高保真復(fù)制。在其他實(shí)施例中,目標(biāo)源不立即取回一個(gè)或多個(gè)或潛在的所有高速緩存部分。在一些實(shí)施例中,可能完全不取回所標(biāo)識(shí)的高速緩存部分中的一個(gè)或多個(gè)。
作為示例,源部分可以執(zhí)行標(biāo)識(shí)動(dòng)作(動(dòng)作311)和傳送動(dòng)作(312)多次,以用于當(dāng)主應(yīng)用操作并且主應(yīng)用高速緩存內(nèi)的高速緩存部分的標(biāo)識(shí)改變時(shí),不同的所標(biāo)識(shí)的高速緩存部分標(biāo)識(shí)符。此外,目標(biāo)部分可以多次執(zhí)行取回所標(biāo)識(shí)的高速緩存部分的動(dòng)作(動(dòng)作322)。因此,隨著時(shí)間的推移,次級(jí)應(yīng)用高速緩存趨向于朝向與主應(yīng)用高速緩存相同的狀態(tài)的移動(dòng)目標(biāo)移動(dòng)。因此,如果由于主應(yīng)用的故障,次級(jí)應(yīng)用需要接管,則次級(jí)應(yīng)用高速緩存將比沒有這樣的復(fù)制嘗試的情況下更加溫暖和準(zhǔn)備就緒。
例如,與高速緩存部分本身相比,高速緩存部分標(biāo)識(shí)符可能非常小。因此,可以使用在主應(yīng)用高速緩存內(nèi)的標(biāo)識(shí)符來(lái)頻繁地更新目標(biāo)部分。然而,由于高速緩存部分本身大得多,所以與高速緩存部分被標(biāo)識(shí)的平均頻率相比,標(biāo)識(shí)的高速緩存部分被取回和放置到次級(jí)應(yīng)用高速緩存中的平均頻率可能不那么頻繁(例如,至少兩倍、一個(gè)數(shù)量級(jí)、幾個(gè)數(shù)量級(jí)甚至更多個(gè)數(shù)量級(jí))。這樣的較低頻率的取回可以利用效率,因?yàn)樵诟咚倬彺娌糠直粡椚牒蛷棾鲋鲬?yīng)用高速緩存的情況下,可以避免將該高速緩存部分加載到次級(jí)應(yīng)用高速緩存中。此外,如果溫暖信息也與每個(gè)標(biāo)識(shí)符相關(guān)聯(lián),則可以通過(guò)高速緩存部分的溫暖來(lái)將高速緩存部分取回到次級(jí)應(yīng)用高速緩存中來(lái)優(yōu)先化。
在圖4c的所示情況下,由于某種原因或另一原因,目標(biāo)部分223執(zhí)行其邏輯以確定,至于當(dāng)前,只有由標(biāo)識(shí)符411和412所標(biāo)識(shí)的高速緩存部分401和402將被取回到次級(jí)應(yīng)用高速緩存222中(參見箭頭431)。因此,高速緩存部分413可以稍后被取回。此外,由于某種原因或另一原因,目標(biāo)部分233執(zhí)行其邏輯以確定,至于當(dāng)前,只有由標(biāo)識(shí)符411所標(biāo)識(shí)的高速緩存部分401將被取回到次級(jí)應(yīng)用高速緩存222中(參見箭頭432)。因此,高速緩存部分412可以稍后被取回。
存在與將數(shù)據(jù)(諸如頁(yè)面)加載到本地應(yīng)用高速緩存中相關(guān)聯(lián)的一些網(wǎng)絡(luò)和計(jì)算資源。因此,依賴于各種參數(shù),源部分可以限制目標(biāo)部分被通知的標(biāo)識(shí)符,并且目標(biāo)部分可以限制實(shí)際上被取回到應(yīng)用高速緩存中的數(shù)據(jù)。例如,目標(biāo)部分被通知(動(dòng)作312)、以及目標(biāo)部分取回(動(dòng)作322)的進(jìn)取性(aggressiveness)可以取決于各種因素之一或組合,諸如目標(biāo)部分是否已經(jīng)被通知標(biāo)識(shí)符標(biāo)識(shí)了主應(yīng)用高速緩存內(nèi)的高速緩存部分,和/或所標(biāo)識(shí)的高速緩存部分是否已經(jīng)存在于次級(jí)高速緩存中。替代地或另外地,頻率還可以取決于相關(guān)聯(lián)的次級(jí)應(yīng)用的作用、次級(jí)應(yīng)用將成為主應(yīng)用(可能永遠(yuǎn)地或在一定時(shí)間范圍內(nèi))的似然估計(jì)、相關(guān)聯(lián)的高速緩存部分的熱度度量等。
關(guān)于熱度度量,在一個(gè)實(shí)施例中,源部分不僅傳送標(biāo)識(shí)符本身,而且還傳達(dá)相關(guān)聯(lián)的熱度量度,該相關(guān)聯(lián)的熱度量度與主應(yīng)用211已經(jīng)訪問高速緩存部分的頻率和/或新近度相關(guān)。圖5示出了所捕獲的高速緩存部分狀態(tài)500,該狀態(tài)500可以在動(dòng)作312中傳送。高速緩存部分狀態(tài)500包括用于相關(guān)聯(lián)的高速緩存部分的高速緩存部分501標(biāo)識(shí)符。此外,高速緩存部分狀態(tài)500可以可選地包括用于相關(guān)聯(lián)的高速緩存部分的一個(gè)或多個(gè)熱度量度510?!盁岫取倍攘渴侵概c不久之后可以由主應(yīng)用211訪問高速緩存部分的可能性相關(guān)的度量。由于溫度參考一種氣體分子與另一種氣體分子相互作用的頻率和可能性,所以在數(shù)據(jù)訪問領(lǐng)域也采用溫度來(lái)表示數(shù)據(jù)將被應(yīng)用訪問的可能性。當(dāng)然,部分?jǐn)?shù)據(jù)的溫度、熱度或溫度的確定是近似的估計(jì),并且不一定是確定性的,并且不是數(shù)據(jù)本身的函數(shù),而是應(yīng)用在歷史上如何與數(shù)據(jù)交互的函數(shù)。相對(duì)于一個(gè)應(yīng)用熱的數(shù)據(jù)可能相對(duì)于另一應(yīng)用是冷的。
注意,此外,作為將高速緩存部分取回到應(yīng)用高速緩存中(動(dòng)作322)的部分,目標(biāo)部分還可以從應(yīng)用高速緩存中釋放高速緩存部分。例如,如果通過(guò)動(dòng)作312的傳送,目標(biāo)部分能夠確定高速緩存部分不再在主應(yīng)用高速緩存內(nèi),則目標(biāo)部分可以從次級(jí)應(yīng)用高速緩存中釋放高速緩存部分(如果存在于其中)。當(dāng)然,在將高速緩存部分取回到應(yīng)用高速緩存中時(shí)所考慮的相同因素也可以當(dāng)確定要從應(yīng)用高速緩存釋放高速緩存部分時(shí)被考慮。這在高速緩存部分剛剛從主應(yīng)用高速緩存被釋放并且稍后被返回到主應(yīng)用高速緩存中的情況下可能會(huì)保留計(jì)算資源。通過(guò)引入一些延遲,次級(jí)網(wǎng)絡(luò)節(jié)點(diǎn)可以放棄釋放和重新取回應(yīng)用高速緩存。
至此,已經(jīng)描述了主中心實(shí)施例,其中首先對(duì)主應(yīng)用高速緩存212進(jìn)行由于應(yīng)用狀態(tài)改變而引起的更改。對(duì)次級(jí)應(yīng)用高速緩存222和232的任何更改都響應(yīng)于此。然而,在分布式讀取的實(shí)施例中,任何應(yīng)用高速緩存212、222和232可以首先響應(yīng)于讀取請(qǐng)求來(lái)改變,該讀取請(qǐng)求針對(duì)相應(yīng)的應(yīng)用副本211、221或231。在這種情況下,對(duì)于首先對(duì)次級(jí)應(yīng)用高速緩存222的任何變化,部分223充當(dāng)分布式高速緩存復(fù)制模塊的源部分,并且部分213和233充當(dāng)分布式高速緩存復(fù)制模塊的目標(biāo)部分。此外,對(duì)于首先對(duì)次級(jí)應(yīng)用高速緩存232的任何變化,部分233充當(dāng)分布式高速緩存復(fù)制模塊的源部分,并且部分213和223充當(dāng)分布式高速緩存復(fù)制模塊的目標(biāo)部分。
因此,已經(jīng)描述的是用于在其中存在分布式應(yīng)用副本操作的環(huán)境中復(fù)制應(yīng)用高速緩存的有效機(jī)制。依賴于計(jì)算系統(tǒng)、副本的作用、數(shù)據(jù)的溫暖、以及各種其他因素,復(fù)制可能是立即的或較不進(jìn)取的。因此,本文中描述的原理允許將平衡引入到這樣的分布式復(fù)制中。
在不脫離本發(fā)明的精神或基本特征的情況下,本發(fā)明可以以其他具體形式來(lái)實(shí)施。所描述的實(shí)施例僅在所有方面被認(rèn)為是說(shuō)明性的而不是限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求而不是以上描述來(lái)表示。在權(quán)利要求的等同物的含義和范圍內(nèi)的所有變化將被包括在其范圍內(nèi)。