欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

可縮放的容錯元數(shù)據(jù)服務的制作方法

文檔序號:6424905閱讀:133來源:國知局
專利名稱:可縮放的容錯元數(shù)據(jù)服務的制作方法
可縮放的容錯元數(shù)據(jù)服務
背景技術
元數(shù)據(jù)常常被描述為“關于數(shù)據(jù)的數(shù)據(jù)”。元數(shù)據(jù)可以采取各種形式,其范圍從簡單到復雜。在一個簡單的示例中,計算機文件與元數(shù)據(jù)相關聯(lián),其可包括文件的名稱和類型、創(chuàng)建和最近修改的日期、訪問許可等等。在更復雜的示例中,數(shù)據(jù)遵循復雜多層的結(jié)構(gòu), 其中,元數(shù)據(jù)可以包括定義數(shù)據(jù)的結(jié)構(gòu)的模式??创獢?shù)據(jù)的一種方式是它僅僅是一種數(shù)據(jù)。然而,在實踐中,對元數(shù)據(jù)的管理提出了與對與該元數(shù)據(jù)相關的底層數(shù)據(jù)的管理稍微不同的問題。元數(shù)據(jù)可能比底層數(shù)據(jù)被更頻繁地訪問。此外,元數(shù)據(jù)的訪問失敗可以被視為相比普通數(shù)據(jù)的訪問失敗更不能接受。

發(fā)明內(nèi)容
可以通過考慮應用于元數(shù)據(jù)的可靠性以及吞吐量約束的系統(tǒng)來管理元數(shù)據(jù)。此外,該系統(tǒng)可以是可縮放的,以便滿足涉及要存儲的元數(shù)據(jù)的量以及使用元數(shù)據(jù)的速率的任意條件。元數(shù)據(jù)可以被劃分成各個分區(qū)。每個分區(qū)被分配給節(jié)點或節(jié)點的集合。每個節(jié)點是對針對元數(shù)據(jù)的訪問請求進行響應的服務器。對分區(qū)進行服務的節(jié)點可以包括主節(jié)點且可任選地包括一個或多個次節(jié)點。主節(jié)點維持該分區(qū)的當前真實版本。次節(jié)點包含該分區(qū)的副本。讀元數(shù)據(jù)的請求也可以被定向至主節(jié)點。讀元數(shù)據(jù)的請求也可以被定向至主節(jié)點。然而,如果對系統(tǒng)的要求使得使用附加節(jié)點來對元數(shù)據(jù)請求進行服務是有意義的,則某些讀請求可以被定向至次節(jié)點,從而減輕主節(jié)點的一些壓力。分區(qū)本身可以被以使得這些分區(qū)中的每一個上的負載大致相等的方式來劃分。在一個示例中,平衡負載意味著各分區(qū)包含大致相等量的元數(shù)據(jù)。然而,對不同類型的元數(shù)據(jù)的要求可以是不同的,以便使得可以通過將少量高要求元數(shù)據(jù)分配到一個分區(qū)并將大量低要求元數(shù)據(jù)分配到另一個分區(qū)來平衡跨各分區(qū)的負載。本文的主題允許動態(tài)的負載平衡, 這取決于元數(shù)據(jù)正在被如何使用。當實體提交訪問元數(shù)據(jù)的請求時,該實體將該請求提交到元數(shù)據(jù)服務器。然后,該元數(shù)據(jù)服務器標識發(fā)起請求的實體向其提交該請求的適當節(jié)點。通常,向其提交請求的節(jié)點是分區(qū)的處理所請求的元數(shù)據(jù)的主節(jié)點,但在某些情形中該節(jié)點可以是次節(jié)點之一。然后,發(fā)起請求的實體從由元數(shù)據(jù)服務器標識的節(jié)點請求元數(shù)據(jù)。分區(qū)中的元數(shù)據(jù)可以通過基于日志的復制協(xié)議來更新。在這樣的協(xié)議中,對元數(shù)據(jù)的當前狀態(tài)的任何改變(即,增加新元數(shù)據(jù)記錄的寫或修改現(xiàn)有元數(shù)據(jù)記錄的寫)被定向至負責分區(qū)的主節(jié)點。在對主節(jié)點進行寫之后的某一時刻,該主節(jié)點將該寫發(fā)送給次節(jié)點,以使得次節(jié)點將會具有該新信息。然而,次節(jié)點可以繼續(xù)提供舊信息,直到新信息已經(jīng)被提交為止。各節(jié)點中的每一個維持一個日志,其中日志的末尾指示哪個是當前版本的任何數(shù)據(jù)。當主節(jié)點提交該新數(shù)據(jù)時,它將該提交輸入到其日志中。然后,主節(jié)點通知次節(jié)點, 次節(jié)點通過將該提交輸入它們各自的日志中來提交該數(shù)據(jù)。然后,主節(jié)點和次節(jié)點開始提供新數(shù)據(jù)而不是舊數(shù)據(jù)。
提供本發(fā)明內(nèi)容是為了以簡化的形式介紹將在以下詳細描述中進一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標識出所要求保護的主題的關鍵特征或必要特征,也不旨在用于限定所要求保護的主題的范圍。


