国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于采用一致性散列的全局命名空間的方法與流程

      文檔序號:11773937閱讀:208來源:國知局
      用于采用一致性散列的全局命名空間的方法與流程

      相關(guān)申請的交互參考

      本申請是申請日為2013年10月24日、申請?zhí)枮?01380063506.0、發(fā)明名稱為“用于采用一致性散列的全局命名空間的方法”的發(fā)明專利申請的分案申請。



      背景技術(shù):

      存儲系統(tǒng)被要求存儲大量數(shù)據(jù)并且允許存儲容量隨時(shí)間縮放。傳統(tǒng)的縮放存儲容量的方法是與存儲池中的一個(gè)或多個(gè)存儲服務(wù)器相組合地包括一個(gè)或多個(gè)專用的元數(shù)據(jù)服務(wù)器。存儲服務(wù)器存儲客戶端數(shù)據(jù),并且元數(shù)據(jù)服務(wù)器存儲關(guān)于客戶端數(shù)據(jù)在存儲服務(wù)器內(nèi)的位置的元數(shù)據(jù)(而不存儲客戶端數(shù)據(jù))。隨著存儲容量要求增加,存儲服務(wù)器的數(shù)量可能增加,并且存儲在元數(shù)據(jù)服務(wù)器中的元數(shù)據(jù)的量也可能增加。

      在這樣的情況下,元數(shù)據(jù)服務(wù)器在i/o請求的處理中變?yōu)槠款i。就這點(diǎn)而論,前述的傳統(tǒng)方法不能在不影響(即延遲)與i/o請求的處理相關(guān)的性能的情況下高效地縮放存儲池。



      技術(shù)實(shí)現(xiàn)要素:

      概括地講,在一個(gè)方面,本發(fā)明涉及一種用于將數(shù)據(jù)寫到存儲池的方法。該方法包括:接收用于對象的虛擬標(biāo)識符(id)和偏移;從虛擬id提取標(biāo)識存儲池中的第一存儲服務(wù)器的節(jié)點(diǎn)標(biāo)識符(id);從第一存儲服務(wù)器獲取用于對象的對象布局(ol);對對象id和偏移id進(jìn)行散列變換以獲得散列值,其中,虛擬id包括對象id,并且其中,偏移id從偏移產(chǎn)生;使用全局命名空間布局(gl)、ol和散列值標(biāo)識存儲池中的第二存儲服務(wù)器;并且發(fā)出將數(shù)據(jù)寫到第二存儲服務(wù)器中的對象的寫請求,其中,寫請求包括對象id和偏移。

      概括地講,在一個(gè)方面,本發(fā)明涉及一種用于對于存儲池讀數(shù)據(jù)的方法。該方法包括:接收用于對象的虛擬id;從虛擬id提取標(biāo)識存儲池中的第一存儲服務(wù)器的節(jié)點(diǎn)標(biāo)識符(id);從第一存儲服務(wù)器獲得用于對象的對象布局(ol);對對象id和偏移id進(jìn)行散列變換以獲得散列值,其中,虛擬id包括對象id,并且其中,偏移id從偏移產(chǎn)生;使用全局命名空間布局(gl)、ol和散列值來使用一致性散列標(biāo)識存儲池中的第二存儲服務(wù)器;并且發(fā)出從第二存儲服務(wù)器中的對象讀數(shù)據(jù)的讀請求,其中,寫請求包括對象id和偏移。

      概括地講,在一個(gè)方面,本發(fā)明涉及一種用于將數(shù)據(jù)寫到存儲池的方法。該方法包括:接收對于新對象的請求;從存儲池選擇存儲服務(wù)器,其中,所述存儲服務(wù)器使用節(jié)點(diǎn)id標(biāo)識;請求所述存儲服務(wù)器產(chǎn)生虛擬id,其中,虛擬id包括節(jié)點(diǎn)id和用于對象的對象id;使用虛擬id產(chǎn)生用于對象的對象布局(ol);將ol存儲在所述存儲服務(wù)器中;接收將數(shù)據(jù)寫到對象的寫請求,其中,所述寫請求包括偏移;從偏移產(chǎn)生偏移id;對對象id和偏移id進(jìn)行散列變換以獲得散列值;使用全局命名空間布局(gl)、ol和散列值標(biāo)識存儲池中的第二存儲服務(wù)器;并且發(fā)出將數(shù)據(jù)寫到第二存儲服務(wù)器中的對象的寫請求,其中,寫請求包括對象id和偏移。

      從以下的描述和所附的權(quán)利要求書,本發(fā)明的其他方面將是清楚的。

      附圖說明

      圖1示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的系統(tǒng)。

      圖2a-2c示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系。

      圖3示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于初始化存儲池的流程圖。

      圖4示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于將存儲服務(wù)器添加到存儲池的流程圖。

      圖5示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于將客戶端連接到存儲池的流程圖。

      圖6示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于創(chuàng)建對象并且將數(shù)據(jù)存儲在該對象中的流程圖。

      圖7示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于將數(shù)據(jù)寫到存儲池中的先前創(chuàng)建的對象的流程圖。

      圖8示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于從存儲池中的對象讀數(shù)據(jù)的流程圖。

      圖9示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于刪除存儲池中的對象的流程圖。

      圖10a-10j示出實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的系統(tǒng)的例子。

      具體實(shí)施方式

      現(xiàn)在將參照附圖詳細(xì)描述本發(fā)明的特定實(shí)施例。在以下對于本發(fā)明的實(shí)施例的詳細(xì)描述中,闡述了許多特定細(xì)節(jié),以便提供本發(fā)明的更透徹的理解。然而,本領(lǐng)域的普通技術(shù)人員將清楚,本發(fā)明可以在沒有這些特定細(xì)節(jié)的情況下實(shí)施。在其他情況下,沒有詳細(xì)地描述公知的特征,以避免不必要地使描述復(fù)雜化。

      在以下對于圖1-10j的描述中,關(guān)于一個(gè)圖描述的任何組件在本發(fā)明的各種實(shí)施例中可以等同于關(guān)于任何其他的圖描述的一個(gè)或多個(gè)類似命名的組件。為簡潔起見,將不對于每個(gè)圖重復(fù)這些組件的描述。因此,每個(gè)圖的組件的每一個(gè)實(shí)施例通過引用并入,并且被假定為可選地存在于每一個(gè)具有一個(gè)或多個(gè)類似命名的組件的其他的圖內(nèi)。另外,根據(jù)本發(fā)明的各種實(shí)施例,一個(gè)圖的組件的任何描述要被解釋為可選的實(shí)施例,該可選的實(shí)施例可以是除了關(guān)于任何其他圖中的相應(yīng)的類似命名的組件描述的實(shí)施例之外另外實(shí)現(xiàn)、與這些實(shí)施例結(jié)合實(shí)現(xiàn)、或者代替這些實(shí)施例實(shí)現(xiàn)。

      概括地講,本發(fā)明的實(shí)施例涉及一種用于將數(shù)據(jù)存儲在存儲池中的方法和系統(tǒng)。更具體地講,本發(fā)明的實(shí)施例為存儲池提供全局命名空間,該全局命名空間與用于存儲池的全局命名空間布局(gl)和每一對象的對象布局(ol)相組合地使用一致性散列來確定存儲池中的對象的位置(一個(gè)或多個(gè))。

      在本發(fā)明的一個(gè)實(shí)施例中,所述系統(tǒng)不包括專用的元數(shù)據(jù)服務(wù)器;相反,用于對象的ol遍布存儲池分布。換句話說,每個(gè)存儲服務(wù)器包括ol和包括客戶端數(shù)據(jù)的對象的組合,其中,ol可以或者可以不與存儲在存儲服務(wù)器上的特定對象相關(guān)聯(lián)。因?yàn)楸景l(fā)明的實(shí)施例不包括專用的元數(shù)據(jù)服務(wù)器,所以本發(fā)明的實(shí)施例使得能夠在沒有延遲不利后果和與元數(shù)據(jù)服務(wù)器相關(guān)聯(lián)的縮放限制的情況下不受限制地縮放存儲池的容量。

      為了本發(fā)明的目的,i/o請求是如下的請求,該請求指定存儲在客戶端上的對象(即,數(shù)據(jù))的邏輯地址、或者存儲在操作地連接到客戶端的存儲器或永久性儲存器中的對象的邏輯地址。i/o請求還可以包括其他信息,諸如對象的大小。在本發(fā)明的一個(gè)實(shí)施例中,邏輯地址可以是n元組:<對象id,偏移>。在不脫離本發(fā)明的情況下,可以使用任何類型的邏輯地址。i/o請求的例子包括但不限于,讀請求(即,從存儲在存儲池中的對象獲得數(shù)據(jù)的請求)和寫請求(即,將數(shù)據(jù)寫到存儲池中的對象的請求)。

      圖1示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的系統(tǒng)。該系統(tǒng)包括一個(gè)或多個(gè)客戶端(100a、100b)、通信結(jié)構(gòu)(104)和存儲池(112),存儲池(112)包括一個(gè)或多個(gè)存儲服務(wù)器(106a、106b)。下面描述這些組件中的每個(gè)。

      在本發(fā)明的一個(gè)實(shí)施例中,客戶端(100a、100b)是包括向存儲服務(wù)器(106a、106b)發(fā)出i/o請求的任何物理系統(tǒng)。在本發(fā)明的一個(gè)實(shí)施例中,客戶端可以包括處理器(未示出)、存儲器(未示出)和永久性儲存器(未示出)??蛻舳诉€包括執(zhí)行一個(gè)或多個(gè)應(yīng)用程序(未示出)的功能。應(yīng)用程序可以是用戶級應(yīng)用程序和/或內(nèi)核級應(yīng)用程序。應(yīng)用程序被配置為發(fā)出i/o請求,其中,應(yīng)用程序發(fā)出的i/o請求被存儲控制器裝置驅(qū)動器(scdd)(102a、102b)接收和處理。

      存儲控制器裝置驅(qū)動器(scdd)(102a、102b)被配置為根據(jù)圖5-9中所示的實(shí)施例接收和處理i/o請求。在本發(fā)明的一個(gè)實(shí)施例中,scdd在客戶端的用戶級(與內(nèi)核級完全不同)上執(zhí)行。

      在本發(fā)明的一個(gè)實(shí)施例中,存儲池(112)包括一個(gè)或多個(gè)存儲服務(wù)器(106a、106b),其中,每個(gè)存儲服務(wù)器包括存儲控制器(108a、108b)和儲存器(110a、110b)。

      存儲控制器(108a、108b)被配置為實(shí)現(xiàn)本發(fā)明的根據(jù)圖3-9的各種實(shí)施例。在本發(fā)明的一個(gè)實(shí)施例中,存儲控制器包括被配置為執(zhí)行實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的指令的處理器(未示出),其中,這些指令被存儲在位于存儲控制器內(nèi)的或者操作地連接到存儲控制器的非暫時(shí)性計(jì)算機(jī)可讀介質(zhì)(未示出)上。可替代地,存儲控制器可以使用被配置為提供前述功能的集成電路來實(shí)現(xiàn)??商娲?,存儲控制器可以使用fpga、asic、其他專門的硬件或者它們的任何組合來實(shí)現(xiàn)。在不脫離本發(fā)明的情況下,存儲控制器可以使用軟件和/或硬件的任何組合來實(shí)現(xiàn)。

      在本發(fā)明的一個(gè)實(shí)施例中,儲存器(110a、110b)包括一個(gè)或多個(gè)永久性存儲裝置,包括,但不限于,磁性存儲裝置、光學(xué)存儲裝置、固態(tài)存儲裝置、相變存儲裝置、任何其他合適類型的永久性存儲裝置、或者它們的任何組合。

      在本發(fā)明的一個(gè)實(shí)施例中,通信結(jié)構(gòu)(104)使得客戶端(100a、100b)與存儲池(112)之間能夠通信。通信結(jié)構(gòu)可以使用任何有線、無線或混合(有線和無線)連接來使得客戶端(100a、100b)與存儲池(112)之間能夠通信。

      通信結(jié)構(gòu)可以包括單個(gè)交換機(jī)或多個(gè)互連的交換機(jī)(未示出)。如果通信結(jié)構(gòu)包括多個(gè)交換機(jī),則每個(gè)交換機(jī)可以連接到每一個(gè)其他的交換機(jī),可以連接到交換機(jī)結(jié)構(gòu)中的交換機(jī)的子集,或者可以僅連接到一個(gè)其他的交換機(jī)。在本發(fā)明的一個(gè)實(shí)施例中,每個(gè)交換機(jī)是被配置為使得客戶端(100a、100b)與存儲池(112)之間可以通信的硬件和邏輯的組合(例如使用集成電路實(shí)現(xiàn))(根據(jù)通信結(jié)構(gòu)實(shí)現(xiàn)的協(xié)議定義)。

      通信結(jié)構(gòu)可以促進(jìn)使用任何通信協(xié)議的通信。這樣的通信協(xié)議的例子可以包括,但不限于,外圍組件互連(pci)、pci-express(pcie)、pci-extended(pci-x)、非易失性存儲器高速(nvme)、通過pci-express結(jié)構(gòu)的非易失性存儲器高速(nvme)、通過以太網(wǎng)結(jié)構(gòu)的非易失性存儲器高速(nvme)、以及通過無限帶寬結(jié)構(gòu)的非易失性存儲器高速(nvme)。本發(fā)明不限于前述協(xié)議。

      在不脫離本發(fā)明的情況下,可以使用除了圖1中所示的系統(tǒng)配置之外的系統(tǒng)配置。

      圖2a-2c示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系。

      全局命名空間布局(gl)指定存儲池(或者其一部分)在該存儲池(或者其該部分)的壽命期間的狀態(tài)。在給定時(shí)間,存儲池的狀態(tài)指定(i)在存儲池中哪些存儲服務(wù)器是可寫的,以及(ii)存儲池中可寫的存儲服務(wù)器之間的寫分布。更具體地講,當(dāng)數(shù)據(jù)可以被寫到存儲服務(wù)器上的對象時(shí),該存儲服務(wù)器被視為“可寫的”。就這點(diǎn)而論,可能存在如下的情況,即,在存儲池中存在n個(gè)存儲服務(wù)器,但是僅m個(gè)存儲服務(wù)器是“可寫的”,其中,m<n。不管存儲服務(wù)器是否是“可寫的”,該存儲服務(wù)器都可以根據(jù)例如圖8為讀請求服務(wù)。關(guān)于可寫的存儲服務(wù)器之間的寫分布,可寫的存儲服務(wù)器之間的寫分布確定用于給定對象的數(shù)據(jù)可以被存儲到這些可寫的存儲器服務(wù)器中的哪些。換句話說,當(dāng)寫請求被接收到時(shí),可寫的存儲服務(wù)器之間的寫分布確定數(shù)據(jù)最終將被存儲到存儲服務(wù)器中的哪些。

      翻到圖2a,gl(200)包括gl序號(202)、節(jié)點(diǎn)計(jì)數(shù)(204)以及一個(gè)或多個(gè)服務(wù)器條目(206a、206b)。下面描述這些組件中的每個(gè)。

      gl序號(202)唯一地標(biāo)識在存儲池的整個(gè)壽命期間的gl的版本。節(jié)點(diǎn)計(jì)數(shù)(204)指定在存儲池中的存儲服務(wù)器的數(shù)量;然而,如上所述,并非所有的存儲服務(wù)器都是“可寫的”。

      每個(gè)服務(wù)器條目(206a、206b)指定特定服務(wù)器在給定時(shí)間的寫分布。更具體地講,服務(wù)器條目可以包括,但不限于,(i)唯一地標(biāo)識存儲池中的(或者存儲池的與gl相關(guān)聯(lián)的部分內(nèi)的)存儲服務(wù)器的節(jié)點(diǎn)標(biāo)識符(id)(208a、208b)、(ii)一個(gè)或多個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)(210a、210b)(下面描述)、以及(iii)指定該服務(wù)器條目適用的gl序號的節(jié)點(diǎn)序號(212a、212b)。

      關(guān)于節(jié)點(diǎn)標(biāo)點(diǎn),散列函數(shù)應(yīng)用于每個(gè)節(jié)點(diǎn)id以產(chǎn)生一個(gè)或多個(gè)值,其中,這些值映射到數(shù)值范圍[0,…,n]。這些值隨后除以n,從而得到映射到數(shù)值范圍[0,…,1]的節(jié)點(diǎn)標(biāo)點(diǎn),這些節(jié)點(diǎn)標(biāo)點(diǎn)從概念上講可以被看作單位圓(即,半徑為1的圓)。用于所有存儲服務(wù)器的在數(shù)值范圍[0,…,1]內(nèi)的節(jié)點(diǎn)標(biāo)點(diǎn)的數(shù)量和分布描述存儲服務(wù)器在特定gl序號的寫分布。如果特定存儲服務(wù)器在給定gl序號不具有節(jié)點(diǎn)標(biāo)點(diǎn),則該特定存儲服務(wù)器在該gl序號不是“可寫的”。在不脫離本發(fā)明的情況下,寫分布可以使用其他的有限數(shù)值范圍(即,除了[0,…,1]之外的數(shù)值范圍)來指定。

      在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)(i)用于存儲池(或者其一部分)中的任何一個(gè)存儲服務(wù)器的節(jié)點(diǎn)標(biāo)點(diǎn)(一個(gè)或多個(gè))改變、或者(ii)新的存儲服務(wù)器被添加到存儲池(參見例如圖4)時(shí),gl序號被更新。用于一個(gè)或多個(gè)存儲服務(wù)器的節(jié)點(diǎn)標(biāo)點(diǎn)(一個(gè)或多個(gè))可以基于每個(gè)存儲服務(wù)器的空閑的存儲容量而被修改,以便使寫偏向于一個(gè)或多個(gè)存儲服務(wù)器和/或遠(yuǎn)離一個(gè)或多個(gè)存儲服務(wù)器??商娲兀糜谝粋€(gè)或多個(gè)存儲服務(wù)器的節(jié)點(diǎn)標(biāo)點(diǎn)(一個(gè)或多個(gè))可以被修改,以便確保當(dāng)新的存儲服務(wù)器添加到存儲池時(shí)存儲池中的存儲服務(wù)器之間的數(shù)據(jù)分布是均勻的??商娲兀糜谝粋€(gè)或多個(gè)存儲服務(wù)器的節(jié)點(diǎn)標(biāo)點(diǎn)(一個(gè)或多個(gè))可以被修改,以便將單個(gè)的服務(wù)器的帶寬和/或i/o請求處理能力考慮在內(nèi)。

      圖2b示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的對象布局(ol)。ol(214)包括ol序號(216)、虛擬id(vid)(218)以及條帶寬度(224)。下面描述這些組件中的每個(gè)。

      ol序號(216)對應(yīng)于與ol(214)相應(yīng)的對象第一次被創(chuàng)建時(shí)gl(200)的gl序號(202)。虛擬id(218)包括節(jié)點(diǎn)id(220)和對象id(222)。節(jié)點(diǎn)id(220)標(biāo)識產(chǎn)生vid(218)并且包括vid(218)的副本(通常存儲在適當(dāng)?shù)膐l中,參見例如圖6)的存儲服務(wù)器。對象id(222)在全局命名空間中唯一地標(biāo)識對象(即,對象id對于全局命名空間橫跨的存儲服務(wù)器中的所有其他的對象id都是唯一的)。條帶寬度(224)對應(yīng)于在前進(jìn)到gl中的下一個(gè)存儲服務(wù)器標(biāo)點(diǎn)之前順序地傳送到存儲服務(wù)器(gl標(biāo)識)的數(shù)據(jù)單位。例如,如果條帶寬度(sw)是64kb,并且將被寫到存儲池的對象用對象id和偏移(o)=256k標(biāo)識,并且將被寫到對象的數(shù)據(jù)的大小是128kb,則將發(fā)出兩個(gè)寫請求,其中,每個(gè)請求包括64kb的數(shù)據(jù),并且其中,每個(gè)寫請求可以由不同的存儲服務(wù)器服務(wù)。具體地講,用于對象的ol使用散列<vid,-1>標(biāo)識。用于第一個(gè)64kb的第一個(gè)寫請求被發(fā)到使用散列<對象id,256>和gl標(biāo)識的存儲服務(wù)器,和用于第二個(gè)64kb的第二個(gè)寫請求被發(fā)到使用散列<對象id,256+64>和gl標(biāo)識的存儲服務(wù)器。下面描述使用前述散列值的特定存儲服務(wù)器的選擇。在本發(fā)明的一個(gè)實(shí)施例中,條帶寬度被設(shè)置為等于存儲服務(wù)器和/或通信結(jié)構(gòu)所支持的最大傳輸單位(mtu)。

      在存儲池中對于每個(gè)對象存在單個(gè)ol。在本發(fā)明的一個(gè)實(shí)施例中,一旦被創(chuàng)建,用于對象的ol就不會改變。ol用于標(biāo)識與ol相應(yīng)的對象被創(chuàng)建時(shí)gl的狀態(tài)。通過該信息,對象(或者其一部分)可以被安置在存儲池中。(參見例如圖7和8)。

      圖2c示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的散列值與物理存儲位置之間的關(guān)系。每個(gè)ol具有唯一的vid,并且被存儲在節(jié)點(diǎn)id所標(biāo)識的存儲服務(wù)器中的至少一個(gè)物理位置中,節(jié)點(diǎn)id在vid中指定。(參見例如圖2b,218)。在本發(fā)明的一個(gè)實(shí)施例中,物理存儲位置(228)(即,存儲ol的物理位置)映射到節(jié)點(diǎn)id所標(biāo)識的存儲服務(wù)器中的散列表?xiàng)l目。散列表?xiàng)l目與通過對<vid,-1>(226)進(jìn)行散列變換而產(chǎn)生的散列值相關(guān)聯(lián)。散列表?xiàng)l目還可以包括ol的副本在存儲服務(wù)器的非易失性存儲器中的位置。在不脫離本發(fā)明的情況下,可以使用任何散列函數(shù)和任何特殊偏移(不只是-1)。

      圖3-9示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的流程圖。雖然每個(gè)流程圖中的各個(gè)步驟是按順序呈現(xiàn)和描述的,但是普通技術(shù)人員將意識到,這些步驟中的一些或全部可以按不同次序執(zhí)行,可以組合或省略,并且這些步驟中的一些或全部可以并行執(zhí)行。在本發(fā)明的一個(gè)實(shí)施例中,圖3-9中所示的一個(gè)或多個(gè)步驟可以與圖3-9中所示的一個(gè)或多個(gè)其他并行執(zhí)行。

      圖3示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于初始化存儲池的流程圖。圖3中所示的處理可以由存儲池中的一個(gè)存儲服務(wù)器執(zhí)行,或者由系統(tǒng)中的客戶端之一執(zhí)行。在步驟300中,標(biāo)識將被包括在存儲池中的存儲服務(wù)器。在步驟302中,選擇在步驟300中標(biāo)識的存儲服務(wù)器之一。在步驟304中,獲得用于在步驟302中選擇的存儲服務(wù)器的節(jié)點(diǎn)id。可以使用任何已知的用于獲得和/或產(chǎn)生id的機(jī)制來獲得和/或產(chǎn)生節(jié)點(diǎn)id。

      在步驟306中,將散列函數(shù)應(yīng)用于節(jié)點(diǎn)id以獲得一個(gè)或多個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)??梢曰诳蛻舳酥付ǖ牟呗?、基于一個(gè)或多個(gè)存儲服務(wù)器指定的策略、或者基于與存儲池相關(guān)聯(lián)的默認(rèn)策略來確定分配給給定的存儲服務(wù)器的節(jié)點(diǎn)標(biāo)點(diǎn)的數(shù)量。在步驟308中,創(chuàng)建與在步驟302中標(biāo)識的存儲服務(wù)器相應(yīng)的服務(wù)器條目,并且使用節(jié)點(diǎn)id、節(jié)點(diǎn)標(biāo)點(diǎn)(一個(gè)或多個(gè))和節(jié)點(diǎn)序號來填充該服務(wù)器條目。節(jié)點(diǎn)序號對應(yīng)于當(dāng)前gl序號。例如,如果服務(wù)器條目是在gl序號為0時(shí)創(chuàng)建的,則節(jié)點(diǎn)序號被設(shè)置為0。圖3示出初始gl的產(chǎn)生。因此,即使gl中的gl序號在這個(gè)階段可能未在gl中正式設(shè)置,gl序號也將是初始gl序號值,例如,1,就這點(diǎn)而論,節(jié)點(diǎn)序號可以在正式設(shè)置初始gl之前被設(shè)置。

      在步驟310中,確定是否存在附加的要處理的存儲服務(wù)器。如果存在附加的要處理的存儲服務(wù)器,則所述處理進(jìn)入步驟302;否則,所述處理進(jìn)入步驟312。在步驟312中,在gl中設(shè)置gl序號。圖3示出初始gl的產(chǎn)生。因此,gl序號被設(shè)置為初始gl序號值,例如,1。在步驟314中,設(shè)置節(jié)點(diǎn)計(jì)數(shù),其中,節(jié)點(diǎn)計(jì)數(shù)對應(yīng)于存儲池中的存儲服務(wù)器的數(shù)量。在步驟316中,將gl存儲在存儲池中的每個(gè)服務(wù)器中。

      圖4示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于將存儲服務(wù)器添加到存儲池的流程圖。在步驟400中,標(biāo)識要添加到存儲池的附加的存儲服務(wù)器。通常,該步驟在圖3中所示的處理已經(jīng)被執(zhí)行之后的時(shí)刻(例如,當(dāng)添加附加的存儲服務(wù)器來增加存儲池的存儲容量時(shí))發(fā)生。

      在步驟402中,獲得用于所述附加的存儲服務(wù)器的節(jié)點(diǎn)id??梢允褂萌魏我阎挠糜讷@得和/或產(chǎn)生id的機(jī)制來獲得和/或產(chǎn)生節(jié)點(diǎn)id。在步驟404中,將散列函數(shù)應(yīng)用于節(jié)點(diǎn)id以獲得一個(gè)或多個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)。節(jié)點(diǎn)標(biāo)點(diǎn)(一個(gè)或多個(gè))可以以使得新的寫請求偏向于所述附加的存儲服務(wù)器的方式產(chǎn)生。在步驟406中,創(chuàng)建與在步驟400中標(biāo)識的附加的存儲服務(wù)器相應(yīng)的服務(wù)器條目,并且使用節(jié)點(diǎn)id、節(jié)點(diǎn)標(biāo)點(diǎn)(一個(gè)或多個(gè))和節(jié)點(diǎn)序號來填充該服務(wù)器條目。節(jié)點(diǎn)序號對應(yīng)于當(dāng)前gl序號加1。將服務(wù)器條目添加到gl來獲得更新的gl。

      在步驟408中,在更新的gl中更新gl序號。例如,將gl序號加1。用于在步驟406中創(chuàng)建的服務(wù)器條目的節(jié)點(diǎn)序號等于更新的gl序號。在步驟410中,更新節(jié)點(diǎn)計(jì)數(shù)來反映存儲池中的附加的存儲服務(wù)器。在步驟412中,將更新的gl存儲在存儲池中的每個(gè)服務(wù)器中。在本發(fā)明的一個(gè)實(shí)施例中,在每個(gè)存儲服務(wù)器上僅存儲一個(gè)gl,就這點(diǎn)而論,當(dāng)更新的gl被存儲服務(wù)器接收時(shí),以前的gl被從該存儲服務(wù)器刪除或者以其他方式從該存儲服務(wù)器移除。在本發(fā)明的一個(gè)實(shí)施例中,更新的gl可以由存儲服務(wù)器根據(jù)圖5中所描述的處理而獲得。

      圖5示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于將客戶端連接到存儲池的流程圖。在本發(fā)明的一個(gè)實(shí)施例中,圖5中所示的處理由scdd(圖1中的102a、102b)執(zhí)行。

      在步驟500中,存儲池中的存儲服務(wù)器之一從客戶端接收連接請求。在步驟502中,響應(yīng)于連接請求,存儲服務(wù)器將其當(dāng)前的gl提供給客戶端。在步驟504中,客戶端確定它是否已經(jīng)具有g(shù)l。在本發(fā)明的一個(gè)實(shí)施例中,如果客戶端先前已經(jīng)連接到了存儲池中的另一個(gè)存儲服務(wù)器,則該客戶端已經(jīng)包括gl(該gl可以或者可以不與在步驟502中獲得的當(dāng)前gl相同)。如果客戶端已經(jīng)具有另一個(gè)gl,則所述處理進(jìn)入步驟506;否則,所述處理結(jié)束。

      在步驟506中,確定在步驟502中獲得的gl是否是用于存儲池的最當(dāng)前的gl。更具體地講,確定在步驟502中獲得的gl的序號是否大于客戶端先前獲得的gl的序號。如果在步驟502中獲得的gl的序號大于客戶端先前獲得的gl的序號,則所述處理進(jìn)入步驟508;否則,所述處理結(jié)束。在步驟508中,客戶端將先前存儲的gl(即,具有比它提供給客戶端的gl的gl序號大的gl序號的gl)發(fā)送到存儲服務(wù)器。

      圖6示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于創(chuàng)建對象并且將數(shù)據(jù)存儲在該對象中的流程圖。在本發(fā)明的一個(gè)實(shí)施例中,圖6中所示的處理由scdd(圖1中的102a、102b)執(zhí)行。

      在步驟600中,接收創(chuàng)建新對象的請求。在本發(fā)明的一個(gè)實(shí)施例中,該請求由在客戶端上執(zhí)行的應(yīng)用程序發(fā)出,并且被scdd接收。

      在步驟602中,選擇存儲服務(wù)器。在本發(fā)明的一個(gè)實(shí)施例中,從存儲池隨機(jī)地選擇或者使用圓羅賓(roundrobin)算法選擇存儲服務(wù)器。在不脫離本發(fā)明的情況下,可以使用任何的從存儲池選擇存儲服務(wù)器的方法。

      在步驟604中,將產(chǎn)生新的虛擬id(vid)的請求發(fā)送到在步驟602中標(biāo)識的存儲服務(wù)器。vid包括節(jié)點(diǎn)id,節(jié)點(diǎn)id標(biāo)識存儲服務(wù)器,和對象id,對象id標(biāo)識存儲池中的新對象。

      在步驟606中,創(chuàng)建用于對象的對象布局(ol)。ol可以由存儲服務(wù)器或者由scdd創(chuàng)建。具體地講,存儲服務(wù)器和scdd都包括填充用于對象的ol所必需的信息。

      在步驟608中,對<vid,-1>進(jìn)行散列變換以獲得第一散列值。如以上所討論的,在不脫離本發(fā)明的情況下,可以使用任何的特殊偏移(除了-1之外)。在步驟610中,使用第一散列值將用于對象的ol存儲在存儲服務(wù)器中。如上所述,第一散列值與存儲服務(wù)器上的散列表?xiàng)l目相關(guān)聯(lián),其中,散列表?xiàng)l目與存儲服務(wù)器的儲存器中的存儲ol的至少一個(gè)物理位置相關(guān)聯(lián)。在這個(gè)階段,對象和相應(yīng)的ol已經(jīng)被創(chuàng)建;然而,數(shù)據(jù)尚未被存儲在對象中。下列步驟描述數(shù)據(jù)最初是如何存儲在對象中的。

      在步驟612中,對<對象id,偏移id>進(jìn)行散列變換以獲得第二散列值。更具體地講,客戶端上的應(yīng)用程序請求與vid和偏移相關(guān)聯(lián)的數(shù)據(jù)被存儲在對象中。作為響應(yīng),scdd從vid獲得對象id,和偏移id則通過將基于條帶寬度的位掩碼應(yīng)用于偏移而獲得。

      在步驟614中,使用用于對象的第二散列值、gl和ol來標(biāo)識存儲池中的目標(biāo)存儲服務(wù)器。更具體地講,從ol提取ol序號,并且使用該ol序號來確定當(dāng)ol被創(chuàng)建時(shí)哪些存儲服務(wù)器是“可寫的”。在本發(fā)明的一個(gè)實(shí)施例中,確定哪些存儲服務(wù)器是“可寫的”包括:(i)標(biāo)識所有的具有小于或等于ol序號的節(jié)點(diǎn)序號的服務(wù)器條目;(ii)分析任何的具有相同的節(jié)點(diǎn)id的服務(wù)器條目以確定當(dāng)ol被創(chuàng)建時(shí)可寫的一個(gè)或多個(gè)節(jié)點(diǎn)標(biāo)點(diǎn);(iii)從(i)和(ii)產(chǎn)生最終的一組節(jié)點(diǎn)標(biāo)點(diǎn);以及(iv)使用一致性散列、連同第二散列值和節(jié)點(diǎn)標(biāo)點(diǎn)來標(biāo)識目標(biāo)服務(wù)器。關(guān)于圖10a-10j進(jìn)一步描述一致性散列。

      以下是確定當(dāng)ol被創(chuàng)建時(shí)哪些存儲服務(wù)器是“可寫的”的例子。這個(gè)例子并非意圖限制本發(fā)明的范圍。

      考慮gl具有下列服務(wù)器條目的情況:

      e1:[nodea,[a1,a2],s1]

      e2:[nodea,[a3],s2]

      e3:[nodeb,[b1],s1]

      e4:[nodec,[c1,c2],s2]

      e5:[noded,[d1],s3]

      進(jìn)一步,用于對象的ol如下:

      ol:[s2,vid,sw]

      因此,具有小于或等于ol序號的節(jié)點(diǎn)序號的服務(wù)器條目是e1、e2、e3和e4。此外,e1和e2具有相同的節(jié)點(diǎn)id,即,節(jié)點(diǎn)a,但是具有在不同節(jié)點(diǎn)序號的不同節(jié)點(diǎn)標(biāo)點(diǎn),因此,對e1和e2進(jìn)行分析以確定哪些節(jié)點(diǎn)應(yīng)與在s2被標(biāo)識為節(jié)點(diǎn)a的存儲服務(wù)器相關(guān)聯(lián)。在這個(gè)例子中,在s2,僅存在一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)a3。因此,最終的一組節(jié)點(diǎn)標(biāo)點(diǎn)是a3、b1、c1和c2。

      繼續(xù)參照圖6,在步驟616,將數(shù)據(jù)存儲在對象中的寫請求發(fā)送到目標(biāo)服務(wù)器,其中,該請求標(biāo)識對象id和偏移。在不脫離本發(fā)明的情況下,前述請求可以使用任何邏輯地址。

      圖7示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于將數(shù)據(jù)寫到存儲池中的先前創(chuàng)建的對象的流程圖。在本發(fā)明的一個(gè)實(shí)施例中,圖7中所示的處理由scdd(圖1中的102a、102b)執(zhí)行。

      在步驟700中,接收<vid,offset>。在步驟702中,從vid提取節(jié)點(diǎn)id。在步驟704中,對<vid,-1>進(jìn)行散列變換以獲得第一散列值。如上所述,在不脫離本發(fā)明的情況下,可以使用任何的特殊偏移(除了-1之外)。在步驟706中,使用第一散列值從節(jié)點(diǎn)id所標(biāo)識的存儲服務(wù)器獲得ol。如果scdd以前獲得了ol(例如,當(dāng)執(zhí)行圖6中的各個(gè)步驟時(shí)),則步驟702-706可能不需要執(zhí)行,相反,客戶端可以使用先前高速緩存的ol。

      在步驟708中,對<objectid,offsetid>進(jìn)行散列變換以獲得第二散列值。在本發(fā)明的一個(gè)實(shí)施例中,對象id從vid獲得,偏移id則通過將基于條帶寬度的位掩碼應(yīng)用于偏移而獲得。在步驟710中,使用用于對象的第二散列值、gl和ol標(biāo)識存儲池中的目標(biāo)存儲服務(wù)器。使用與圖6中的步驟614中所描述的處理相同的處理標(biāo)識目標(biāo)服務(wù)器。在步驟712中,將數(shù)據(jù)存儲在對象中的請求發(fā)送到目標(biāo)服務(wù)器,其中,該請求指定對象id和偏移。在不脫離本發(fā)明的情況下,前述請求可以使用任何邏輯地址。在步驟714中,確定目標(biāo)存儲服務(wù)器是否包括ol。如果目標(biāo)存儲服務(wù)器包括ol,則所述處理結(jié)束;否則,所述處理進(jìn)入步驟716。在步驟716中,使用第一散列值將ol存儲在目標(biāo)存儲服務(wù)器中。以這種方式,將給定ol的附加副本存儲在存儲池中的各個(gè)存儲服務(wù)器中。這使得客戶端可以使用散列<vid,-1>來獲得用于除了節(jié)點(diǎn)id所標(biāo)識的服務(wù)器之外的服務(wù)器的ol。

      圖8示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于從存儲池中的對象讀數(shù)據(jù)的流程圖。在本發(fā)明的一個(gè)實(shí)施例中,圖8中所示的處理由scdd(圖1中的102a、102b)執(zhí)行。

      在步驟800中,接收<vid,偏移>。在步驟802中,從vid提取節(jié)點(diǎn)id。在步驟804中,對<vid,-1>進(jìn)行散列變換以獲得第一散列值。如以上所討論的,在不脫離本發(fā)明的情況下,可以使用任何的特殊偏移(除了-1之外)。在步驟806中,使用第一散列值從節(jié)點(diǎn)id所標(biāo)識的存儲服務(wù)器獲得ol。如果scdd先前已經(jīng)獲得了ol,則步驟802-806可能不需要執(zhí)行。相反,scdd可以搜索客戶端來獲得ol。

      在步驟808中,對<對象id,偏移id>進(jìn)行散列變換以獲得第二散列值。在本發(fā)明的一個(gè)實(shí)施例中,對象id從vid獲得,偏移id則通過將基于條帶寬度的位掩碼應(yīng)用于偏移而獲得。在步驟810中,使用用于對象的第二散列值、gl和ol來標(biāo)識存儲池中的目標(biāo)存儲服務(wù)器。使用與在圖6中的步驟614中所描述的處理相同的處理來標(biāo)識目標(biāo)服務(wù)器。在步驟812中,將對象中的讀請求發(fā)送到目標(biāo)服務(wù)器,其中,該請求指定對象id和偏移。在不脫離本發(fā)明的情況下,前述請求可以使用任何邏輯地址。

      圖9示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于刪除存儲池中的對象的流程圖。在本發(fā)明的一個(gè)實(shí)施例中,圖9中所示的處理由scdd(圖1中的102a、102b)執(zhí)行和/或發(fā)起。

      在步驟900中,獲得vid,其中,該vid對應(yīng)于將從存儲池刪除的對象。在步驟902中,從vid提取節(jié)點(diǎn)id。在步驟904中,對<vid,-1>進(jìn)行散列變換以獲得第一散列值。如上所述,在不脫離本發(fā)明的情況下,可以使用任何的特殊偏移(除了-1之外)。在步驟906中,將刪除標(biāo)志寫到通過節(jié)點(diǎn)id標(biāo)識的存儲服務(wù)器中、與第一散列值相應(yīng)的散列表?xiàng)l目。在步驟908中,使存儲池中的所有的其他的存儲服務(wù)器中的所有的與第一散列值相應(yīng)的散列表?xiàng)l目失效。在步驟910中,使通過節(jié)點(diǎn)id標(biāo)識的存儲服務(wù)器中的與第一散列值相應(yīng)的散列表?xiàng)l目失效。在這個(gè)階段,可以使用任何已知的存儲回收算法來回收先前分配給存儲現(xiàn)在失效的對象和/或ol的物理儲存器。

      圖10a-10j示出根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的例子。例子并非意圖限制本發(fā)明的范圍。此外,在圖10a-10j中,為清晰起見,省略了客戶端和存儲服務(wù)器中的各種組件。

      考慮系統(tǒng)包括連接到最初包括兩個(gè)存儲服務(wù)器的存儲池的客戶端。圖10a示出用于存儲池的初始gl。參照圖10a,gl包括用于每個(gè)存儲服務(wù)器的服務(wù)器條目(服務(wù)器條目a、服務(wù)器條目b)。具體地講,服務(wù)器條目a對應(yīng)于存儲服務(wù)器a(參見圖10b),并且指定下列信息:(i)節(jié)點(diǎn)ida,其在存儲池中唯一地標(biāo)識存儲服務(wù)器a;(ii)節(jié)點(diǎn)標(biāo)點(diǎn):a1、a2(參見圖10d);以及(iii)節(jié)點(diǎn)序號a:1,其指當(dāng)gl序號等于1時(shí)服務(wù)器條目a被添加到gl。類似地,服務(wù)器條目b對應(yīng)于存儲服務(wù)器b(參見圖10b),并且指定下列信息:(i)節(jié)點(diǎn)idb,其在存儲池中唯一地標(biāo)識存儲服務(wù)器b;(ii)節(jié)點(diǎn):b1(參見圖10d);以及(iii)節(jié)點(diǎn)序號b:1,其指當(dāng)gl序號等于1時(shí)服務(wù)器條目b被添加到gl。gl還包括被設(shè)置為1的gl序號,因?yàn)檫@是初始gl,并且節(jié)點(diǎn)計(jì)數(shù)被設(shè)置為2,因?yàn)樵诖鎯Τ刂写嬖趦蓚€(gè)存儲服務(wù)器。

      參照圖10b,在某一稍后的時(shí)刻,客戶端a將對于新對象的請求發(fā)送到服務(wù)器a。如以上所討論的,客戶端a可以將對于新對象的請求發(fā)送到存儲池中的可寫的存儲服務(wù)器中的任何一個(gè)。響應(yīng)于該請求,存儲服務(wù)器a產(chǎn)生vid,其中,vid包括節(jié)點(diǎn)ida和用于存儲池中的新對象的對象id。存儲服務(wù)器a隨后產(chǎn)生用于該新對象的對象布局(ol)。圖10c示出存儲服務(wù)器a產(chǎn)生的ol。參照圖10c,ol包括下列信息:(i)ol序號:1,其指示當(dāng)gl序號等于1時(shí)ol條目被創(chuàng)建;(ii)vid,其事先由存儲服務(wù)器a產(chǎn)生;以及(iii)條帶寬度:64kb。

      返回到圖10b,在產(chǎn)生ol之后,存儲服務(wù)器a使用散列<vid,-1>存儲ol,并且還將ol的副本發(fā)送到客戶端a。在某一稍后的時(shí)間,在客戶端a上執(zhí)行的應(yīng)用程序(未示出)請求將數(shù)據(jù)寫到<對象id,偏移1>。響應(yīng)于該請求,客戶端a使用ol(參見圖10c)、gl(參見圖10a)和散列<對象id,偏移1>來標(biāo)識目標(biāo)服務(wù)器,其中,偏移id通過用從ol(參見圖10c)獲得的條帶寬度掩蔽偏移1而產(chǎn)生。

      如前面所討論的,ol用于確定在ol被創(chuàng)建時(shí)在全局命名空間中哪些存儲服務(wù)器是“可寫的”。在這個(gè)例子中,ol序號為1。因此,在ol被創(chuàng)建時(shí)在全局命名空間中可寫的存儲服務(wù)器將在gl中具有其節(jié)點(diǎn)序號小于或等于1的服務(wù)器條目。參照圖10a中的gl,服務(wù)器條目a和服務(wù)器條目b都具有等于1的節(jié)點(diǎn)序號,就這點(diǎn)而論,當(dāng)ol被創(chuàng)建時(shí)在全局命名空間中是可寫的。用于每個(gè)存儲服務(wù)器的節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)從相應(yīng)的服務(wù)器條目獲得。

      隨后使用節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)和散列<對象id,偏移id1>來標(biāo)識目標(biāo)服務(wù)器。更具體地講,參照圖10d,每一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)從概念上講均可以被看作是單位圓上的標(biāo)點(diǎn),其中,節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)的值規(guī)定每個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)在單位圓上的位置。此外,散列<對象id,偏移id1>從概念上講也可以被看作是單位圓上的標(biāo)點(diǎn)。應(yīng)用一致性散列的原理,從散列<對象id,偏移id1>限定的標(biāo)點(diǎn)開始,并且在順時(shí)針方向上移動,所遇到的第一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)將用于標(biāo)識目標(biāo)服務(wù)器。在這個(gè)例子中,散列<對象id,偏移id1>位于a1與b1之間。在順時(shí)針方向上移動,所遇到的第一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)是b1。b1是與存儲服務(wù)器b相關(guān)聯(lián)的節(jié)點(diǎn)標(biāo)點(diǎn)。因此,存儲服務(wù)器b被標(biāo)識為目標(biāo)服務(wù)器。

      參照圖10b,客戶端a隨后將指定(散列<對象id,偏移1>,數(shù)據(jù))的寫請求發(fā)送到存儲服務(wù)器b。存儲服務(wù)器b隨后存儲數(shù)據(jù)。因?yàn)榇鎯Ψ?wù)器b不包括ol的副本,所以客戶端a還將ol的副本發(fā)送到存儲服務(wù)器b。當(dāng)接收到時(shí),存儲服務(wù)器b使用散列<vid,-1>存儲ol。

      參照圖10e,在某一稍后的時(shí)間,將存儲服務(wù)器c添加到存儲池。結(jié)果,gl被更新來反映新存儲服務(wù)器的添加。更新的gl包括服務(wù)器條目c。服務(wù)器條目c對應(yīng)于存儲服務(wù)器c(參見圖10f),并且指定下列信息:(i)節(jié)點(diǎn)idc,其在存儲池中唯一地標(biāo)識存儲服務(wù)器c;(ii)節(jié)點(diǎn):c1(參見圖10g);以及(iii)節(jié)點(diǎn)序號c:2,其指示當(dāng)gl序號等于2時(shí)服務(wù)器條目c被添加到gl。gl還包括被設(shè)置為2的指示gl已經(jīng)被更新的gl序號、以及被設(shè)置為3的節(jié)點(diǎn)計(jì)數(shù),因?yàn)樵诖鎯Τ刂写嬖谌齻€(gè)存儲服務(wù)器。

      參照圖10f,在gl被更新(參見圖10e)在之后,客戶端a接收從<vid,offset2>讀數(shù)據(jù)的請求。因?yàn)閛l對應(yīng)于先前提供給客戶端的vid(參見圖10b)所標(biāo)識的對象,所以不需要向存儲池請求ol。

      客戶端a使用ol(參見圖10c)、gl(參見圖10e)和散列<對象id,偏移id2>來標(biāo)識目標(biāo)服務(wù)器,其中,偏移id2通過用從ol(參見圖10c)獲得的條帶寬度掩蔽偏移2而產(chǎn)生。

      如前面所討論的,ol用于確定在ol被創(chuàng)建時(shí)在全局命名空間中哪些存儲服務(wù)器是“可寫的”。在這個(gè)例子中,ol序號是1。因此,在ol被創(chuàng)建時(shí)在全局命名空間中可寫的存儲服務(wù)器將在gl中具有節(jié)點(diǎn)序號小于或等于1的服務(wù)器條目。參照圖10e中的gl,服務(wù)器條目a和服務(wù)器條目b都具有等于1的節(jié)點(diǎn)序號,就這點(diǎn)而論,當(dāng)ol被創(chuàng)建時(shí)在全局命名空間中是可寫的。雖然gl包括服務(wù)器條目c,但是因?yàn)楣?jié)點(diǎn)序號c為2,所以存儲服務(wù)器c在ol被創(chuàng)建時(shí)是不可寫的,就這點(diǎn)而論,不用于標(biāo)識目標(biāo)服務(wù)器。用于存儲服務(wù)器a和b的節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)從相應(yīng)的服務(wù)器條目獲得。

      隨后使用節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)和散列<對象id,偏移id2>來標(biāo)識目標(biāo)服務(wù)器。更具體地講,參照圖10g,節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)從概念上講均可以被看作是單位圓上的標(biāo)點(diǎn),其中,節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)的值規(guī)定每個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)在單位圓上的位置。此外,散列<對象id,偏移id2>從概念上講也可以被看作是單位圓上的標(biāo)點(diǎn)。應(yīng)用一致性散列的原理,從散列<對象id,偏移id2>限定的點(diǎn)開始,并且在順時(shí)針方向移動,所遇到的第一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)將用于標(biāo)識目標(biāo)服務(wù)器。在這個(gè)例子中,散列<對象id,偏移id2>位于b1與a2之間。在順時(shí)針方向上移動,所遇到的第一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)是a2。a2是與存儲服務(wù)器a相關(guān)聯(lián)的節(jié)點(diǎn)。因此,存儲服務(wù)器a被標(biāo)識為目標(biāo)服務(wù)器。

      參照圖10f,客戶端a隨后將指定<對象id,偏移2>的讀請求發(fā)送到存儲服務(wù)器a。存儲服務(wù)器a隨后獲得所請求的數(shù)據(jù),并且將它送回到客戶端a。

      參照圖10h,在gl被更新(參見圖10e)之后,客戶端a接收讀用于<vid2,偏移3>的數(shù)據(jù)的請求。客戶端a從vid2(參見圖10i)提取節(jié)點(diǎn)idb(其標(biāo)識存儲服務(wù)器b),隨后使用散列<vid2,-1>將對于ol2的請求發(fā)送到存儲服務(wù)器b。響應(yīng)于該請求,存儲服務(wù)器b獲得ol2,并且將它送回到客戶端a。

      客戶端a然后使用ol2(參見圖10j)、gl(參見圖10e)和散列<對象id2,偏移id3>來標(biāo)識目標(biāo)服務(wù)器,其中,偏移id3通過用從ol2(參見圖10j)獲得的條帶寬度掩蔽偏移3而產(chǎn)生。

      如前面所討論的,ol用于確定在ol被創(chuàng)建時(shí)在全局命名空間中哪些存儲服務(wù)器是“可寫的”。在這個(gè)例子中,ol序號是2(參見圖10j)。因此,在ol2被創(chuàng)建時(shí)在全局命名空間中可寫的存儲服務(wù)器將在gl中具有其節(jié)點(diǎn)序號小于或等于2的服務(wù)器條目。參照圖10e中的gl,服務(wù)器條目a、服務(wù)器條目b和服務(wù)器條目c全都具有小于或等于2的節(jié)點(diǎn)序號,就這點(diǎn)而論,當(dāng)ol2被創(chuàng)建時(shí)在全局命名空間中是可寫的。用于每個(gè)存儲服務(wù)器的節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2和b1)從相應(yīng)的服務(wù)器條目獲得。

      隨后使用節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2、b1、c1)和散列<對象id2,偏移id3>來標(biāo)識目標(biāo)服務(wù)器。更具體地講,參照圖10j,每個(gè)節(jié)點(diǎn)(即,a1、a2和b1)從概念上講均可以被看作是單位圓上的標(biāo)點(diǎn),其中,節(jié)點(diǎn)標(biāo)點(diǎn)(即,a1、a2、b1、c1)的值規(guī)定每個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)在單位圓上的位置。此外,散列<對象id2,偏移id3>從概念上講也可以被看作是單位圓上的標(biāo)點(diǎn)。應(yīng)用一致性散列的原理,從散列<對象id2,偏移id3>限定的點(diǎn)開始,并且在順時(shí)針方向上移動,所遇到的第一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)將用于標(biāo)識目標(biāo)服務(wù)器。在這個(gè)例子中,散列<對象id2,偏移id3>位于b1與c1之間。在順時(shí)針方向上移動,所遇到的第一個(gè)節(jié)點(diǎn)標(biāo)點(diǎn)是c1。c1是與存儲服務(wù)器c相關(guān)聯(lián)的節(jié)點(diǎn)。因此,存儲服務(wù)器c被標(biāo)識為目標(biāo)服務(wù)器。

      參照圖10h,客戶端a隨后將指定(<對象id2,偏移3>)的讀請求發(fā)送到存儲服務(wù)器c。存儲服務(wù)器c隨后獲得所請求的數(shù)據(jù),并且將它送回到客戶端a。

      雖然已經(jīng)關(guān)于有限數(shù)量的實(shí)施例描述了本發(fā)明,但是受益于本公開的本領(lǐng)域的技術(shù)人員將意識到,可以設(shè)想不脫離如本文中所公開的本發(fā)明的范圍的其他實(shí)施例。因此,本發(fā)明的范圍僅應(yīng)由所附權(quán)利要求書限制。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1