要離開的機器上的數據應當被重新分布到剩余的三個機器,以致剩余的三個機器相對于每個機器上的空間量具有基本上均勻的數據量。類似地,如果機器被增加到具有四個機器的系統,則儲存在四個初始機器上的數據應當被重新分布,以致當前的五個機器相對于每個機器上的空間量具有基本上均勻的數據量。
[0096]重新分布數據可能引入無效率性,因為重新分布算法的標準實施方式使得重新分布期間該系統無法更新和查詢。如上面指出的,使用一致性哈希的益處之一在于對哈希池增加和移除節點的成本被降低。盡管可以從現有節點移至新節點的關鍵字的數目被減少到k/n(其中,k為關鍵字的總數目,而η為主動節點(active node)的數目),一致性哈希的標準實施方式仍使得重新分布期間該系統無法更新和查詢。下面公開用于以最小服務中斷來對機器的一致性哈希池有效地增加或移除節點的方法。
[0097]圖5A為圖示說明用于對計算節點的集合或分布式基于策略的儲存結構環境增加新節點或機器的流程圖500。該方法開始于框501,結束于框531,并且被劃分為多個步驟,以致對服務和網絡節點間協議的中斷二者均被最小化。
[0098]在步驟510中,新節點加入作為“依附(leech)”節點。依附節點是能夠與對等節點(peer node)相互作用的節點,但不是對等節點。在步驟510期間,依附節點獲得系統中所有其他主動節點的關鍵字空間。
[0099]在步驟520中,依附節點從系統中其他主動節點接收與其將作為主動節點所擁有的關鍵字相關聯的值的拷貝(copy)。在步驟520期間,實現依附節點及其對等節點之間的協調(reconciliat1n)。在依附節點和對等節點正進行協調時,依附節點還可以監控并記錄任何新關鍵字和曾在步驟510間被處理或者被修改或更新的任何更新值。
[0100]并且在步驟530中,新節點觸發同步化的重新加入以將其狀態升級為主動對等點(active peer)并且獲得其自己的關鍵字空間的擁有權。新節點參與到同步化的協議中以加入作為主動對等點并且基本上立即準備好開始播種(seed)關鍵字和值。步驟530包括臨時(短期的)暫停對空間進行的操作。主動對等點也可以被稱為“播種者(seeder)”節點。
[0101]在實施方案中,現有播種者節點負責其關鍵字空間的單次讀取,并且新節點或依附節點(其在步驟520中是離線的直到在步驟530中其加入作為對等節點或播種者節點)負擔計算其擁有的關鍵字空間。允許新節點離線準備使其間對空間暫停操作的時間最小化。
[0102]在實施方案中,在步驟520期間,依附節點接收輸入并且逐漸成為被同步的。就在步驟530之前,依附節點基本上完全被同步。因此,在步驟530,依附節點可以請求加入節點組。當新節點加入該組時,其基本上完全被同步,這導致快速且無縫的加入。
[0103]在實施方案中,步驟510之前,一致性哈希算法可以被使用(如上面在題為“使用一致性哈希的微隊列分布”的部分中所論述的)來確定在群(不包括新節點,因為新節點在步驟510之前還尚未加入作為依附節點)中的節點上輸入或關鍵字的分布。在步驟520期間,一致性哈希算法可以被使用來確定在包括新節點的群中的節點上輸入或關鍵字的分布,因為新節點將很快加入該群。因此,新節點獲知一旦其成為播種者節點其將“擁有”的輸入和關鍵字。步驟520期間,一旦新節點確定其成為播種者節點其將“擁有”的輸入時,該新節點從系統中的其他主動節點接收與其將作為主動節點而擁有的關鍵字相關聯的值的拷貝。因而,使用一致性哈希以現有播種者節點上的最小負擔來實現依附節點及其對等點之間的協調。
[0104]圖5B是圖示說明用于節點或機器的方法的流程圖550,所述節點或機器正從計算節點的集合或者分布式基于策略的儲存結構環境被移除。該方法開始于框551,結束于框570,并且被劃分為多個步驟,以致對服務和網絡節點間協議的中斷均被最小化。
[0105]在步驟560,群中想要離開該群的節點發信號給其他播種者節點。在步驟561,要離開的機器或節點仍為播種者機器,而剩余的播種者機器或節點正讀取數據和接收與在要離開的節點離開該群后其將“擁有”的關鍵字相關聯的值的拷貝。步驟561期間,該群仍舊在運行。在步驟562,要離開的節點離開該群并且剩余的播種者節點獲得從要離開的節點接收的輸入和數據的擁有權。剩余的播種者機器或節點已經從要離開的節點預讀取數據或輸入,并且因此,當要離開的節點離開該組時,新節點已基本上完全被同步化,導致快速且無縫的離開。
[0106]圖5B中圖示說明的流程圖涉及預定的離開并且用于離開群的方法因而類似于如加入問題的同步問題,只是下面參照圖5C論述針對離開群的節點的某些附加考慮。圖5C是圖示說明不同類型的離開和不同類型的復制的表580。與其中數據沒有被先前地復制582、被同步復制的584和被異步復制的586的情形相比,該表圖示說明預定的(scheduled)離開592情形和非預定的離開594情形。
[0107]在系統中預定的離去592不具有復制(582)或具有異步復制(586)的情況下——
即情形587和589--要離開的節點可以應答來自其對等節點(peer node)的同步查詢來幫助同步化值(否則,剩余節點將占據空間全部)。在設定離去592的情況下如果已經使用復制584,剩余節點可以重新創建由要離開的節點遺留未履行的任何復制。
[0108]在一系統中未預定的離去594不具有復制582的情況下——即情形597——導致數據損失。因此,在實施方案中,同步數據復制是優選的。在一系統中未預定的離去594具有異步復制586的情況下即情形599 可能導致數據損失并且系統可以異步地恢復復制。在一系統中未預定的離去594具有同步復制584的情況下——即情形598——系統可以異步地恢復復制。
[0109]同步化值基本上確保池中剩余節點具有針對先前由要離開的節點所擁有的關鍵字的值的有效拷貝。這包括短期暫停對空間進行的操作。異步地恢復復制允許池中的剩余節點實例化針對先前由要離開的(或已經離開的)節點上所復制的關鍵字的復制。
[0110]分布式容錯
[0111]為避免如以上結合圖5C所論述的數據損失情形597和599,數據可以在附加備份節點上被復制。當所有數據被復制至少一次時,數據損失的風險被大大降低。
[0112]在實施方案中,數據復制使用利用一致性哈希實現的分布式容錯方法來實現。本領域技術人員會理解的是,其他分布算法可以用來跨儲存結構環境分布關鍵字空間或微隊列。以“單調”行為來使用分布一一其中之一是當新節點被增加時,數據僅在其他節點和新節點之間被更換,而不是在群中的其他節點之間一一將一般地導致優化的且有效的復制。
[0113]分布式容錯可以被用在典型的一致性哈希環境中,其中關鍵字空間(和相關聯的數據值)跨計算節點的集合被分布,或者被用在分布式基于策略的儲存結構環境中。在其初始具體化中,分布式哈希是無狀態的(stateless)分布算法多于“有狀態的(stateful)”儲存算法。如上所論述的,當重新用來實現分布式哈希表時,該算法使改變節點池的成本降低,并且減少對全局狀態分享的要求。
[0114]在實施方案中,分布式哈希表的一致性哈希實現被擴展為提供并行分布式容錯。這通過將關鍵字的附加拷貝映射到一致性哈希圈(例如參見圖4中所示出的一致性哈希圈400)上的下一最靠近節點來實現。“下一最靠近”是由從計算中移除的最靠近節點(和其全部偽節點)來確定的。
[0115]圖6A為圖示說明使用一致性哈希的分布式容錯的示意圖。關鍵字602的初級拷貝被映射到通過一致性哈希算法被認為的最靠近節點608。該節點將成為針對關鍵字602的播種者節點。接著,種子機器從計算中被移除并且該算法被重新運行。然后,該算法將展現第二靠近機器或節點610。出于復制的目的,關鍵字604的復制拷貝(或次級的)被映射到第二靠近節點610。這可以針對關鍵字的附加拷貝來重復進行(例如,第二復制拷貝606可以被映射到第三靠近節點612),達到由池中節點數目限制的復制的期望程度。
[0116]本技術創建與初級分布成比例的分布式容錯備份分布,并且在故障情形下,保持相同的性質和效率。針對池中任何特定節點的關鍵字的備份拷貝被完全地分布在池中的剩余節點上。
[0117]圖6B圖示說明在一群的非初級節點上的輸入的分布式復制600。關注節點A 602的主要作用,即來自節點A 602的復制數據被分布到多個非初級節點。來自節點A 602的復制數據例如可以被分布到節點B 604、節點Q 606以及節點S 608。節點A 602還可以具有來自其他節點的復制數據(次級數據或其他復制的等級)。每個節點將一組關鍵字作為初級值,而同時將一組復制的關鍵字作為次級值。
[0118]一旦節點故障,由故障的節點所“擁有”的輸入已準備好被完全地分布在池中的剩余節點上。當初級節點失效(crash)時,針對該初級節點的數據的次級節點成為針對該數據的新初級節點并且將開始播種其已經復制的數據。因此,故障不會簡單地將負載傳輸至單個備份節點。如在先前的部分中所描述的,從故障的恢復只是使最新修復的節點重新加入池的問題。
[0119]映射和分布樽塊
[0120]圖8A-圖8C為圖示說明用于映射節點和關鍵字值的模塊800、820和840的示意圖。
[0121]圖8A為映射和分布模塊800。映射和分布模塊800接收有關節點或在機器群(n1...nn)中可用的機器的數目的信息和關于與空間中基于策略的儲存結構相關聯的關鍵字值(kp..kj的信息。映射和分布模塊800可以使用分布算法將關鍵字值映射到節點。在實施方案中,如上面結合圖1-4所論述的,映射和分布