圖1是可以對關于元數(shù)據(jù)的請求進行響應的示例系統(tǒng)的框圖。圖2是其中可以將元數(shù)據(jù)存儲在元數(shù)據(jù)系統(tǒng)中的示例過程的流程圖。圖3是示例的基于日志的復制方案的框圖。圖4是訪問元數(shù)據(jù)的示例過程的流程圖。圖5是其中使用元數(shù)據(jù)來構(gòu)建索引的示例場景的框圖。圖6是實現(xiàn)可以在為一分區(qū)進行服務的各節(jié)點之間劃分工作的一種示例方式的過程的流程圖。圖7是在節(jié)點故障的情況下為分區(qū)獲取新節(jié)點的示例過程的框圖。圖8是分割分區(qū)以適應該分區(qū)的增長的示例過程的框圖。圖9是可以結(jié)合本文描述的主題的實現(xiàn)來使用的示例組件的框圖。
具體實施例方式元數(shù)據(jù)通常被描述為“關于數(shù)據(jù)的數(shù)據(jù)”。存在各種類型的元數(shù)據(jù)。例如,在計算機文件系統(tǒng)中,每個文件與指示該文件的名稱和類型、創(chuàng)建日期、最后修改日期、訪問許可等等的元數(shù)據(jù)關聯(lián)。關于文件的這一類型的信息是相對簡單類型的元數(shù)據(jù)。其他類型的元數(shù)據(jù)更為復雜。例如,數(shù)據(jù)可以被組織成多層結(jié)構(gòu),其中該結(jié)構(gòu)由模式來描述。當數(shù)據(jù)被以此方式組織時,該數(shù)據(jù)僅可以在元數(shù)據(jù)的幫助下來解釋。因此,使用這種類型的復雜的結(jié)構(gòu)化數(shù)據(jù)的系統(tǒng)通常訪問元數(shù)據(jù)以解釋該元數(shù)據(jù)所描述的底層數(shù)據(jù)??创獢?shù)據(jù)的一種方式是其僅僅是可以像其他數(shù)據(jù)那樣被管理的特定類型的數(shù)據(jù)。然而,在實踐中,對元數(shù)據(jù)的管理提出了稍微不同于對與該元數(shù)據(jù)相關的底層數(shù)據(jù)的管理的問題。元數(shù)據(jù)可能比底層數(shù)據(jù)被更頻繁地訪問。而且,訪問失敗的后果更為嚴重。例如,底層數(shù)據(jù)的消費者可能具有該底層數(shù)據(jù)的私有副本,但是在不訪問元數(shù)據(jù)的情況下可能不能夠解釋該數(shù)據(jù)。或者,除非實體有權訪問元數(shù)據(jù),否則該實體可能嘗試創(chuàng)建符合該元數(shù)據(jù)所定義的模式的數(shù)據(jù)但因此不能夠以正確的形式創(chuàng)建該數(shù)據(jù)。因此,對元數(shù)據(jù)的吞吐量和容錯約束兩者都高于對普通數(shù)據(jù)的吞吐量和容錯約束。為了提供對元數(shù)據(jù)的訪問,可以創(chuàng)建可縮放的容錯元數(shù)據(jù)管理系統(tǒng)。這樣的元數(shù)據(jù)管理系統(tǒng)可以將元數(shù)據(jù)正文劃分成各個分區(qū)。將元數(shù)據(jù)劃分成各個分區(qū)允許不同服務器群提供不同的元數(shù)據(jù)。特定分區(qū)可以被以這樣的方式被分配給特定的服務器群對于該分區(qū)的預期請求量是在服務于這些請求的群的能力之內(nèi)。分區(qū)是可縮放的,因此,如果元數(shù)據(jù)的量增加——或者如果對于元數(shù)據(jù)的預期請求速率增加——則元數(shù)據(jù)能被劃分成大量的分區(qū),并且然后可以跨大量服務器來重新分配。對元數(shù)據(jù)的每一分區(qū)進行服務的服務器群可以包含一個主節(jié)點和一組次節(jié)點。主節(jié)點可以服務于寫請求。此外,當分區(qū)上負載低時,主節(jié)點可以服務于讀請求。如果分區(qū)上的負載增大至超過一個節(jié)點有效地服務于讀請求的能力,則讀請求可以被定向至次節(jié)點之一。次節(jié)點包含被存儲在主節(jié)點上的元數(shù)據(jù)的副本,且允許元數(shù)據(jù)管理系統(tǒng)縮放以適應較高負載的時期。當實體做出對元數(shù)據(jù)的請求(讀請求或?qū)懻埱?時,該實體將這些請求提交給元數(shù)據(jù)服務器。元數(shù)據(jù)服務器知道元數(shù)據(jù)被如何分割,而且因而能夠標識持有所請求的元數(shù)據(jù)的服務器。在一個示例中,可以通過基于該請求所涉及的元數(shù)據(jù)的某種函數(shù)標識特定分區(qū)的散列函數(shù)來分割元數(shù)據(jù)。然而,分區(qū)可以用任何方式實現(xiàn)。當元數(shù)據(jù)服務器標識分區(qū)時,它可以在節(jié)點組之中標識服務于該分區(qū)的特定節(jié)點。如上所述,正常地,請求被路由到服務于分區(qū)的主節(jié)點,但在高負載期間特定請求可以被路由到次節(jié)點。當標識了節(jié)點時,服務器將該節(jié)點的身份返回給發(fā)起請求的實體。然后,發(fā)起請求的實體將其請求提交給該所標識的節(jié)點。然后,該節(jié)點對請求作出響應。在主節(jié)點和次節(jié)點之間的元數(shù)據(jù)復制可以通過基于日志的復制協(xié)議來管理。在一個示例中,當分區(qū)的主節(jié)點接收到寫請求時,它把新近寫的數(shù)據(jù)復制到該分區(qū)的次節(jié)點。在復制了數(shù)據(jù)之后,次節(jié)點擁有該新數(shù)據(jù)。然而,這時,新數(shù)據(jù)可能不是該節(jié)點所提供的數(shù)據(jù)版本。節(jié)點可以繼續(xù)提供該數(shù)據(jù)的先前版本,直到主節(jié)點提交該數(shù)據(jù)的新版本為止。哪一版本構(gòu)成元數(shù)據(jù)的當前版本的問題可以通過提交日志來管理,其中一元數(shù)據(jù)項的當前版本由應用于該元數(shù)據(jù)項的最后一個日志條目確定。因此,在主節(jié)點已經(jīng)接收到(諸)次節(jié)點已經(jīng)接收到所復制的數(shù)據(jù)的確認后,主節(jié)點可以通過將該提交輸入到該主節(jié)點的提交日志中來提交該復制的數(shù)據(jù)。然后,主節(jié)點將該提交傳送到(諸)次節(jié)點,(諸)次節(jié)點將該提交輸入到它們的提交日志并開始提供該新數(shù)據(jù)來替換舊數(shù)據(jù)。在一個示例中,元數(shù)據(jù)服務用來管理用于搜索引擎索引器的元數(shù)據(jù)。例如,當web 爬行器檢索要被索引的網(wǎng)頁時,爬行器可以存儲網(wǎng)頁,并且還可以存儲關于網(wǎng)頁的復雜結(jié)構(gòu)信息。這一關于網(wǎng)頁的信息是一種形式的元數(shù)據(jù)。為了使得索引構(gòu)建器構(gòu)建網(wǎng)頁的索引, 索引構(gòu)建器必須訪問所檢索到的頁面和元數(shù)據(jù)。使用本文所描述的技術的元數(shù)據(jù)服務可以用來管理元數(shù)據(jù),從而允許高效地構(gòu)建索引,并允許索引進程在元數(shù)據(jù)的檢索中的瓶頸或故障導致索引進程停止的風險很小的情況下繼續(xù)進行。然而,用于索引服務的網(wǎng)頁數(shù)據(jù)的管理只是元數(shù)據(jù)服務的一種示例用途。對于任何類型的元數(shù)據(jù),可以用任意方式使用在此所描述的技術?,F(xiàn)在轉(zhuǎn)到附圖,圖1示出可以對關于元數(shù)據(jù)的請求進行響應的示例系統(tǒng)。在圖1 的系統(tǒng)中所處理的請求可以是對讀、寫或修改元數(shù)據(jù)的請求。實體102是發(fā)起關于一元數(shù)據(jù)項的請求104的實體。實體102可以是用戶、程序或任何其他類型的實體。實體102向元數(shù)據(jù)服務器106發(fā)起請求104。元數(shù)據(jù)服務器106知道元數(shù)據(jù)的空間的分區(qū)。S卩,元數(shù)據(jù)的空間已經(jīng)被劃分成某一數(shù)目的分區(qū),作為示例,在圖1中示出為三個分區(qū)108、110和112。 給定特定元數(shù)據(jù)項或?qū)μ囟ㄔ獢?shù)據(jù)項的請求,元數(shù)據(jù)服務器106能夠確定該元數(shù)據(jù)項位于哪一分區(qū)。在一個示例中,元數(shù)據(jù)服務器106可以是在某種程度上復制彼此的函數(shù)和數(shù)據(jù)庫從而提供容錯措施的服務器群集。(然而,本文的主題仍然適用于其中元數(shù)據(jù)服務器106 由單個服務器實現(xiàn)的情形。)元數(shù)據(jù)可以最初在該系統(tǒng)產(chǎn)生時就被分區(qū),且元數(shù)據(jù)也可以被重新分區(qū)以適應負載平衡問題、存儲器或處理資源的高效使用、或其他考慮。每個分區(qū)由一個或多個不同的元數(shù)據(jù)節(jié)點來進行服務。每個元數(shù)據(jù)節(jié)點可以由服務器實現(xiàn)。在一個示例中,每個分區(qū)由一個主節(jié)點和一個或多個次節(jié)點來進行服務。因此,分區(qū)108由元數(shù)據(jù)節(jié)點116和118來進行服務,且節(jié)點116為主節(jié)點和(諸)節(jié)點118為次節(jié)點。同樣地,分區(qū)110由元數(shù)據(jù)節(jié)點120和122(分別為主節(jié)點和(諸)次節(jié)點)來進行服務,且分區(qū)112由元數(shù)據(jù)節(jié)點IM和126(分別為主節(jié)點和(諸)次節(jié)點)來進行服務。 (諸)次節(jié)點可以復制主節(jié)點。即,主節(jié)點可以存儲元數(shù)據(jù)的真實副本,而且可以將該元數(shù)據(jù)的副本傳播到次節(jié)點。次節(jié)點可以充當主節(jié)點的備份。S卩,如果主節(jié)點由于故障或者高負載而無法用來處理請求,則對讀元數(shù)據(jù)的請求可以被定向至次節(jié)點。可以對服務于同一分區(qū)的不同節(jié)點之間的關系施加各種約束。例如,一種約束可以是服務于同一分區(qū)的不同節(jié)點不被連接到同一網(wǎng)絡交換機,以便降低由于單個網(wǎng)絡交換機的故障而無法利用分區(qū)的可能性。當元數(shù)據(jù)服務器向發(fā)起請求的實體標識為所請求的元數(shù)據(jù)所在的分區(qū)進行服務的節(jié)點時,在所標識的節(jié)點,該發(fā)起請求的實體做出元數(shù)據(jù)訪問請求128。然后,所請求的訪問可以被執(zhí)行。因此,如果實體102正在請求寫新元數(shù)據(jù)(或?qū)憣ΜF(xiàn)有元數(shù)據(jù)的修改),則實體102向由元數(shù)據(jù)服務器106標識的節(jié)點做出這一請求。這樣,如果該請求中所涉及的元數(shù)據(jù)是在分區(qū)108中,則元數(shù)據(jù)服務器106可以將實體102定向至作為分區(qū)108的主節(jié)點的元數(shù)據(jù)節(jié)點116。然后,實體102能將數(shù)據(jù)寫到節(jié)點116。如果,例如,實體102正在請求讀元數(shù)據(jù)服務器106確定是在分區(qū)108中的元數(shù)據(jù),則元數(shù)據(jù)服務器106也可以將實體 102定向至元數(shù)據(jù)節(jié)點116,因為主節(jié)點可以處理讀請求和寫請求。然而,如果元數(shù)據(jù)節(jié)點 116停機,或如果它正在經(jīng)歷大量的請求,則實體102可以被定向至節(jié)點118 (分區(qū)108的次節(jié)點之一),因為次節(jié)點能在對分區(qū)的讀請求不能被定向至主節(jié)點的情況下處理這些請求。一旦實體102已經(jīng)對適當?shù)墓?jié)點做出其訪問請求,則該節(jié)點可以通過向?qū)嶓w102 提供所請求的元數(shù)據(jù)來處理該請求(在讀請求的情況下)或通過開始一過程來修改元數(shù)據(jù) (在寫請求的情況下)。(我們說“開始過程”是因為,正如在下面結(jié)合圖3討論的那樣,在一個示例中,更新元數(shù)據(jù)的當前狀態(tài)的過程可以涉及復制和提交數(shù)據(jù)的若干動作)。圖2示出其中可以將元數(shù)據(jù)存儲到諸如圖1中所示系統(tǒng)等元數(shù)據(jù)系統(tǒng)的示例過程。圖2的過程可以用來寫新元數(shù)據(jù),或用來寫對現(xiàn)有元數(shù)據(jù)的修改。在轉(zhuǎn)向圖2的描述之前,注意,參考圖1示出的組件作為示例地描述了文本包含的流程圖(圖2中和圖4中), 但這些過程可以在任何系統(tǒng)中實現(xiàn),并且不限于圖1示出的場景。另外,圖2和4中流程圖的每一個示出了一示例,其中按特定順序來實現(xiàn)過程的各階段,如連接塊的線所示,但這些圖中示出的各種階段可以按任何順序、或以任何組合或子組合來執(zhí)行。在202,接收元數(shù)據(jù)。如上所述,該元數(shù)據(jù)可以是新元數(shù)據(jù)或可以是對現(xiàn)有元數(shù)據(jù)的修改。在204,選擇用于該元數(shù)據(jù)的分區(qū)。可以用任何方式選擇分區(qū)。例如,可以給元數(shù)據(jù)的每個片段分配一個標識符,而且可以通過將不同范圍的標識符分配給不同的分區(qū)來選擇分區(qū)。或者,可以基于標識符的散列或基于元數(shù)據(jù)的某一其他方面來選擇分區(qū)??梢砸匀魏畏绞絹矸峙浯a。在206,將元數(shù)據(jù)保存到為該元數(shù)據(jù)所選擇的分區(qū)的主節(jié)點。正如以上結(jié)合圖1所描述的那樣,在一個示例中,元數(shù)據(jù)到達節(jié)點的方式是想要寫該元數(shù)據(jù)的實體首先要求元數(shù)據(jù)服務器標識該元數(shù)據(jù)已經(jīng)被分配到的分區(qū)中的節(jié)點,且然后該實體聯(lián)系該節(jié)點。然而, 要寫的元數(shù)據(jù)可以用任何方式到達所標識的節(jié)點。在保存了元數(shù)據(jù)之后,可以在某個時間點復制數(shù)據(jù)(在208)。如上所述,在一個示
7例中,每個分區(qū)由一個主節(jié)點和一個或多個次節(jié)點來進行服務。在該示例中,主節(jié)點接收數(shù)據(jù)寫,而且這些寫被復制到次節(jié)點,其中次節(jié)點可以對讀請求進行服務。因此,復制涉及將被寫到主節(jié)點的數(shù)據(jù)復制到(諸)次節(jié)點。存在實現(xiàn)這一復制的各種方式。然而,執(zhí)行該復制的一種示例方式是基于日志的復制方案,這參考圖3來描述。在一個示例中,每個分區(qū)由一個主節(jié)點和一個或多個次節(jié)點來進行服務。在圖3中,客戶機302向主節(jié)點306發(fā)起寫請求304。該寫請求是寫新元數(shù)據(jù)或者更新現(xiàn)有元數(shù)據(jù)的請求。作為該請求的主題的元數(shù)據(jù)已經(jīng)被分配給由主節(jié)點306以及次節(jié)點308和次節(jié)點310來進行服務的分區(qū)。當主節(jié)點306接收到寫請求304時,作為該寫請求的主題的元數(shù)據(jù)被存儲在主節(jié)點306上。在圖3的示例中,在節(jié)點存儲的數(shù)據(jù)和該數(shù)據(jù)的當前版本之間存在區(qū)別。S卩,節(jié)點可以存儲元數(shù)據(jù)片段的超過一個版本,但是這些版本中的特定之一是如果請求者要求該元數(shù)據(jù)則將被提供的當前版本。當前版本可以是或可以不是最新近的版本。因此,當主節(jié)點306接收到該元數(shù)據(jù)時,主節(jié)點306可以存儲該元數(shù)據(jù)而不需要實際上提交該元數(shù)據(jù)來作為該元數(shù)據(jù)的當前版本。在某一點,主節(jié)點306將該新元數(shù)據(jù)復制312到次節(jié)點308和次節(jié)點310。復制是指將數(shù)據(jù)從主節(jié)點306復制到次節(jié)點308和次節(jié)點310的動作。在復制了數(shù)據(jù)之后,次節(jié)點308和次節(jié)點310接受元數(shù)據(jù)(在314),從而向主節(jié)點306指示它們已經(jīng)接收到并存儲了該數(shù)據(jù)。此時,主節(jié)點和次節(jié)點都擁有所寫的元數(shù)據(jù),但是尚未提交該數(shù)據(jù)。數(shù)據(jù)沒有被提交這一事實意味著,如果該寫是對現(xiàn)有元數(shù)據(jù)的更新,則節(jié)點將會繼續(xù)提供該元數(shù)據(jù)的先前版本而非新版本?;蛘?,如果元數(shù)據(jù)是元數(shù)據(jù)的新項(而非對現(xiàn)有項的更新),則節(jié)點將根本不提供該元數(shù)據(jù)。即,該寫將不被認為是元數(shù)據(jù)的真實狀態(tài)的一部分,直到所寫的數(shù)據(jù)被提交為止。在次節(jié)點提供了其接受元數(shù)據(jù)的確認或指示之后,主節(jié)點可以提交該數(shù)據(jù)。每個節(jié)點維護一提交日志。在一個示例中,元數(shù)據(jù)的當前狀態(tài)可以通過從下向上讀該日志來確定。即,假設存在具有標識符12345的元數(shù)據(jù)項。在某一點,事實上,提交日志可以說“元數(shù)據(jù)12345號的當前版本是版本A”。在日志中某一較遲的點,該日志可以說“元數(shù)據(jù)12345 號的當前版本是版本B”。因此,元數(shù)據(jù)的當前版本是版本B,這是因為當前版本可以通過日志中的與特定元數(shù)據(jù)相關的最后條目來確定。(在這一示例中,可以分別標識元數(shù)據(jù)的每個片段;然而,日志條目可以是指元數(shù)據(jù)的類別而非各單個元數(shù)據(jù)項。)因此,為提交寫操作,主節(jié)點306將新元數(shù)據(jù)的提交輸入到其提交日志316內(nèi)。此時,從主節(jié)點306的觀點來看,新寫的元數(shù)據(jù)是元數(shù)據(jù)的當前狀態(tài)的一部分。從該時間點開始,如果主節(jié)點306接收到對該新寫的元數(shù)據(jù)的讀請求,則主節(jié)點306將用該新元數(shù)據(jù)來響應,這是因為該元數(shù)據(jù)現(xiàn)在是元數(shù)據(jù)的當前真實狀態(tài)的一部分。然后,在317,主節(jié)點306 向客戶機302確認該寫。此外,在318,主節(jié)點306向次節(jié)點308和次節(jié)點310發(fā)送主節(jié)點 306已經(jīng)提交該寫的通知,并指示次節(jié)點308和次節(jié)點310進行同樣的操作。在接收到主節(jié)點306已經(jīng)提交該寫的通知后,次節(jié)點308和次節(jié)點310將該提交輸入到其各自的提交日志320和322內(nèi)。在那一點,次節(jié)點308和次節(jié)點310也將該新寫的元數(shù)據(jù)認作是元數(shù)據(jù)的當前狀態(tài)的一部分。圖4示出在諸如圖1中所示出系統(tǒng)等元數(shù)據(jù)系統(tǒng)中訪問元數(shù)據(jù)的示例過程。該訪問請求可以是讀請求或?qū)懻埱蟆T?02,接收對元數(shù)據(jù)的訪問請求。這一請求可以例如由元數(shù)據(jù)服務器106(在圖 1中示出)接收。在404,接收到該請求的實體(例如,元數(shù)據(jù)服務器106)標識包含(或?qū)?作為該請求的主題的元數(shù)據(jù)的分區(qū)。在406,把將處理該請求的節(jié)點的身份返回給請求者。在408,請求者在所標識的節(jié)點處獲得對元數(shù)據(jù)的訪問(例如,根據(jù)請求,是讀訪問、 寫訪問等等)。如上所述,在此所描述的技術可以用來管理用于任何目的的任何類型的元數(shù)據(jù)。 然而,在一個示例中,這些技術用來管理用于構(gòu)建搜索索引的元數(shù)據(jù)。通過先爬行web并構(gòu)建存在的頁面的模型來構(gòu)建諸如web等大型文檔語料庫的搜索索引。然后,索引器分析被建模的頁面并基于該分析構(gòu)建索引。頁面的模型在元數(shù)據(jù)中描述。例如,對于給定網(wǎng)頁,元數(shù)據(jù)可以用來描述該網(wǎng)頁上的內(nèi)容的類型(例如,該頁面是否包含文本、圖像、腳本等等)、 內(nèi)容片段的位置(例如,圖像從第500個字節(jié)開始出現(xiàn)在網(wǎng)頁上)、關于該頁面的結(jié)構(gòu)信息等等。因此,索引器利用所存儲的關于爬行器返回的頁面的元數(shù)據(jù)。圖5示出其中此類元數(shù)據(jù)可以被用來構(gòu)建索引的示例場景。在圖5中,爬行器502從因特網(wǎng)506定位并返回網(wǎng)頁504。爬行器502將這些頁面提供給頁面分析器508。頁面分析器508將頁面504或從該網(wǎng)頁導出的信息存儲在頁面數(shù)據(jù)庫510中。此外,頁面分析器508創(chuàng)建關于頁面504(或關于從頁面504導出的信息)的元數(shù)據(jù)512。頁面分析器508可以將元數(shù)據(jù)512存儲在元數(shù)據(jù)數(shù)據(jù)庫514中。如上所述,元數(shù)據(jù)512可以包含關于頁面504的各種類型的信息。索引生成器516是基于爬行器502所檢索到的頁面來構(gòu)建索引518的組件。索引生成器516發(fā)起對元數(shù)據(jù)的請求520。元數(shù)據(jù)數(shù)據(jù)庫514將所請求的元數(shù)據(jù)512返回到索引生成器516。元數(shù)據(jù)數(shù)據(jù)庫514可以用任何方式返回元數(shù)據(jù)512。然而,在一個示例中, 元數(shù)據(jù)數(shù)據(jù)庫514使用以上結(jié)合圖1描述的一些或所有的組件。索引生成器516訪問頁面數(shù)據(jù)庫510中的頁面數(shù)據(jù),并使用元數(shù)據(jù)512來解釋該頁面數(shù)據(jù)。然后,索引生成器516對該頁面數(shù)據(jù)執(zhí)行分析,并使用這一分析來構(gòu)建索引518。如上所述,可以在對同一分區(qū)進行服務的不同節(jié)點之間劃分工作。圖6示出實現(xiàn)在對一分區(qū)進行服務的各節(jié)點之間劃分工作的一種示例方式的過程。在602,接收訪問元數(shù)據(jù)的請求。在604,標識處理作為該請求的主題的特定元數(shù)據(jù)的分區(qū)。在606,確定該請求是讀請求還是寫請求。如上所述,在一個示例中,寫請求由分區(qū)的主節(jié)點來處理,但是讀請求可以由主節(jié)點或次節(jié)點來處理。因此,如果該請求是寫請求,則由于該請求是寫請求所以該請求被定向至該分區(qū)的主節(jié)點(框608)。將請求“定向”至特定節(jié)點可以包括,例如,向做出該元數(shù)據(jù)請求的實體通知哪一節(jié)點將會處理該請求 (以便該實體然后可以聯(lián)系該適當節(jié)點)。如果該請求是讀請求,則可以確定(在610)主節(jié)點是否不可用或過載。一般地, 主節(jié)點可以處理讀請求和寫請求(如果它能夠這么做),但是在主節(jié)點不可用或主節(jié)點上的負載很高的情況下,讀請求可以被定向至次節(jié)點。因此,如果主節(jié)點不可用或過載,則該請求可以被定向至次節(jié)點(在612)。否則,該請求可以被定向至主節(jié)點(在610)。在大型的機器群集中,由于諸如硬件故障或軟件崩潰等原因失去一些機器是正常的。為了在面臨隨機機器故障時維持元數(shù)據(jù)分區(qū)的高可用性,對于同一分區(qū),元數(shù)據(jù)服務器可以獲取用于一個分區(qū)的節(jié)點組,并可以分散這些節(jié)點以使得它們不共享同一交換機、電
9源等。如上所述,在一個分區(qū)的多個副本中,節(jié)點之一是主節(jié)點且其他節(jié)點是次節(jié)點。同樣如上所述,寫操作由主節(jié)點處理。因此,如果主節(jié)點發(fā)生故障,從而使得分區(qū)只具有次節(jié)點,則不能提交對該分區(qū)的寫。這樣,如果主節(jié)點發(fā)生故障,則元數(shù)據(jù)服務器將會把一個次節(jié)點升級變成主節(jié)點。如果在升級之后分區(qū)沒有足夠的次節(jié)點,則元數(shù)據(jù)服務器將會添加新的節(jié)點以加入該分區(qū)的節(jié)點組并充當次節(jié)點。該新的次節(jié)點將從主節(jié)點或現(xiàn)有(諸)次節(jié)點獲知數(shù)據(jù)。元數(shù)據(jù)服務器監(jiān)視元數(shù)據(jù)存儲節(jié)點的狀態(tài)。分區(qū)失去的副本越多,分區(qū)數(shù)據(jù)丟失的風險就越大。這樣,元數(shù)據(jù)服務器確保所有分區(qū)有足夠的副本。這一過程在圖7中示出。在圖7的示例中,分區(qū)702是元數(shù)據(jù)服務器106所管理的分區(qū)之一。元數(shù)據(jù)服務器106具有可以分配給分區(qū)的多個不同節(jié)點。在圖7中,示出了節(jié)點704、706、708、710、712和714。最初,節(jié)點704-708被分配給分區(qū)702,節(jié)點704作為主節(jié)點且節(jié)點706和708作為次節(jié)點。在某一點,節(jié)點704變得不可用——例如由于硬件故障、軟件故障、網(wǎng)絡連接故障、或由于某種其他原因——正如由節(jié)點704上的點線“X”所指示的那樣。因此,為確保分區(qū)702有一個主節(jié)點,元數(shù)據(jù)服務器106將節(jié)點706從作為次節(jié)點升級(716)成作為主節(jié)點。此外,為確保分區(qū)702由足夠數(shù)量的次節(jié)點來進行服務,元數(shù)據(jù)服務器分配節(jié)點712來擔任用于分區(qū)702的次節(jié)點。在該時間點,服務于分區(qū)702的節(jié)點組從節(jié)點704、706和708 (如實線邊界所指示)改變成節(jié)點706、708和712 (如虛線邊界所指示)。除了節(jié)點故障的問題之外,本文所描述的主題能解決元數(shù)據(jù)的增長的問題。如上所述,可以在對元數(shù)據(jù)進行初始分區(qū)之后對元數(shù)據(jù)進行重新分區(qū)。其中元數(shù)據(jù)可以被重新分區(qū)的一種情況是元數(shù)據(jù)的量增長到在其當前分配的節(jié)點組上的對給定分區(qū)進行服務不再可行的時間點。當這一情況發(fā)生時,元數(shù)據(jù)服務器可以指示現(xiàn)有節(jié)點分割它們所服務的分區(qū),并將所得到的分區(qū)之一移動到新的節(jié)點組。這樣,通過添加更多的機器來為元數(shù)據(jù)進行服務,本文的主題可以動態(tài)地適應逐漸增加的數(shù)據(jù)量和訪問負載。分割分區(qū)并添加新節(jié)點的過程在圖8中示出。在圖8中,分區(qū)A最初由三個節(jié)點 802、804和806來進行服務。在這一示例中,節(jié)點802是主節(jié)點,且節(jié)點804和806是次節(jié)點。在某一點,分區(qū)A獲得比其最初擁有的更多的數(shù)據(jù),這導致比用節(jié)點802-806提供服務所可行的更高的訪問請求負載。因此,元數(shù)據(jù)服務器106可以指示節(jié)點802-806將分區(qū)A 分割成兩個新分區(qū)B和C(如跨分區(qū)A的水平點線所示)。此外,一旦分區(qū)A被分割成B和 C,元數(shù)據(jù)服務器106可以指示節(jié)點802-806將分區(qū)C移動到新的節(jié)點組808、810和812。 一旦這一移動發(fā)生,節(jié)點808-812將會為分區(qū)C進行服務(對于分區(qū)C,節(jié)點808作為主節(jié)點,且節(jié)點810和812作為次節(jié)點)。此外,節(jié)點802-806現(xiàn)在將會為分區(qū)B進行服務(對于分區(qū)B,節(jié)點802作為主節(jié)點,且節(jié)點804和806作為次節(jié)點)。圖9示出其中可以部署本文所描述的主題的諸方面的示例環(huán)境。計算機900包括一個或多個處理器902和一個或多個數(shù)據(jù)記憶組件904。(諸) 處理器902通常是微處理器,如在個人臺式計算機或膝上型計算機、服務器、手持式計算機或另一類型的計算設備中含有的那些微處理器。(諸)數(shù)據(jù)記憶組件904是能夠短期或長期存儲數(shù)據(jù)的組件。(諸)數(shù)據(jù)記憶組件904的示例包括硬盤、可移動盤(包括光盤和磁盤)、易失性和非易失性隨機存取存儲器(RAM)、只讀存儲器(ROM)、閃存、磁帶等等。
(諸)數(shù)據(jù)記憶組件是計算機可讀存儲介質(zhì)的示例。計算機900可以包括顯示器912或與其關聯(lián),顯示器912可以是陰極射線管(CRT) 監(jiān)視器、液晶顯示(LCD)監(jiān)視器或任何其他類型的監(jiān)視器。軟件可以被存儲在(諸)數(shù)據(jù)記憶組件904中,而且可以在一個或多個處理器902 上運行。此類軟件的一個示例是可以實現(xiàn)以上結(jié)合圖1-6描述的一些或所有功能的元數(shù)據(jù)管理軟件906,但可以使用任何類型的軟件??梢岳缤ㄟ^一個或多個組件來實現(xiàn)軟件 906,這些組件可以是分布式系統(tǒng)中的組件、分開的文件、分開的函數(shù)、分開的對象、分開的代碼行等等。其中程序被存儲在硬盤、被加載到RAM中并被(諸)計算機處理器上執(zhí)行的計算機(例如,個人計算機、服務器計算機、手持式計算機等等)代表圖9中所描繪的場景, 但在此所描述的主題不限于這一示例。在此所描述的主題可以被實現(xiàn)為被存儲在數(shù)據(jù)記憶組件904中的一個或多個內(nèi)并在一個或多個處理器902上執(zhí)行的軟件。作為另一示例,本主題可以被實現(xiàn)為存儲在一個或多個計算機可讀存儲介質(zhì)上的指令。諸如光盤或磁盤等有形介質(zhì)是存儲介質(zhì)的示例。 指令可以存在于非暫態(tài)介質(zhì)上。此類指令在由計算機或其他機器執(zhí)行時可以使得計算機或其他機器執(zhí)行一種方法的一個或多個動作。執(zhí)行動作的指令可以被存儲在一個介質(zhì)上,或可以開跨多個介質(zhì)來分布,以使得這些指令共同出現(xiàn)在一個或多個計算機可讀存儲介質(zhì)上而無論所有指令是否恰好是在同一介質(zhì)上。此外,作為方法的一部分,在此所描述的任何動作(無論是否在圖中示出)可以由處理器(例如,一個或多個處理器90 執(zhí)行。因此,如果在此描述動作A、B和C,則可以執(zhí)行一種包括動作A、B和C的方法。此外,如果在此描述動作A、B和C,則,可以執(zhí)行一種包括使用處理器執(zhí)行動作A、B和C的方法。在一個示例環(huán)境中,計算機900可以通過網(wǎng)絡908在通信上連接到一個或多個其他設備。結(jié)構(gòu)上可以類似于計算機900的計算機910是可以被連接到計算機900的設備示例,但其他類型的設備也可以這樣連接。盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權利要求書中定義的主題不必限于上述具體特征或動作。更確切而言,上述具體特征和動作是作為實現(xiàn)權利要求的示例形式公開的。
權利要求
1.一種用于處理元數(shù)據(jù)的方法,所述方法包括從實體(102)接收(402)關于元數(shù)據(jù)(512)項的請求(104); 標識(404)存儲所述元數(shù)據(jù)(51 項的分區(qū)(108),其中元數(shù)據(jù)的正文被劃分成第一多個分區(qū)(108,110,112),所述分區(qū)(108)是所述第一多個分區(qū)(108,110,112)之一; 向所述實體(102)提供(406)為所述分區(qū)(108)處理請求的節(jié)點(116)的身份; 在所述節(jié)點(116)處接收來自所述實體(102)的所述請求(104);以及根據(jù)所述請求(104)讀或?qū)?408)所述元數(shù)據(jù)(51 項。
2.如權利要求1所述的方法,其特征在于,所述第一多個分區(qū)的每一個是由第一節(jié)點和與所述第一節(jié)點不同的第二節(jié)點服務的,并且所述方法還包括將所述元數(shù)據(jù)項從所述第一節(jié)點復制到所述第二節(jié)點; 從所述第二節(jié)點接收所述元數(shù)據(jù)項已被所述第二節(jié)點接收的確認; 從所述第一節(jié)點向所述第二節(jié)點發(fā)送提交所述元數(shù)據(jù)項的指令;以及僅在接收到所述提交指令之后,才從所述第二節(jié)點服務所述元數(shù)據(jù)項。
3.如權利要求2所述的方法,其特征在于,所述第一節(jié)點維持第一日志,其中所述第二節(jié)點維持與所述第一日志不同的第二日志,其中所述提交指令使得所述第二節(jié)點將所述元數(shù)據(jù)項輸入所述第二日志,且其中所述第一節(jié)點和所述第二節(jié)點的每一個基于所述元數(shù)據(jù)項是否在給定節(jié)點各自日志中來確定是否服務所述元數(shù)據(jù)項。
4.如權利要求1所述的方法,其特征在于,所述第一多個分區(qū)的每一個是由第一節(jié)點和與所述第一節(jié)點不同的第二節(jié)點服務的,并且其中所述第一節(jié)點和所述第二節(jié)點不連接到同一交換機。
5.如權利要求1所述的方法,其特征在于,所述第一多個分區(qū)的每一個是由第一節(jié)點和與所述第一節(jié)點不同的第二節(jié)點服務的,并且所述標識包括在所述請求包括寫請求時僅標識所述第一節(jié)點;在所述請求包括讀請求時標識所述第一節(jié)點或所述第二節(jié)點。
6.如權利要求5所述的方法,其特征在于,在所述請求包括讀請求時標識所述第一節(jié)點或所述第二節(jié)點包括在所述第一節(jié)點不可用或過載時標識所述第二節(jié)點;以及否則標識所述第一節(jié)點。
7.如權利要求1所述的方法,其特征在于,還包括將所述元數(shù)據(jù)從所述第一多個分區(qū)中重新分區(qū)到不同于所述第一多個分區(qū)的第二多個分區(qū)中。
8.如權利要求7所述的方法,其特征在于,所述重新分區(qū)包括確定對于分配到所述第一多個分區(qū)的第一個的第一組節(jié)點來說處理所述第一多個分區(qū)的第一個中的元數(shù)據(jù)的量是不可行的;將所述第一多個分區(qū)的所述第一個分割成第二分區(qū)和第三分區(qū); 分配所述第一組節(jié)點來處理所述第二分區(qū);以及分配不同于所述第一組節(jié)點的第二組節(jié)點來處理所述第三分區(qū)。
9.一種包括用于執(zhí)行權利要求1-8中任意一項的方法的計算機可執(zhí)行指令的計算機可讀介質(zhì)。
10.一種用于服務元數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括多個節(jié)點(116,118,120,122,IM,1 ),存在元數(shù)據(jù)的多個分區(qū)(108,110,112),其中每個分區(qū)由以下節(jié)點來服務所述多個節(jié)點之一的第一節(jié)點(116);以及所述多個節(jié)點之一的不同于所述第一節(jié)點(116)的第二節(jié)點(118);元數(shù)據(jù)服務器(106),所述元數(shù)據(jù)服務器將元數(shù)據(jù)分配到所述多個分區(qū)(108,110, 112),并將對元數(shù)據(jù)(512)項的請求(104)定向至所述元數(shù)據(jù)項的分配分區(qū)(108);以及多個提交日志(316,320,322),其中所述多個節(jié)點的每一個維持所述提交日志之一,其中所述節(jié)點的每一個存儲元數(shù)據(jù)(512)項的多于一個的版本,并且其中每一個節(jié)點基于給定元數(shù)據(jù)(51 項是否出現(xiàn)在所述節(jié)點的提交日志(316)中來確定所述元數(shù)據(jù)項的哪個版本是當前的;其中給定分區(qū)(108)的所述第一節(jié)點(116)向?qū)λ鼋o定分區(qū)(108)的寫請求進行服務,并且在所述第一節(jié)點不可用或過載時向?qū)λ鼋o定區(qū)域(108)的讀請求進行服務。
11.如權利要求10所述的系統(tǒng),其特征在于,還包括一個或多個交換機,其中給定分區(qū)的所述第一節(jié)點和所述第二節(jié)點不連接到所述一個或多個交換機的同一個。
12.如權利要求10所述的系統(tǒng),其特征在于,給定分區(qū)的所述第一節(jié)點將其存儲的元數(shù)據(jù)復制到所述給定分區(qū)的所述第二節(jié)點。
13.如權利要求12所述的系統(tǒng),其特征在于,所述第一節(jié)點從所述第二節(jié)點接收所復制的元數(shù)據(jù)已被接收的指示,并接著,在接收所述指示之后,指令所述第二節(jié)點在所述第二節(jié)點的提交日志中提交所復制的元數(shù)據(jù)。
14.如權利要求10所述的系統(tǒng),其特征在于,所述元數(shù)據(jù)服務器檢測所述第一節(jié)點已失敗,分配所述第二節(jié)點來接替所述第一節(jié)點的功能,包括對寫請求進行服務,并且分配與所述第一節(jié)點和第二節(jié)點不同的第三節(jié)點來作為所述分區(qū)的次節(jié)點。
15.如權利要求10所述的系統(tǒng),其特征在于,所述元數(shù)據(jù)服務器是復制彼此的功能和數(shù)據(jù)的元數(shù)據(jù)服務器群集之一。
全文摘要
元數(shù)據(jù)可以被存儲在可縮放的容錯元數(shù)據(jù)服務中,并可從中檢索。在一個示例中,元數(shù)據(jù)被分為各個分區(qū),且每一分區(qū)由一個或多個節(jié)點來服務。對于每一分區(qū),節(jié)點中的第一個可以處理讀和寫請求,而其它節(jié)點可以在第一節(jié)點故障或經(jīng)歷高負載時處理讀請求。當相對于元數(shù)據(jù)作出請求時,元數(shù)據(jù)服務器可在該元數(shù)據(jù)被分配給的分區(qū)中標識要對其作出該請求的節(jié)點。作出請求的實體接著聯(lián)系那個節(jié)點,并請求對元數(shù)據(jù)的讀或?qū)?。在一分區(qū)中,元數(shù)據(jù)可以在第一節(jié)點和其它節(jié)點之間使用基于日志的復制協(xié)議來復制。
文檔編號G06F11/14GK102253869SQ20111013829
公開日2011年11月23日 申請日期2011年5月18日 優(yōu)先權日2010年5月19日
發(fā)明者J·許, M·葉, N·曾, Y·余, Y·曹, 馮宏華, 宋霖 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
富顺县| 珠海市| 永兴县| 游戏| 宁陕县| 阳城县| 长垣县| 海宁市| 湖南省| 庄河市| 连平县| 都匀市| 吴忠市| 佛学| 遂平县| 齐齐哈尔市| 阳信县| 定南县| 普洱| 汕头市| 鸡泽县| 望城县| 新乡市| 奉新县| 定安县| 阿拉善右旗| 淳安县| 土默特右旗| 枣庄市| 长垣县| 微博| 高青县| 渝北区| 华容县| 遵义县| 清河县| 古交市| 大厂| 宁城县| 上犹县| 伊宁县|