亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

具有網(wǎng)絡(luò)服務(wù)客戶接口的分布式存儲系統(tǒng)的制作方法

文檔序號:6570602閱讀:613來源:國知局
專利名稱:具有網(wǎng)絡(luò)服務(wù)客戶接口的分布式存儲系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)存儲系統(tǒng),尤其是涉及配置成提供對存儲器的訪問作 為網(wǎng)絡(luò)服務(wù)的存儲系統(tǒng)。
相關(guān)技術(shù)的描述
很多不同的計算應(yīng)用依賴于用于持久存儲各種應(yīng)用程序數(shù)據(jù)的一些 類型的存儲介質(zhì)。例如,普通辦公應(yīng)用程序和多媒體應(yīng)用程序產(chǎn)生并使用 各種類型和格式的應(yīng)用數(shù)據(jù),例如其中包括文檔、電子表格、靜止的圖像、 音頻和視頻數(shù)據(jù)。經(jīng)常地,這樣的數(shù)據(jù)被存儲,用于以用戶名義的重復(fù)的 訪問或使用。例如,用戶可能希望在一段時間內(nèi)存儲和處理很多文檔或其 它數(shù)據(jù),并可能期望在需要時數(shù)據(jù)以可預(yù)測的狀態(tài)可容易得到。
在傳統(tǒng)計算系統(tǒng)中,由應(yīng)用程序用于持久的應(yīng)用程序數(shù)據(jù)存儲的存儲 介質(zhì)通常大部分為磁性固定的驅(qū)動器或"硬驅(qū)動器",雖然也可使用光和固態(tài) 存儲設(shè)備。這樣的設(shè)備集成在執(zhí)行應(yīng)用程序的計算機系統(tǒng)中或可通過本地 外圍接口或網(wǎng)絡(luò)訪問該系統(tǒng)。 一般來說,用作應(yīng)用程序存儲的設(shè)備由管理 設(shè)備級行為的操作系統(tǒng)管理,以向需要存儲訪問的各種應(yīng)用程序提供相容 的存儲接口,例如文件系統(tǒng)接口。
應(yīng)用程序存儲的該常規(guī)模型呈現(xiàn)一些限制。首先,它通常限制應(yīng)用程 序數(shù)據(jù)的可訪問性。例如,如果應(yīng)用程序數(shù)據(jù)存儲在特定計算機系統(tǒng)的本 地硬驅(qū)動器上,它可能對在其它系統(tǒng)上執(zhí)行的應(yīng)用程序是不可訪問的。即 使數(shù)據(jù)存儲在網(wǎng)絡(luò)可訪問的設(shè)備上,在當(dāng)前網(wǎng)絡(luò)外部的系統(tǒng)上執(zhí)行的應(yīng)用 程序可能不能訪問該設(shè)備。例如,由于安全原因,企業(yè)通常限制對其局域網(wǎng)(LAN )的訪問,以便企業(yè)外部的系統(tǒng)不能訪問企業(yè)內(nèi)部的系統(tǒng)或資源。 因此,在便攜式設(shè)備(例如,筆記本或手持式計算機、個人數(shù)字助理、移 動電話設(shè)備等)上執(zhí)行的應(yīng)用程序可能經(jīng)歷訪問持久地與固定的系統(tǒng)或網(wǎng) 絡(luò)關(guān)聯(lián)的數(shù)據(jù)的困難。
傳統(tǒng)的應(yīng)用程序存儲模型還可能不能充分確保所存儲的數(shù)據(jù)的可靠 性。例如,傳統(tǒng)操作系統(tǒng)一般默認將應(yīng)用程序數(shù)據(jù)的一個備份存儲在一個 存儲設(shè)備上,如果希望數(shù)據(jù)冗余,則要求用戶或應(yīng)用程序產(chǎn)生并管理其自 己的應(yīng)用程序數(shù)據(jù)的備份。雖然個別存儲設(shè)備或第三方軟件可提供一些程 度的冗余,但這些功能部件對應(yīng)用程序可能不是始終如一地可得到的,因 為應(yīng)用程序可得到的存儲資源可能在應(yīng)用程序安裝中極大地變化。操作系 統(tǒng)作為媒介的傳統(tǒng)存儲模型還可能限制數(shù)據(jù)的交叉平臺可訪問性。例如, 不同的操作系統(tǒng)可以不同的、不兼容的格式存儲用于相同的應(yīng)用程序的數(shù) 據(jù),這可能使在一個平臺(例如,操作系統(tǒng)和基本的計算機系統(tǒng)硬件)上 執(zhí)行的應(yīng)用程序的用戶難以訪問通過在不同平臺上執(zhí)行的應(yīng)用程序存儲 的數(shù)據(jù)。

發(fā)明內(nèi)容
公開了分布式基于網(wǎng)絡(luò)服務(wù)的存儲系統(tǒng)的不同實施方式。根據(jù)一個實 施方式,系統(tǒng)可包括配置成根據(jù)網(wǎng)絡(luò)服務(wù)協(xié)議來接收對數(shù)據(jù)對象的訪問的 客戶請求的網(wǎng)絡(luò)服務(wù)接口。對給定數(shù)據(jù)對象的訪問的給定客戶請求可包括 相應(yīng)于給定數(shù)據(jù)對象的鍵值。系統(tǒng)還可包括配置成存儲數(shù)據(jù)對象的復(fù)本的 很多存儲節(jié)點,其中每個復(fù)本可通過相應(yīng)的定位器值(locator value )訪問, 且其中每個定位器值在系統(tǒng)內(nèi)是唯一的。系統(tǒng)可進一步包括配置成存儲每 個數(shù)據(jù)對象的相應(yīng)的鍵映射項目的鍵映射實例,其中對于給定的數(shù)據(jù)對 象,相應(yīng)的鍵映射項目包括鍵值和相應(yīng)于給定數(shù)據(jù)對象的每個存儲的復(fù)本 的每個定位器值。系統(tǒng)還可包括配置成從網(wǎng)絡(luò)服務(wù)接口接收對數(shù)據(jù)對象的 訪問的客戶請求的協(xié)調(diào)器。響應(yīng)于給定的客戶請求,協(xié)調(diào)器可配置成訪問 鍵映射實例,以識別相應(yīng)于鍵值的一個或更多定位器值,并且對于特定的 定位器值,訪問相應(yīng)的存儲節(jié)點以取回相應(yīng)的復(fù)本。
14在系統(tǒng)的特定實現(xiàn)中,網(wǎng)絡(luò)服務(wù)接口可迸一步配置成根據(jù)網(wǎng)絡(luò)服務(wù)協(xié) 議來接收存儲數(shù)據(jù)對象的客戶請求,其中存儲特定數(shù)據(jù)對象的特定客戶請 求包括相應(yīng)于特定數(shù)據(jù)對象的健值。協(xié)調(diào)器可進一步配置成從網(wǎng)絡(luò)服務(wù)接 口接收存儲數(shù)據(jù)對象的客戶請求,并響應(yīng)于特定的客戶請求,協(xié)調(diào)器可配 置成將特定數(shù)據(jù)對象的一個或更多復(fù)本存儲到一個或更多相應(yīng)的存儲節(jié) 點。響應(yīng)于存儲特定數(shù)據(jù)對象的給定復(fù)本,給定的存儲節(jié)點可配置成將相 應(yīng)于給定復(fù)本的定位器值返回到協(xié)調(diào)器。
附圖的簡要說明


圖1是示出用于向用戶提供存儲作為網(wǎng)絡(luò)服務(wù)的存儲模型的一個實施 方式的結(jié)構(gòu)圖。
圖2是示出存儲服務(wù)系統(tǒng)體系結(jié)構(gòu)的一個實施方式的結(jié)構(gòu)圖。
圖3是示出存儲服務(wù)系統(tǒng)組件的物理部署的一個實施方式的結(jié)構(gòu)圖。
圖4是示出存儲節(jié)點的一個實施方式的結(jié)構(gòu)圖。
圖5是示出配置成組織存儲節(jié)點內(nèi)的數(shù)據(jù)對象的數(shù)據(jù)結(jié)構(gòu)的一個實施 方式的結(jié)構(gòu)圖。
圖6是示出執(zhí)行對象獲取操作的方法的一個實施方式的流程圖。 圖7是示出執(zhí)行對象放置操作的方法的一個實施方式的流程圖。 圖8是示出執(zhí)行對象釋放操作的方法的一個實施方式的流程圖。 圖9是示出重裝對象存儲空間的方法的一個實施方式的流程圖。 圖10是示出一組鍵映射實例數(shù)據(jù)結(jié)構(gòu)的一個實施方式的結(jié)構(gòu)圖。 圖IIA-D示出鍵映射實例的分級實現(xiàn)的一個實施方式。 圖12是概述鍵映射實例內(nèi)分級層次間的關(guān)系的結(jié)構(gòu)圖。 圖13是示出執(zhí)行鍵映射項目放置操作的方法的一個實施方式的流程圖。
圖14是示出執(zhí)行鍵映射項目獲取操作的方法的一個實施方式的流程
15圖。
圖15A是示出使用更新傳播來使鍵映射實例同步的方法的一個實施方 式的流程圖。
圖15B是示出使用反熵協(xié)議(anti-entr叩y protocol )來使鍵映射實例 同步的方法的一個實施方式的流程圖。
圖16是示出復(fù)制器鍵映射項目的一個實施方式的結(jié)構(gòu)圖。
圖17示出不平衡索引數(shù)據(jù)結(jié)構(gòu)的一個實施方式。
圖18示出用在不平衡索引數(shù)據(jù)結(jié)構(gòu)中的索引節(jié)點的一個實施方式。
圖19示出分層索引數(shù)據(jù)結(jié)構(gòu)的一個實施方式。
圖20是示出遍歷不平衡索引數(shù)據(jù)結(jié)構(gòu)的方法的一個實施方式的流程圖。
圖21是示出處理FINGERPRINT反熵協(xié)議消息的方法的一個實施方 式的流程圖。
圖22是示出處理FILTER反熵協(xié)議消息的方法的一個實施方式的流程圖。
圖23示出發(fā)現(xiàn)和故障檢測監(jiān)控進程(DFDD )的一個實施方式。
圖24示出可由DFDD實例維持的全局操作狀態(tài)機的一個實施方式。
圖25是示出根據(jù)基于閑聊(gossip-based )的協(xié)議使DFDD實例同步 的方法的一個實施方式的流程圖。
圖26是示出在存儲服務(wù)系統(tǒng)內(nèi)的存儲類的操作的方法的一個實施方 式的流程圖。
圖27是示出根據(jù)存儲節(jié)點的當(dāng)前狀態(tài)信息動態(tài)地確定用于存儲數(shù)據(jù) 對象的一個或更多復(fù)本的寫入計劃的一個實施方式的流程圖。
圖28是示出動態(tài)地確定關(guān)于對象的寫入計劃的一個實施方式的流程 圖,該對象的一個或更多復(fù)本已被存儲在存儲節(jié)點中間。
圖29是示出計算機系統(tǒng)的示例性實施方式的流程圖。
16雖然本發(fā)明易受各種更改和可選形式的影響,但是其具體的實施方式 作為例子在附圖中示出并將在這里被詳細描述。然而應(yīng)理解,附圖和對其 的詳細描述不是用來將本發(fā)明限制到所公開的特定形式,而是相反,本發(fā) 明包括落在如所附權(quán)利要求界定的本發(fā)明的實質(zhì)和范圍內(nèi)的所有更改、等 效物和可選方案。
實施方式的詳細說明
介紹
當(dāng)計算應(yīng)用程序變成更加數(shù)據(jù)密集的以及地理上分散的時,對應(yīng)用程 序數(shù)據(jù)的可靠、與位置無關(guān)的訪問的需要便增加了。例如,多媒體應(yīng)用程 序如授權(quán)、存儲和重放應(yīng)用程序要求當(dāng)多媒體內(nèi)容的質(zhì)量和數(shù)量提高時逐 步增加數(shù)據(jù)存儲的量。進一步地,可能期望從不同位置訪問應(yīng)用程序數(shù)據(jù), 而不考慮存儲數(shù)據(jù)的設(shè)備的位置如何。例如,雖然很多計算機包括相當(dāng)數(shù) 量的基于磁盤的存儲器,但是以統(tǒng)一和方便的方式遠程訪問這樣的存儲器 呈現(xiàn)出技術(shù)上和安全性上的困難。
與配置各個計算機以完全依賴于其自己的內(nèi)部存儲資源或提供基于
局域網(wǎng)的存儲資源(例如,網(wǎng)絡(luò)附屬存儲(NAS 、存儲區(qū)域網(wǎng)絡(luò)(SAN ) 等)相反,連接互聯(lián)網(wǎng)的數(shù)據(jù)存儲服務(wù)可配置成通過基于互聯(lián)網(wǎng)的協(xié)議例 如網(wǎng)絡(luò)服務(wù)(WS )協(xié)議向客戶提供一般存儲服務(wù)?;诨ヂ?lián)網(wǎng)的協(xié)議例 如網(wǎng)絡(luò)服務(wù)協(xié)議一般是獨立于平臺的,因為它們一般獨立于基本的軟件或 硬件起作用。因此,提供數(shù)據(jù)存儲能力作為網(wǎng)絡(luò)服務(wù)可提供不依賴于在應(yīng) 用程序主機系統(tǒng)內(nèi)或局域網(wǎng)上實現(xiàn)的存儲資源而對任意數(shù)量的存儲的很 多不同類型的應(yīng)用程序直接訪問。此外,通??蓮奶峁┗ヂ?lián)網(wǎng)接入的任何 位置訪問網(wǎng)絡(luò)服務(wù)可訪問的存儲器。網(wǎng)絡(luò)服務(wù)可訪問的存儲器可促進很多 不同計算功能部件的實現(xiàn),例如通過不同設(shè)備或應(yīng)用程序?qū)脭?shù)據(jù)的遠 程訪問、在執(zhí)行期間通過各個應(yīng)用程序?qū)V泛分布的數(shù)據(jù)的遠程訪問、在 協(xié)作工作的分布的用戶中間對數(shù)據(jù)的訪問和/或共享、在分布的用戶中間對 應(yīng)用程序結(jié)果數(shù)據(jù)的分發(fā),以及很多其它類似的功能部件。在下面的討論中,描述了可用在基于網(wǎng)絡(luò)服務(wù)的存儲系統(tǒng)中的可能的 數(shù)據(jù)存儲模型的一個實施方式。此后,公開了根據(jù)該數(shù)據(jù)存儲模型可配置 成提供存儲服務(wù)的存儲服務(wù)系統(tǒng),并詳細描述了其各個組件。
存儲服務(wù)用戶接口和存儲模型的概述
用于向用戶提供數(shù)據(jù)存儲作為服務(wù)例如網(wǎng)絡(luò)服務(wù)的存儲模型的一個
實施方式在圖1中示出。在所示模型中,存儲服務(wù)接口 10設(shè)置為到存儲 服務(wù)的面向顧客或用戶的接口。根據(jù)通過接口 10呈現(xiàn)給用戶的模型,存 儲服務(wù)可組織為可通過接口 10訪問的任意數(shù)量的存儲桶20a-n。每個存儲 桶20可配置成存儲任意數(shù)量的對象30a-n ,對象30又可存儲由存儲服務(wù) 的用戶指定的數(shù)據(jù)。
如下面更詳細描述的,在一些實施方式中,存儲服務(wù)接口 10可配置 成根據(jù)網(wǎng)絡(luò)服務(wù)模型支持存儲服務(wù)及其用戶之間的交互作用。例如,在一 個實施方式中,接口 10可作為具有統(tǒng)一資源定位器(URL ),例如 http:〃storageservice.domain.com的網(wǎng)絡(luò)服務(wù)端點而被客戶訪問,由服務(wù)客戶 產(chǎn)生的網(wǎng)絡(luò)服務(wù)請求可被指引到該URL而進行處理。 一般而言,網(wǎng)絡(luò)服務(wù) 可指發(fā)出請求的客戶通過請求接口可得到的任何類型的計算服務(wù),該請求 接口包括一個或更多基于互聯(lián)網(wǎng)的應(yīng)用層數(shù)據(jù)傳輸協(xié)議,例如超文本傳輸 協(xié)議(HTTP )的一種版本或另外的適當(dāng)協(xié)議。
網(wǎng)絡(luò)服務(wù)可使用各種授權(quán)服務(wù)協(xié)議以各種體系結(jié)構(gòu)形式實現(xiàn)。例如, 在具象狀態(tài)傳輸(REST )形式的網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)中,與網(wǎng)絡(luò)服務(wù)請求有 關(guān)的參數(shù)(例如,指定所請求的服務(wù)的類型、用戶證書、將對其進行操作 的用戶數(shù)據(jù)等)可被指定為將網(wǎng)絡(luò)服務(wù)請求調(diào)用到網(wǎng)絡(luò)服務(wù)端點的數(shù)據(jù)傳 輸命令的參數(shù),該數(shù)據(jù)傳輸命令例如HTTP GET或PUT命令。在_些實 現(xiàn)中,REST形式的網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)是無狀態(tài)的,因為每個網(wǎng)絡(luò)服務(wù)請 求可包括處理該請求的所有信息而不參考外部狀態(tài)信息。與REST形式的 網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)相反,基于文檔或墓于消息的網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)可將與 網(wǎng)絡(luò)服務(wù)請求有關(guān)的參數(shù)和數(shù)據(jù)編碼為可被傳輸?shù)骄W(wǎng)絡(luò)服務(wù)端點并接著 被該端點解碼和作用的文檔。例如,可擴展標記語言(XML )的一種版本 或另外的適當(dāng)標記語言可用于格式化網(wǎng)絡(luò)服務(wù)請求文檔。在一些實施方式中,用于格式化請求文檔的標記語言可為控制請求的處理的參數(shù)定界,而 在其它實施方式中,標記語言本身的某些功能部件(例如,某些標志)可 直接控制請求處理的方面。此外,在一些實施方式中,最終的文檔可封裝
在另一協(xié)議例如簡單對象訪問協(xié)議(SOAP )的一種版本內(nèi),例如以便促 進端點對網(wǎng)絡(luò)服務(wù)請求的處理。
其它協(xié)議也可用在網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)的不同實施方式中。例如,網(wǎng)絡(luò) 服務(wù)描述語言(WSDL )的一種版本可被網(wǎng)絡(luò)服務(wù)端點用于向可能的客戶 公布其接口技術(shù)要求。網(wǎng)絡(luò)服務(wù)端點可通過目錄協(xié)議例如統(tǒng)一描述、發(fā)現(xiàn) 和集成(UDDI )協(xié)議的一種版本來使自己被可能的客戶識別。與通過網(wǎng) 絡(luò)服務(wù)接口提供計算服務(wù)有關(guān)的很多其它類型的協(xié)議可能存在,且任何給 定的網(wǎng)絡(luò)服務(wù)實現(xiàn)可使用這樣的協(xié)議的任何適當(dāng)?shù)慕M合。
可以設(shè)想,在一些實施方式中,接口 10可支持不同于網(wǎng)絡(luò)服務(wù)接口 的、代替網(wǎng)絡(luò)服務(wù)接口的或除了網(wǎng)絡(luò)服務(wù)接口外的接口。例如,企業(yè)可實 現(xiàn)企業(yè)外部的客戶以及企業(yè)內(nèi)部的用戶使用的存儲服務(wù),其中企業(yè)外部的 客戶可通過網(wǎng)絡(luò)服務(wù)協(xié)議訪問服務(wù),企業(yè)內(nèi)部的用戶可使用不同類型的接 口 (例如,對企業(yè)的內(nèi)聯(lián)網(wǎng)定制的專用接口 )o在一些實施方式中,接口 10可支持各種類型的接口連接協(xié)議中的每一個,存儲服務(wù)的任何用戶可通 過這些協(xié)議訪問服務(wù)。在其它實施方式中,可為每個不同的接口方案提供 接口 IO的不同實例。注意,在一些實施方式中,與處理與客戶的交互(例 如,接收和響應(yīng)服務(wù)請求)有關(guān)的接口 10的那些方面可與實現(xiàn)存儲服務(wù) 一般體系結(jié)構(gòu)的那些方面(例如,進入存儲桶和對象的層中的服務(wù)的組織) 分開地實現(xiàn)。在一些這樣的實施方式中,與客戶交互作用(例如,通過網(wǎng) 絡(luò)服務(wù)協(xié)議)有關(guān)的接口 10的部分可能被某些用戶例如企業(yè)內(nèi)部的那些 用戶繞過,如下面結(jié)合圖2的描述較詳細描述的。
如圖1所示,接口 10給存儲服務(wù)用戶提供對存儲桶20的訪問。 一般 而言,存儲桶20可用作與存儲服務(wù)的用戶關(guān)聯(lián)的對象命名空間的根。例 如,存儲桶20可能類似于文件系統(tǒng)目錄或文件夾。在一些實施方式中, 各個存儲桶20還可形成用于解釋存儲服務(wù)的使用的基礎(chǔ)。例如,用戶可 與一個或更多用于記賬目的的存儲桶20關(guān)聯(lián),且該用戶可使用存儲資源
19(例如對象30的存儲)而被開帳單,其中的存儲資源分級地駐留在由那 些存儲桶20建立的命名空間內(nèi)。
在所示實施方式中,每個存儲桶20a-n包括相關(guān)的元數(shù)據(jù)21a-n以及 相應(yīng)的訪問策略23a-n。 一般而言,元數(shù)據(jù)21可包括可用于描述給定存儲 桶20的方面或特性的任何適當(dāng)?shù)脑獢?shù)據(jù)。例如,元數(shù)據(jù)21可包括識別存 儲桶創(chuàng)建的日期、其創(chuàng)建者的身份的信息或其它適當(dāng)?shù)男畔ⅲ还艽鎯?桶是否具有任何與其相關(guān)聯(lián)的對象30。在一些實施方式中,元數(shù)據(jù)21可
包括指示存儲桶20的使用特征的信息,例如與存儲桶20關(guān)聯(lián)的對象30 的總大小、關(guān)于存儲桶20和/或其相關(guān)聯(lián)的對象30的用戶的訪問歷史紀錄、 與存儲桶20相關(guān)聯(lián)的記賬歷史紀錄、或與存儲桶20的當(dāng)前或過去使用有 關(guān)的任何其它適當(dāng)?shù)男畔?。在一個實施方式中,每個桶20可與相應(yīng)的唯 一標識符關(guān)聯(lián),該標識符可由用戶指定或被存儲服務(wù)自動分配。唯一的標 識符可存儲在元數(shù)據(jù)21中或作為存儲桶20的單獨的特性或字段。注意, 在一些實施方式中,給定存儲桶20可不包括顯式引用、指針或相應(yīng)于與 給定存儲桶20關(guān)聯(lián)的對象30的其它信息。更確切地,如下面更詳細描述 的,對象30的定位和選擇可通過使用在這里稱為鍵映射的單獨的映射程 序(mapping facility )來執(zhí)行。
訪問策略23可包括控制對與存儲桶20關(guān)聯(lián)的對象30的訪問所需的 任何信息。訪問策略23可包括識別被允許訪問存儲桶20及其相關(guān)聯(lián)的對 象30的客戶以及在什么容量內(nèi)的信息。例如,訪問策略23可存儲一個或 更多客戶的用戶標識符和/或認證證書(例如,口令),并可進一步指定給 定客戶是否被允許修改或僅僅讀取對象30。訪問策略23還可實現(xiàn)默認的 或面向組的策略(例如,通過對指定的客戶或客戶組允許對對象30的一 般讀取訪問但限制寫入訪問)或任何其它期望的安全模型。
在所示實施方式中,給定存儲桶20可與一個或更多對象30關(guān)聯(lián),其 中每個對象都包括各自的元數(shù)據(jù)31和數(shù)據(jù)33。 一般而言,對象30的數(shù)據(jù) 33可相應(yīng)于任何比特序列。由存儲在對象30內(nèi)的比特表示的數(shù)據(jù)的類型 對存儲服務(wù)來說可以是透明的。也就是說,比特可表示文本數(shù)據(jù)、可執(zhí)行 的程序代碼、音頻、視頻或圖像數(shù)據(jù)或任何其它類型的數(shù)字數(shù)據(jù),而存儲服務(wù)可不必在存儲和操作對象30時在這些不同的數(shù)據(jù)類型中間進行區(qū)分。 在一些實施方式中,可將數(shù)據(jù)33的大小限制為固定的最高限度(例如,1 千兆字節(jié)(GB)),而在其它實施方式中,可允許對象30僅僅以存儲服務(wù) 可用的物理存儲資源為條件來在大小上按比例變化。
類似于與存儲桶21相關(guān)的元數(shù)據(jù)21 ,元數(shù)據(jù)31可配置成存儲關(guān)于其 相應(yīng)的對象30的任何期望的描述性信息。例如,元數(shù)據(jù)31可包括關(guān)于相 應(yīng)的對象30被創(chuàng)建的日期和/或時間、對象30的大小、被對象30存儲的 數(shù)據(jù)33的類型(例如,由多用途互聯(lián)網(wǎng)郵件擴充(MIME )標準定義的數(shù) 據(jù)類型)的信息或任何其它類型的描述性信息。在一些實施方式中,元數(shù) 據(jù)31可儲存指示與相應(yīng)的對象30的用戶交互作用的使用或歷史紀錄信 息,以及訪問策略信息(例如,指示不同用戶可具有的對對象30的訪問 的類型的許可信息X對象費用信息(例如,與對象30關(guān)聯(lián)的開單率或歷 史紀錄),或?qū)儆趯ο?0的任何其它適當(dāng)?shù)男畔⒒蛐畔㈩愋偷慕M合。在一 些實例中,客戶可提供元數(shù)據(jù)連同將被存儲為元數(shù)據(jù)31的對象數(shù)據(jù),而 在其它情況下,元數(shù)據(jù)31可包括由管理存儲服務(wù)功能部件的系統(tǒng)(例如, 在圖2中示出和在下面描述的存儲服務(wù)系統(tǒng))產(chǎn)生的元數(shù)據(jù)。具有對對象 30的訪問權(quán)限的客戶可訪問元數(shù)據(jù)31中的一些、全部或根本不能訪問元 數(shù)據(jù)31 ,這取決于元數(shù)據(jù)的類型、客戶訪問權(quán)限的特定規(guī)定或其它適當(dāng)?shù)?因素。
在一個實施方式中,可使用兩個不同的信息項一鍵或定位器中的任一 項來在存儲服務(wù)系統(tǒng)內(nèi)識別各個對象30。 一般而言,雖然鍵和定位器可以 不同的方式被解釋,但是鍵和定位器每個可包括在存儲服務(wù)系統(tǒng)的命名空 間的環(huán)境內(nèi)作為整體被解釋的字母數(shù)字字符串或其它類型的符號。在一個 實施方式中,鍵可在相應(yīng)的對象30在特定的存儲桶20內(nèi)被創(chuàng)建時由客戶 指定(例如,響應(yīng)于客戶存儲新對象的請求 如果沒有鍵被用戶指定, 則鍵可由存儲服務(wù)系統(tǒng)分配給新對象30。在這樣的實施方式中,可能要求 與特定存儲桶20的對象30關(guān)聯(lián)的每個相應(yīng)的鍵在該存儲桶20的命名空 間內(nèi)是唯一的。 一般而言,只要相應(yīng)的對象存在于存儲服務(wù)系統(tǒng)內(nèi),鍵就 可作為有效的標識符繼續(xù)存在,客戶可通過該標識符可訪問相應(yīng)的對象30。
在給定存儲桶20內(nèi),鍵可用于產(chǎn)生與傳統(tǒng)操作系統(tǒng)的文件系統(tǒng)共用 的文件目錄或文件夾命名空間類似的分層對象命名空間。例如,可準予客 戶對具有唯一標識符050739517的特定存儲桶20的對象讀取和寫入訪問 權(quán)限。在一個實施方式中,客戶可接著發(fā)出對地址 http:〃storageservice.domain.com/050739717的網(wǎng)絡(luò)服務(wù)請求,以便在存儲桶 命名空間內(nèi)產(chǎn)生相應(yīng)于存儲桶內(nèi)對象的鍵。例如,客戶可指定使用鍵"My Document/Email/message.txt"在此特定的存儲桶內(nèi)創(chuàng)建對象30 ,以便可使用 對 地 址 http:〃storageservice.domain.com/050739717/My
Document/Email/message.txt的網(wǎng)絡(luò)服務(wù)請求來訪問對象30。
注意,在一些實施方式中,鍵所隱含的分層結(jié)構(gòu)可不必在對象存儲的 下面的等級中反映。例如,在一個實施方式中,與給定存儲桶20關(guān)聯(lián)的 對象30可以展開的、非分等級的方式存儲在存儲服務(wù)系統(tǒng)中,即使與對 象30關(guān)聯(lián)的鍵可隱含等級也是如此。也就是說,在這樣的實施方式中, 存儲桶20可不分等級地包括其它存儲桶20。然而,在其它實施方式中, 可支持存儲桶20在其它存儲桶20內(nèi)的分等級包含,雖然存儲桶的任何這 樣的層次不需要直接映射到被對象鍵隱含的層次上。
在一個實施方式中,在取回或修改被請求的對象30的基本數(shù)據(jù)33之 前,被鍵識別的、客戶訪問對象30的請求可經(jīng)歷客戶身份驗證程序、訪 問控制檢查,和/或映射過程(例如下面更詳細描述的)b例如,可請求客 戶提供口令或其它證書以證明客戶的身份,且一旦被識別,就可評估與被 請求的存儲桶20相關(guān)的訪問控制參數(shù)以確定識別的客戶是否被充分給予 特權(quán)來保證對被請求的鍵的訪問。相反,存儲服務(wù)系統(tǒng)可支持通過定位器 而不是鍵來訪問對象30的可選方法。 一般而言,定位器可表示在存儲服 務(wù)系統(tǒng)已知的所有對象30中間對象30的全局唯一的標識符。也就是說, 當(dāng)鍵對與特定存儲桶20關(guān)聯(lián)的命名空間可能是唯一的時,定位器在所有 存儲桶20中的所有對象30的全局命名空間內(nèi)可能是唯一的。例如,定位 器可包括由存儲服務(wù)系統(tǒng)產(chǎn)生的在其它定位器中唯一的字母數(shù)字字符串。 如下面更詳細描述的,在一些實施方式中,對象30的多個實例可在用于實現(xiàn)存儲服務(wù)系統(tǒng)的整個物理存儲設(shè)備中被復(fù)制,例如以增加數(shù)據(jù)冗余和
容錯能力。在這樣的實施方式中,對給定的對象30的每個復(fù)制的實例可 存在唯一的定位器。
注意,雖然在一些實施方式中,只要對象30存在于存儲服務(wù)系統(tǒng)中, 就可保證鍵保持有效以訪問該對象30 ,但是這樣的保證可能適用或可能不 適用于該對象30的任何給定的定位器。例如,如果對象30的復(fù)制的實例 (或復(fù)本)移到不同的物理存儲位置(例如,由于其基本存儲介質(zhì)的故障 或更換),則涉及該特定實例的定位器可能不再是有效的,雖然在其新位 置可產(chǎn)生并使用相應(yīng)于對象30的移動的實例的另一定位器。在下面關(guān)于 鍵映射系統(tǒng)組件的操作的討論中給出了對鍵和定位器之間關(guān)系的更多細 節(jié)。
作為基于鍵的對象訪問與基于定位器的對象訪問相比的例子,被上面 給 定 的 鍵 http:〃storageservice.domain.com/050739717/My Document/Email/message.txt定位的對象30可具有存儲在存儲服務(wù)系統(tǒng)內(nèi) 的一個或更多實例,其中之一可由格式
http:〃storageservice.domain.com/3859C89A208FDB5A
的定位器識別。在此特定的實施方式中,注意,相對于特定的存儲桶20 來表示對象30的鍵參考,而定位器參考被表示為全局定位器空間內(nèi)的絕 對128位的十六進制數(shù)字(雖然可使用其它類型的定位器編碼或格式)b 在一個實施方式中,客戶發(fā)出的指向定位器的網(wǎng)絡(luò)服務(wù)請求可繞過身份驗 證、訪問權(quán)限、翻譯或可適用于基于鍵的網(wǎng)絡(luò)服務(wù)請求的其它步驟中的一 些或全部。由于較少層的處理,在一些這樣的實施方式中,基于定位器的 請求可比基于鍵的請求被更快得處理。然而,因為對基于定位器的請求可 繞過安全措施,因此客戶可能需要提供敏感對象30的定位器不受到危害 的其自己的保證(例如,使用傳送和接收定位器所采用的加密或其它安全 方法)b進一步地,因為可能不能保證定位器的持久性(例如,在上面討 論的對象實例移動的情況下),選擇執(zhí)行基于定位器的對象訪問的客戶可 能需要容許定位器在使用期間變得無效的可能性,例如,通過在優(yōu)先的基 礎(chǔ)上獲得新定位器或相應(yīng)于發(fā)現(xiàn)現(xiàn)有的定位器不再有效。
23根據(jù)客戶的存儲需要和上面提到的資格證明(caveat ),基于定位器的 訪問相對于基于鍵的訪問可提供改進的處理性能(例如,網(wǎng)絡(luò)服務(wù)請求處 理的等待時間和總處理能力中的處理性能)b例如,客戶可選擇使用基于 定位器的訪問來參考不是特別敏感的頻繁訪問的對象30(例如,參考材料、 圖像或其它適當(dāng)類型的數(shù)據(jù))b注意,在一些實施方式中,基于定位器的 訪問可在各個對象30的基礎(chǔ)上被禁止,因而迫使希望訪問這樣的對象的 客戶使用基于鍵的請求并相應(yīng)地提交到與這樣的請求關(guān)聯(lián)的任何驗證和 訪問權(quán)限控制。然而,即使對于基于定位器的訪問被啟用的對象30來說, 不擁有有效定位器的惡意或誤操作的客戶可能只有成功訪問任何給定對 象30的隨機的機會。通過使用較大的定位器命名空間、用于產(chǎn)生定位器 的安全技術(shù)(例如,對象數(shù)據(jù)的安全散列的使用)或其它適當(dāng)?shù)募夹g(shù),就 可能使得這樣的機會在任意情況下都不可能。
存儲系統(tǒng)體系結(jié)構(gòu)和實現(xiàn)
在圖2中示出了可配置成實現(xiàn)如圖1所示的基于網(wǎng)絡(luò)服務(wù)的存儲服務(wù) 的存儲服務(wù)系統(tǒng)體系結(jié)構(gòu)的一個實施方式。在所示實施方式中,很多存儲 客戶50a-n可配置成通過網(wǎng)絡(luò)60與網(wǎng)絡(luò)服務(wù)平臺IOO進行交互作用。網(wǎng)絡(luò) 服務(wù)平臺100可配置成與存儲服務(wù)協(xié)調(diào)器120 (或簡單地,協(xié)調(diào)器120 ) 的一個或更多實例通過接口連接,協(xié)調(diào)器120又可與一個或更多鍵映射實 例140和位存儲(bitstore )節(jié)點160通過接口連接。此外,復(fù)制器180還 可配置成與位存儲節(jié)點160以及復(fù)制器鍵映射實例190通過接口連接。協(xié) 調(diào)器120和復(fù)制器180都可與節(jié)點揀取器(nodepicker )服務(wù)130通過接口 連接。在所示實施方式中,節(jié)點揀取器130、鍵映射140、位存儲節(jié)點160 和復(fù)制器鍵映射190的每個實例都可與發(fā)現(xiàn)和故障檢測監(jiān)控進程(DFDD ) 110的相應(yīng)實例關(guān)聯(lián)。注意,在給定組件的一個或更多實例可能存在的場 合,在下文中可以單數(shù)或復(fù)數(shù)形式對該組件進行引用。然而,任一種形式 的使用不是用來排除另一種。
在不同實施方式中,圖2中示出的組件可直接在計算機硬件中實現(xiàn)為 可直接或間接地被計算機硬件(例如,微處理器或計算機系統(tǒng))執(zhí)行的指 令或這些技術(shù)的組合。例如,圖2的組件可通過包括很多計算節(jié)點(或簡單地,節(jié)點)的分布式系統(tǒng)實現(xiàn),例如在圖29中示出和下面描述的計算 機系統(tǒng)實施方式。在不同實施方式中,給定存儲服務(wù)系統(tǒng)組件的功能可通 過特定的節(jié)點或分布式跨越的一些節(jié)點實現(xiàn)。在一些實施方式中,給定節(jié) 點可實現(xiàn)多于一個的存儲服務(wù)系統(tǒng)組件的功能。在圖2的組件的一般功能 和如圖3所示的存儲服務(wù)系統(tǒng)的示例性物理配置的概述之后,下面結(jié)合圖 4-28的描述提供了特定存儲系統(tǒng)組件的某些實施方式的細節(jié)。
一般而言,存儲客戶50可包括可配置成通過網(wǎng)絡(luò)60向網(wǎng)絡(luò)服務(wù)平臺 100提交網(wǎng)絡(luò)服務(wù)請求的任何類型的客戶。例如,給定存儲客戶50可包括 網(wǎng)絡(luò)瀏覽器的適當(dāng)版本,或配置成作為對網(wǎng)絡(luò)瀏覽器提供的執(zhí)行環(huán)境的擴 展來執(zhí)行或在網(wǎng)絡(luò)瀏覽器提供的執(zhí)行環(huán)境內(nèi)執(zhí)行的插入模塊或其它類型 的代碼模塊??蛇x地,存儲客戶50可包括應(yīng)用程序,例如數(shù)據(jù)庫應(yīng)用程 序、媒體應(yīng)用程序、辦公應(yīng)用程序或可利用持久的存儲資源的任何其它應(yīng) 用程序。在一些實施方式中,這樣的應(yīng)用程序可包括用于產(chǎn)生和處理網(wǎng)絡(luò) 服務(wù)請求的足夠的協(xié)議支持(例如,對于超文本傳輸協(xié)議(HTTP )的適 當(dāng)版本),而不必實現(xiàn)對所有類型的基于網(wǎng)絡(luò)的數(shù)據(jù)的完全的瀏覽器支持。 也就是說,存儲客戶50可用是配置成直接與網(wǎng)絡(luò)服務(wù)平臺交互的應(yīng)用程 序。如下所述,存儲客戶50可配置成根據(jù)具象狀態(tài)傳輸(REST 〉形式的 網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)、基于文檔或消息的網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)或另一種適當(dāng)?shù)?網(wǎng)絡(luò)服務(wù)體系結(jié)構(gòu)來產(chǎn)生網(wǎng)絡(luò)服務(wù)請求。
在其它實施方式中,存儲客戶50可配置成以對其它應(yīng)用程序透明的
方式來向那些應(yīng)用程序提供對基于網(wǎng)絡(luò)服務(wù)的存儲的訪問。例如,存儲客
戶50可配置成根據(jù)上面描述的存儲模型的適當(dāng)變形來與操作系統(tǒng)或文件 系統(tǒng)結(jié)合以提供存儲。然而,操作系統(tǒng)或文件系統(tǒng)可向應(yīng)用程序提供不同
的存儲接口 ,例如文件、目錄和/或文件夾的傳統(tǒng)文件系統(tǒng)層次。在這樣的 實施方式中,應(yīng)用程序可能不需要修改成利用圖1的存儲系統(tǒng)服務(wù)模型。 替代地,網(wǎng)絡(luò)服務(wù)平臺100的接口連接的細節(jié)可通過存儲客戶50和代表 在操作系統(tǒng)環(huán)境內(nèi)執(zhí)行的應(yīng)用程序的操作系統(tǒng)或文件系統(tǒng)來協(xié)調(diào)。
存儲客戶50可通過網(wǎng)絡(luò)60將網(wǎng)絡(luò)服務(wù)請求傳送到網(wǎng)絡(luò)服務(wù)平臺100 并從網(wǎng)絡(luò)服務(wù)平臺100接收應(yīng)答。在不同實施方式中,網(wǎng)絡(luò)60可包含建立客戶50和平臺100之間的基于網(wǎng)絡(luò)的通信所必需的聯(lián)網(wǎng)硬件和協(xié)議的 任何適當(dāng)組合。例如,網(wǎng)絡(luò)60可通常包含共同實現(xiàn)互聯(lián)網(wǎng)的各種電信網(wǎng) 絡(luò)和服務(wù)供應(yīng)商。網(wǎng)絡(luò)60還可包括專用網(wǎng)絡(luò),例如局域網(wǎng)(LAN )或廣 域網(wǎng)(WAN )以及公共或?qū)S脽o線網(wǎng)絡(luò)。例如,給定客戶50和網(wǎng)絡(luò)服務(wù) 平臺100可分別在具有其自己的內(nèi)部網(wǎng)絡(luò)的企業(yè)內(nèi)被提供。在這樣的實施 方式中,網(wǎng)絡(luò)60可包括建立給定客戶50和互聯(lián)網(wǎng)之間以及互聯(lián)網(wǎng)和網(wǎng)絡(luò) 服務(wù)平臺IOO之間的網(wǎng)絡(luò)鏈接所必需的硬件(例如,調(diào)制解調(diào)器、路由器、 交換機、負載平衡器、代理服務(wù)器等)和軟件(例如,協(xié)議堆棧、賬目管 理軟件、防火墻/安全軟件等注意,在一些實施方式中,存儲客戶50可 使用專用網(wǎng)絡(luò)而不是公共互聯(lián)網(wǎng)來與網(wǎng)絡(luò)服務(wù)平臺100通信。例如,客戶 50可在作為存儲服務(wù)系統(tǒng)的同一企業(yè)內(nèi)被提供服務(wù)。在這樣的情況下,客 戶50可完全通過專用網(wǎng)絡(luò)60 (例如,可使用基于互聯(lián)網(wǎng)的通信協(xié)議但不 可公開訪問的LAN或WAN )來與平臺100通信。
一般而言,網(wǎng)絡(luò)服務(wù)平臺IOO可配置成實現(xiàn)一個或更多服務(wù)端點,這 些服務(wù)端點配置成接收并處理網(wǎng)絡(luò)服務(wù)請求,例如訪問由存儲服務(wù)系統(tǒng)存 儲的對象30的請求。例如,網(wǎng)絡(luò)服務(wù)平臺100可包括配置成實現(xiàn)在前面 例子中使用的端點http:〃storageservice.domain.com的硬件和/或軟件,以便 指向該端點的基于HTTP的網(wǎng)絡(luò)服務(wù)請求被正確接收和處理。在一個實施 方式中,網(wǎng)絡(luò)服務(wù)平臺100可實現(xiàn)為服務(wù)器系統(tǒng),該服務(wù)器系統(tǒng)配置成從 客戶50接收網(wǎng)絡(luò)服務(wù)請求并將它們轉(zhuǎn)發(fā)到協(xié)調(diào)器120或存儲服務(wù)系統(tǒng)的 其它組件用于進行處理。在其它實施方式中,網(wǎng)絡(luò)服務(wù)平臺100可配置為 實現(xiàn)負載平衡和其它請求管理功能部件的很多不同的系統(tǒng)(例如,在群集 拓撲中),這些請求管理功能部件配置成動態(tài)地管理處理負載的大規(guī)模網(wǎng) 絡(luò)服務(wù)請求。
在不同實施方式中,網(wǎng)絡(luò)服務(wù)平臺100可配置成支持REST形式或基 于文檔(例如,基于SOAP )類型的網(wǎng)絡(luò)服務(wù)請求,如上面詳細描述的。 在一個特定的實施方式中,平臺100可配置成實現(xiàn)特定的網(wǎng)絡(luò)服務(wù)應(yīng)用程 序編程接口 ( API ),其支持對由存儲服務(wù)系統(tǒng)管理的實體的各種操作。例 如,由平臺100實現(xiàn)的API可支持對存儲桶或?qū)ο蟮幕究蛻舨僮?,包?br> 26列表(可選地根據(jù)過濾模式或標準過濾的)存儲桶20或?qū)ο?0、取回存 儲桶20或?qū)ο?0的數(shù)據(jù)或元數(shù)據(jù)、以及創(chuàng)建或刪除存儲桶20或?qū)ο?0。 在一些實施方式中,API可支持更復(fù)雜的客戶操作,例如對多個存儲桶20 或?qū)ο?0的操作的批應(yīng)用。
除了用作客戶網(wǎng)絡(luò)服務(wù)請求的可尋址的端點以外,在一些實施方式 中,網(wǎng)絡(luò)服務(wù)平臺100可實現(xiàn)各種客戶管理功能部件。例如,平臺100可 例如通過跟蹤請求的客戶50的身份、客戶請求的數(shù)量和/或頻率、代表客 戶50存儲或取回的對象30的大小、被客戶50使用的總存儲帶寬、被客 戶50請求的存儲類,或任何其它可測量的客戶使用參數(shù),來協(xié)調(diào)網(wǎng)絡(luò)服 務(wù)包括存儲資源的客戶使用的記錄和賬目管理。平臺IOO還可實現(xiàn)財務(wù)賬 目管理和記賬系統(tǒng),或可維護可被用于客戶使用行為的報告和記賬的外部 系統(tǒng)詢問和處理的使用數(shù)據(jù)的數(shù)據(jù)庫。
在某些實施方式中,平臺100可配置成收集和/或監(jiān)控各種存儲服務(wù)系 統(tǒng)操作度量,例如反映從客戶50接收的請求的速率和類型的度量、這樣 的請求所利用的帶寬、對這樣的請求的系統(tǒng)處理等待時間、系統(tǒng)組件利用 (例如,在存儲服務(wù)系統(tǒng)內(nèi)的網(wǎng)絡(luò)帶寬和/或存儲利用X由請求產(chǎn)生的錯 誤率和錯誤類型、被請求的對象30的特點(例如,大小、數(shù)據(jù)類型等) 或任何其它適當(dāng)?shù)亩攘?。在這樣的實施方式中,平臺IOO可配置成集合地 收集這樣的度量,例如作為隨著時間的平均值,或作為可進行各種分析的 特定數(shù)據(jù)點。在不同實施方式中,這樣的度量可用來以對客戶50可見或 不可見的方式檢驗或監(jiān)控系統(tǒng)性能。例如,在一個實施方式中,這樣的度 量可被系統(tǒng)管理員用于調(diào)整和維護系統(tǒng)組件,而在其它實施方式中,這樣 的度量(或這樣的度量的相關(guān)部分)可暴露給客戶50 ,以使這樣的客戶能 夠監(jiān)控其對存儲服務(wù)系統(tǒng)的使用。
在一些實施方式中,平臺IOO還可實現(xiàn)用戶身份驗證和訪問控制程序。 例如,對于對訪問與給定存儲桶20關(guān)聯(lián)的特定對象30的給定網(wǎng)絡(luò)服務(wù)請 求,平臺100可配置成確定與該請求關(guān)聯(lián)的客戶50是否被授權(quán)訪問給定 存儲桶20和特定的對象30。平臺100可通過例如對照與給定存儲桶20關(guān) 聯(lián)的證書評估身份、口令或其它證書,并對照指定對特定對象30的可允許操作的訪問控制列表評估對特定對象30的請求的訪問,來確定這樣的 授權(quán)。如果客戶50沒有足夠的證書來訪問存儲桶50或?qū)ο?0執(zhí)行請 求操作(例如,客戶50試圖寫入對象30 ,而只具有讀取訪問特權(quán)),則平 臺100可例如通過向請求的客戶50返回指示錯誤情況的應(yīng)答來拒絕相應(yīng) 的網(wǎng)絡(luò)服務(wù)請求??梢栽O(shè)想,在一些實施方式中,每個存儲桶20和對象 30可具有管理對該存儲桶或?qū)ο蟮脑L問的相關(guān)聯(lián)的訪問控制策略。這樣的 訪問控制策略可作為元數(shù)據(jù)21或31內(nèi)的訪問控制信息的記錄或列表被存 儲,或作為與元數(shù)據(jù)21和31不同的數(shù)據(jù)結(jié)構(gòu)被存儲。
然而在一些實施方式中,存儲服務(wù)系統(tǒng)例如圖2的系統(tǒng)可支持任意大 小的對象30 ,在其它實施方式中,對象30可限制到某種最大大小,該最 大大小也稱為塊大小(chunk size )的確定的最大大小。在一些這樣的實施 方式中,當(dāng)客戶提供將與鍵關(guān)聯(lián)存儲的數(shù)據(jù)且該數(shù)據(jù)超過塊大小時,平臺 100可配置成根據(jù)塊大小將數(shù)據(jù)分成兩個或更多塊。在一個實施方式中, 平臺100可配置成將每個塊生成為具有相關(guān)聯(lián)的鍵值的相應(yīng)的對象30。平 臺IOO可為每個塊生成鍵值作為客戶提供的鍵的函數(shù),這樣當(dāng)執(zhí)行涉及客 戶提供的鍵的訪問請求時,原始的客戶數(shù)據(jù)可由塊重建。例如,平臺100 可配置成由客戶數(shù)據(jù)產(chǎn)生N個塊,并可通過將N個不同的模式(pattern) 附加到客戶提供的鍵來為這些塊產(chǎn)生N個相應(yīng)的鍵,其中N個不同的模式 以N個塊被產(chǎn)生的相同順序被按字母順序式地排序。接著N個塊中的每個 都可使用下面描述的技術(shù)作為不同的對象30來管理,且原始數(shù)據(jù)可通過 列出具有鍵值的所有對象30并以列出的順序取回那些對象來重新產(chǎn)生,
其中對于該鍵值客戶提供的鍵是前綴。在一些實施方式中,可訪問、修改 或移除單獨的塊而不干擾其它塊,相對于將數(shù)據(jù)管理為單個大的對象30
來說這可提高系統(tǒng)性能??梢栽O(shè)想,在一些實施方式中,可允許客戶50 指定器所提供的數(shù)據(jù)對象是否應(yīng)被分割成塊。
如同在圖2中示出的很多存儲服務(wù)系統(tǒng)組件的情況一樣,將網(wǎng)絡(luò)服務(wù) 平臺100的功能從其它組件分離可改善存儲服務(wù)系統(tǒng)的維護和總的可縮放 性。例如,可特別提供附加的硬件和軟件資源來用于管理獨立于分配給其 它任務(wù)的資源的附加的網(wǎng)絡(luò)服務(wù)處理負載。進一步地,與平臺100關(guān)聯(lián)的任何資源故障的影響可被限制到該特定的功能區(qū)域,因而便于故障的隔離
和解決。然而,在一些實施方式中,可以設(shè)想,平臺IOO的功能可合并到 其它組件中。例如,協(xié)調(diào)器120可配置成包括與平臺100關(guān)聯(lián)的任務(wù)。
還注意到,雖然網(wǎng)絡(luò)服務(wù)平臺100可表示主要接口 ,客戶50可通過 該接口訪問存儲服務(wù)系統(tǒng)的功能部件,它不需要表示到這樣的功能部件的 唯一接口。例如,在一些實施方式中,協(xié)調(diào)器120可配置成支持與網(wǎng)絡(luò)服 務(wù)接口不同的供替換的API。這樣的供替換的API可例如用于允許提供存 儲服務(wù)系統(tǒng)的企業(yè)內(nèi)部的客戶繞過網(wǎng)絡(luò)服務(wù)平臺100。在一些情況下,平 臺100的賬目管理和/或證書管理服務(wù)對內(nèi)部客戶例如管理客戶可能是不 必要的。
協(xié)調(diào)器120可配置成協(xié)調(diào)網(wǎng)絡(luò)服務(wù)平臺100和存儲服務(wù)系統(tǒng)的其它組 件之間的行為。在一些實施方式中,協(xié)調(diào)器120的主要職責(zé)可包括響應(yīng)于 指向?qū)ο?0的網(wǎng)絡(luò)服務(wù)請求,來指導(dǎo)對那些對象30的對象數(shù)據(jù)33和元 數(shù)據(jù)31的讀取和寫入行為。例如,如下面更詳細描述的,對象讀取訪問 可包括執(zhí)行對鍵映射實例140的訪問,以取回指示存儲有給定對象30的 復(fù)本的位存儲節(jié)點160的定位器,后面是執(zhí)行對特定位存儲節(jié)點160的訪 問以便讀取被請求的數(shù)據(jù)。類似地,對象創(chuàng)建或修改可包括將對象30的 多個復(fù)本存儲到不同的位存儲節(jié)點160 ,且如果必要則更新鍵映射實例 140 ,以反映所創(chuàng)建或修改的復(fù)本的定位器。在一些實施方式中,協(xié)調(diào)器 120可配置成對鍵實例140和位存儲節(jié)點160執(zhí)行這些讀取和寫入操作。 然而,注意,在某些實施方式中,協(xié)調(diào)器120可不操作來在對象30創(chuàng)建 和修改時創(chuàng)建對象30的全部數(shù)量的期望復(fù)本。如下面更詳細描述的,在 一些實施方式中,當(dāng)協(xié)調(diào)器120完成了寫入對象30的確定數(shù)量的復(fù)本(例 如,兩個復(fù)本)時,該對象30的寫入操作可被考慮為結(jié)束。該對象30的 另外的復(fù)制物可作為通過復(fù)制器180的帶外或異步操作來完成。也就是說, 在這樣的實施方式中,對象創(chuàng)建或修改操作的帶內(nèi)或同步部分可包括產(chǎn)生 少于總期望數(shù)量的被影響的對象30的復(fù)本。注意,雖然協(xié)調(diào)器120被示 為與鍵映射實例140、位存儲節(jié)點160和其它系統(tǒng)組件不同的組件,但是 在一些實施方式中有可能協(xié)調(diào)器120的實例與另一系統(tǒng)組件(例如,作為由單個計算機系統(tǒng)執(zhí)行的軟件組件) 一起實現(xiàn)。因此,雖然這里的描述可
指將數(shù)據(jù)存儲到或取自于位存儲節(jié)點160、鍵映射實例140或另外的組件 的協(xié)調(diào)器120 ,但是應(yīng)理解在一些實施方式中,這樣的處理可出現(xiàn)在共享 的計算系統(tǒng)資源中。
如上面關(guān)于圖1描述的,在一些實施方式中,存儲服務(wù)系統(tǒng)可包括基 于存儲桶的存儲模型,其中不同對象30的鍵可為了管理(例如,賬目管 理、記賬)> 安全或其它目的而被分組到存儲桶20中。在一個實施方式中, 協(xié)調(diào)器120可配置成響應(yīng)于來自客戶50的相應(yīng)的網(wǎng)絡(luò)服務(wù)請求而處理各 種與存儲桶相關(guān)的操作。例如,協(xié)調(diào)器120可配置成執(zhí)行下列存儲桶操作 中的一些或全部
-創(chuàng)建存儲桶為存儲桶20產(chǎn)生并儲存新的存儲桶名稱。
-刪除非空存儲桶刪除包括相關(guān)的元數(shù)據(jù)21和與給定存儲桶20內(nèi) 對象30關(guān)聯(lián)的所有鍵的給定存儲桶20。
-刪除空的存儲桶只有當(dāng)沒有對象30的鍵與給定存儲桶20關(guān)聯(lián)時 才刪除給定存儲桶20和相關(guān)的元數(shù)據(jù)21 ,否則返回錯誤情況。
-寫入存儲桶數(shù)據(jù)將數(shù)據(jù)(例如,元數(shù)據(jù)21 )寫到現(xiàn)有的存儲桶 20中。
-列出存儲桶鍵列出與給定存儲桶20關(guān)聯(lián)的對象30的鍵(可選地 根據(jù)模式、規(guī)則表達式、通配符等存儲或過濾的)b
-列出存儲桶列出與給定簽約者(例如,用戶或客戶50 )關(guān)聯(lián)的 存儲桶20。
在一些實施方式中,協(xié)調(diào)器120可配置成使用適當(dāng)?shù)碾S機數(shù)算法以及 低概率的沖突產(chǎn)生來為新近創(chuàng)建的存儲桶20生成標識符。在其它實施方 式中,協(xié)調(diào)器120可配置成例如通過在客戶請求存儲桶創(chuàng)建時檢驗被請求 的標識符相對于現(xiàn)有的存儲桶標識符的唯一性,來支持客戶專用的存儲桶 標識符。
如上所述,對象30的實例可跨越不同的位存儲節(jié)點160而被復(fù)制, 例如以增加對象數(shù)據(jù)經(jīng)得住任何給定節(jié)點160或其相關(guān)的基礎(chǔ)結(jié)構(gòu)的故障的可能性。存儲服務(wù)系統(tǒng)內(nèi)的對象復(fù)制為在所示實施方式中可被節(jié)點揀取
器130和復(fù)制器180處理的管理和最佳化呈現(xiàn)一些機會,如下。
當(dāng)協(xié)調(diào)器120接收寫入對象30的請求時,它可在聲明寫入將要結(jié)束 之前相應(yīng)地將對象30寫到給定數(shù)量的節(jié)點160。然而,對象30應(yīng)被寫入 的節(jié)點160的數(shù)量和特定選擇可能根據(jù)很多不同存儲策略考慮因素而變 化。例如,在寫入操作被認為將要結(jié)束之前,要求對象30的確定的最小 數(shù)量的復(fù)本(例如,兩個或三個)被成功地寫入可能是謹慎的,以便考慮 到可能的故障寫入的數(shù)據(jù)是持久存在的。然而,確保選擇成儲存最小數(shù)量 的復(fù)本的節(jié)點60分布在故障的不同可能的位置或區(qū)域中也可能是期望有 的。例如,位于相同的數(shù)據(jù)中心的節(jié)點160比在地理上分離的節(jié)點160可 能更有可能同時失效(例如,由于災(zāi)難性故障如自然災(zāi)害、電源故障等>
可一般稱為存儲節(jié)點選擇邏輯的節(jié)點揀取器130可配置為協(xié)調(diào)器120 和復(fù)制器180可訪問的服務(wù),在一個實施方式中,協(xié)調(diào)器120和復(fù)制器180 可實現(xiàn)用于為對象讀取和寫入操作選擇節(jié)點160的算法,以便滿足不同的 存儲策略。例如,在如上概述的寫入對象30的情況下,節(jié)點揀取器130 可操作來開發(fā)寫入計劃,或?qū)ο?0應(yīng)被寫入的特定序列的節(jié)點160。在開 發(fā)特定的寫入計劃中,節(jié)點揀取器130可配置成確保寫入計劃有成功的合 理機會一例如,在寫入計劃中指定的節(jié)點160實際上是可操作的并預(yù)期具 有可用來接受對象30的足夠的存儲資源一并且寫入計劃如果被完成將滿 足與寫入操作有關(guān)的所有存儲策略。示例性寫入存儲策略可包括下列
-持久性策略如果寫入計劃成功地完成,則對象30的實例將存儲 在至少N個不同的節(jié)點160上。
-區(qū)域多樣性策略如果可能,寫入計劃將包括分布在至少M個不 同區(qū)域中的節(jié)點160。
-本地性策略如果可能,寫入計劃將優(yōu)先選擇(例如,在數(shù)量上) 在被請求的協(xié)調(diào)器120本地的區(qū)域內(nèi)的節(jié)點160。
-負載平衡策略努力使寫入請求業(yè)務(wù)量在節(jié)點160中間均衡(例如, 以避免"熱節(jié)點")b-空間平衡策略努力使存儲資源容量利用在節(jié)點160中間均衡。
-最低成本鏈策略努力最小化在寫入計劃中節(jié)點序列寫入操作的總 成本(例如,網(wǎng)絡(luò)等待時間)b
注意,在不同實施方式中,節(jié)點揀取器130可配置成當(dāng)制定給定的寫 入計劃時考慮這些策略或沒有列出的其它策略中的一些或全部。進一步 地,不同的策略可能被加有不同的優(yōu)先級。例如,在一個實施方式中,持 久性策略可以是所有寫入計劃必須滿足的強制性策略,而剩余的策略可以 在盡力服務(wù)(best-effort)的基礎(chǔ)上得到滿足。在一些情況下, 一些存儲策 略可能與另一些存儲策略沖突。例如,支持對象實例在不同區(qū)域中間的廣 泛分布的區(qū)域多樣性特點通常與支持在特定的區(qū)域內(nèi)局部化對象實例的 本地性策略相反。如果對象實例的數(shù)量不夠大,則滿足兩個策略是可能的。 例如,如果要創(chuàng)建對象30的五個實例,則可能將兩個實例存儲在兩個不 同的區(qū)域且三個實例在被請求的協(xié)調(diào)器120本地的第三個不同的區(qū)域內(nèi), 因而滿足本地性和區(qū)域相異性策略。如果不可能滿足寫入計劃所指定的所 有策略,則節(jié)點揀取器130可試圖以優(yōu)先考慮滿足并產(chǎn)生盡力服務(wù)寫入計 劃的那些策略,或可將指示對象寫入不能被良好地執(zhí)行的錯誤指示返回到 發(fā)出請求的協(xié)調(diào)器120。
在一些實施方式中,節(jié)點揀取器還可幫助協(xié)調(diào)器120讀取對象30。例 如,對象讀取操作可被不同于最初或最近寫入請求的對象30的協(xié)調(diào)器的 協(xié)調(diào)器120請求。因此,相對于寫入?yún)f(xié)調(diào)器120可被存儲在本地的對象30 的實例可能相對于讀取協(xié)調(diào)器120來說不是本地的。節(jié)點揀取器130可配 置成識別提供讀取協(xié)調(diào)器120可利用的最佳讀取性能的節(jié)點160。例如, 節(jié)點揀取器130可識別最接近于讀取協(xié)調(diào)器120的節(jié)點160 (例如,根據(jù) 地理距離或網(wǎng)絡(luò)拓撲)或提供最大讀取帶寬的節(jié)點160 (例如,最少負載 的節(jié)點160或具有較高性能的存儲硬件類的節(jié)點160 ),或節(jié)點揀取器130 可使用用于選擇節(jié)點160的其它性能標準,其中從節(jié)點160讀取對象30。 在其它實施方式中,不是相對于讀取協(xié)調(diào)器120最佳化讀取操作的性能, 節(jié)點揀取器可全局地計劃并行的讀取操作,以便在總體上最佳化系統(tǒng)的性 能(例如,以最大化全局讀取總處理能力)b為了開發(fā)寫入計劃并關(guān)于對象讀取操作向協(xié)調(diào)器120提出建議,節(jié)點 揀取器130可配置成例如相對于其操作狀態(tài)和有效資源來監(jiān)控節(jié)點160的 狀態(tài)。在一個實施方式中,節(jié)點揀取器130可配置成與DFDD 100的實例 進行交互作用(下面描述的),以便識別存儲服務(wù)系統(tǒng)內(nèi)并行操作的節(jié)點 160。 一旦節(jié)點揀取器130意識到操作的節(jié)點160 ,它就可詢問那些節(jié)點來 確定在每個節(jié)點處可利用的資源(例如,存儲容量)b因為節(jié)點160的操 作和資源狀態(tài)可隨著時間而變化,所以在一些實施方式中,節(jié)點揀取器130 有時可通過DFDD 110更新操作狀態(tài)信息并輪詢最終的節(jié)點160 ,以更新 其資源狀態(tài)信息。注意,在一些實例中,節(jié)點揀取器130可能沒有節(jié)點160 的狀態(tài)的完全同步的觀察。例如,被認為節(jié)點揀取器130可用的特定節(jié)點 160可實際上自從狀態(tài)信息的最后更新以后失效。在這樣的實例中,節(jié)點 揀取器130可能不能保證其讀取或?qū)懭胗媱澞軌蛴蓞f(xié)調(diào)器120完成。如果 協(xié)調(diào)器120不能訪問由節(jié)點揀取器130指定的節(jié)點160 ,則相關(guān)的操作可 能失敗且被協(xié)調(diào)器120全部重新嘗試,或協(xié)調(diào)器120可與節(jié)點揀取器130 協(xié)商以修改請求的計劃。在一些情況下,如果在寫入計劃中指定的節(jié)點160 的故障只影響可選的或盡力服務(wù)的存儲策略,同時仍然允許滿足強制性的
存儲策略,則可允許寫入計劃結(jié)束。在一些這樣的實施方式中,復(fù)制器180 可配置成在以后的時間努力滿足未滿足的存儲策略,如下所述。
在一些實施方式中,節(jié)點揀取器130的多個實例可在整個存儲服務(wù)系 統(tǒng)中部署。例如,節(jié)點揀取器130的相應(yīng)實例可為協(xié)調(diào)器120的每個實例 部署。雖然節(jié)點揀取器130可部署為可從協(xié)調(diào)器120通過API (和復(fù)制器 180 )訪問的服務(wù),這種結(jié)構(gòu)不是必要的。在其它實施方式中,節(jié)點揀取 器130的功能可直接合并在協(xié)調(diào)器120和/或復(fù)制器180的實例中。
如上所述,對象數(shù)據(jù)的可靠性和有效性可通過在整個存儲服務(wù)系統(tǒng)中 復(fù)制對象30來增加。例如,在地理上分散的系統(tǒng)內(nèi)分布對象30的實例或 復(fù)本可提高類似地分散的客戶50的性能,這些客戶50試圖通過可能定位 較接近于這樣的客戶的一些對象實例來訪問這樣的對象30。(注意,在對 象復(fù)制的情景下,術(shù)語"實例"和"復(fù)本"可在這里互換地使用)進一步地,對 象復(fù)制可通常降低由特定對象實例的破環(huán)而產(chǎn)生的數(shù)據(jù)損失的可能性。然
33而,在一些實施方式中,情況可能是,在給定的時間點,對象30的有效 復(fù)本的數(shù)量可能小于復(fù)本的期望或目標數(shù)量。例如,在存儲服務(wù)系統(tǒng)中實 施的復(fù)制存儲策略可指定每個對象30的特定目標數(shù)量的復(fù)本(例如,3或 任何其它適當(dāng)?shù)臄?shù)量)應(yīng)在任何給定的時間存在。然而,對于給定的對象 30 ,由于各種原因,有效復(fù)本的實際數(shù)量可能小于目標數(shù)量。例如,先前 有效的復(fù)本可能由于存儲其的設(shè)備的故障而變得不可訪問??蛇x地,在一 些實施方式中,被協(xié)調(diào)器120寫入的對象30的實例的數(shù)量可小于該對象 30的復(fù)本的目標數(shù)量。例如,如上所述,實例可根據(jù)由節(jié)點揀取器30指 定的寫入計劃而被寫入,該寫入計劃可考慮需要比目標數(shù)量少的實例的持 久性策略。
在一個實施方式中,復(fù)制器180可操作來檢查對象30以確定每個對 象30的有效復(fù)本的數(shù)量是否滿足目標數(shù)量(例如,復(fù)本的數(shù)量是否至少 是在做出確定時的目標數(shù)量)b特別地,在一個實施方式中,復(fù)制器180 可配置成對指定每個對象30的實例的數(shù)量和位置的記錄連續(xù)重復(fù)。例如, 復(fù)制器180可涉及復(fù)制器鍵映射190 ,復(fù)制器鍵映射190可與在下面更詳 細描述的鍵映射實例140 —樣可配置成存儲對象鍵和識別復(fù)制的對象實例 的相應(yīng)定位器之間的映射。(在其它實施方式中,復(fù)制器180可考慮一個 鍵映射實例140 ,而不是專用的鍵映射實例)b在一些實施方式中,可以設(shè) 想,復(fù)制器180的多個實例可配置成同時檢查鍵映射空間的不同部分,這 可減少檢查由存儲服務(wù)系統(tǒng)管理的所有對象30的狀態(tài)所需要的總時間量。
如果復(fù)制器180確定對于給定的對象30來說不滿足有效復(fù)本的目標 數(shù)量,則它可配置成以類似于協(xié)調(diào)器120執(zhí)行對給定對象30的寫入操作 的方式來寫入給定對象30的額外的復(fù)本。例如,復(fù)制器180可與節(jié)點揀 取器130進行交互作用以獲得用于產(chǎn)生額外的復(fù)本的寫入計劃,如上所述。 可選地,復(fù)制器180可實現(xiàn)其自己的用于產(chǎn)生對象復(fù)本的算法反映 (algorithms reflecting )策略。在一些實施方式中,復(fù)制器180可根據(jù)需要 額外的復(fù)本的條件來符合不同的優(yōu)先級以產(chǎn)生對象30的復(fù)本。例如,具 有少于目標數(shù)量的在復(fù)制器鍵映射190中列出的定位器的對象30可最近 由協(xié)調(diào)器120寫入。相反,具有目標數(shù)量的定位器的對象30可展示基本存儲的故障,其中一些定位器是無效的。作為策略的問題,復(fù)制器180可 試圖在后面的情況之前糾正前面的情況,反之亦然。可選地,每當(dāng)遇到這 種條件時,復(fù)制器180可試圖為具有少于目標數(shù)量的有效復(fù)本的任何對象 30產(chǎn)生額外的復(fù)本,而不管引起該條件的特定情況如何。
如上所述,對象30的存儲的總可靠性可通過將對象數(shù)據(jù)的復(fù)本存儲 在例如不同的區(qū)域或數(shù)據(jù)中心內(nèi)來增加。然而,注意,在一些實施方式中, 每個復(fù)本不需要相應(yīng)于對象數(shù)據(jù)的準確拷貝。在一個實施方式中,對象30 可根據(jù)冗余編碼方案(例如奇偶性、錯誤校正代碼或其它方案)分成很多 部分或"碎片",以便對象數(shù)據(jù)可從少于全部的生成的部分重建。例如,使用 從對象30產(chǎn)生N個部分的各種方案劉象數(shù)據(jù)可根據(jù)編碼方案從任何N-l 個部分、N個部分的任何簡單的多數(shù)或部分的其它組合來重建。在這樣的 實施方式中,對象30的復(fù)本可相應(yīng)于所生成的部分或這些部分的某些組 合。與存儲對象數(shù)據(jù)的多個完整備份比較,這樣的方法可提供有效的容錯 能力,同時減小數(shù)據(jù)存儲要求。然而,注意,在一些實施方式中,冗余編 碼技術(shù)還可結(jié)合對象數(shù)據(jù)的完整復(fù)制而被使用。例如,對象數(shù)據(jù)的多個單 獨的完整備份可存儲在節(jié)點160中,作為根據(jù)如上所述的適當(dāng)?shù)娜哂嗑幋a 技術(shù)確定的多個部分的相應(yīng)集合。最后,注意,在一些實施方式中,某些 對象30根本不需要以任何程度的復(fù)制或容錯能力存儲。例如,如下面結(jié) 合存儲類的描述所述的,客戶可要求對象30根據(jù)指定很少或根本沒有任 何程度的容錯能力的存儲類來存儲,可能具有比指定較高的容錯能力程度 的存儲類更低的成本。
一般而言,鍵映射實例40可提供對象30的鍵和對象30的特定實例 或復(fù)本的定位器之間關(guān)系的記錄。在存儲這樣的記錄中,鍵映射實例140 還反映對象30在存儲系統(tǒng)內(nèi)復(fù)制的程度(例如,存在多少對象30的實例, 以及可如何引用它們位存儲節(jié)點160通??蔀閷ο?0的各個實例提供 存儲,如由定位器識別的。然而,給定節(jié)點160可能意識到實例相對于任 何其它節(jié)點160的狀態(tài),或?qū)嵗亩ㄎ黄骱推湎鄳?yīng)對象30的鍵之間的關(guān) 系。也就是說, 一般而言,由鍵映射實例140維護的狀態(tài)信息對位存儲節(jié) 點160來說可以是透明的。DFDD 110可操作來檢測和傳送關(guān)于節(jié)點160的操作狀態(tài)和/或鍵映射實例140 (以及復(fù)制器鍵映射190 ,如果被實現(xiàn)) 的狀態(tài)信息,以便DFDD110的客戶例如協(xié)調(diào)器120和復(fù)制器180可獲得 所檢測的狀態(tài)的準確、雖然可能延遲的觀察。下面更詳細地專注于這些部 件。
在圖3中示出了說明圖2的存儲服務(wù)系統(tǒng)體系結(jié)構(gòu)的某些組件的物理 部署的一個實施方式。在所示實施方式中,數(shù)據(jù)中心300顯示為包括兩個 區(qū)域310a-b。此外,區(qū)域310c-d顯示在數(shù)據(jù)中心300的外部,且區(qū)域310a-d 通過網(wǎng)絡(luò)60相互連接。區(qū)域310c-d中的每個都包括各自的協(xié)調(diào)器實例 120a-d。區(qū)域310a-d還可包括位存儲節(jié)點160和鍵映射實例140的各種組 合,以及在圖3中沒有示出的圖2的其它組件。例如,區(qū)域30a包括四個 位存儲節(jié)點160 ,區(qū)域310b包括三個位存儲節(jié)點160和鍵映射實例140 , 區(qū)域310c包括兩個位存儲節(jié)點160 ,以及區(qū)域310d包括一個位存儲節(jié)點 160和一個鍵映射實例140。
如上所述,在一個實施方式中,每個區(qū)域310a-d可被考慮為獨立的或 弱相關(guān)故障的位置。也就是說,任何給定區(qū)域310經(jīng)歷故障的概率可能通 常與任何其它給定區(qū)域310的故障的概率無關(guān)或不相關(guān),或故障概率的相 關(guān)性可小于閾值量。例如,兩個區(qū)域310可表現(xiàn)出小于10%的同時故障的 可能性。故障相關(guān)性或無關(guān)性可使用任何適當(dāng)?shù)慕y(tǒng)計或概率技術(shù)測量并以 各種方法執(zhí)行。例如,區(qū)域310可與獨立的效用網(wǎng)格(utility grid )物理分 離或連接,可能致使影響一個區(qū)域310的災(zāi)難將不影響另一個區(qū)域。類似 地,在數(shù)據(jù)中心300內(nèi),不同的區(qū)域310可具有獨立的備用電源、網(wǎng)絡(luò)連 接或其它冗余資源,其可起作用來使一個區(qū)域310能夠繼續(xù)操作而不管另 —區(qū)域310的故障。
注意,在一些實施方式中,在其各自的故障可能性之間有小的但非零 相關(guān)性的兩個區(qū)域310可仍然被認為具有獨立的故障可能性。例如,盡管 每個區(qū)域310都具有用于備用電源、冷卻等的穩(wěn)健的和獨立的系統(tǒng),但是 在給定數(shù)據(jù)中心300內(nèi)的兩個區(qū)域310可能在足夠大的災(zāi)難(例如,足以 摧毀整個數(shù)據(jù)中心300的爆炸)的情況下易受并行故障的影響。然而,足 以使這兩個區(qū)域310同時出故障的事件的概率可能足夠小,為了實際的目的,兩個區(qū)域310可假定為具有無關(guān)的故障可能性。
區(qū)域310可包括層次的附加級別(未示出)b例如,在一個實施方式 中,雖然可使用任何適當(dāng)?shù)膮^(qū)域組織,但是區(qū)域310可細分成格柵(rack), 格柵進一步細分成單獨的節(jié)點,例如位存儲節(jié)點160。 一般而言,區(qū)域310 可包括足以實現(xiàn)在區(qū)域內(nèi)部署的存儲服務(wù)系統(tǒng)組件的計算資源。例如,每 個位存儲節(jié)點160可實現(xiàn)為自主的計算機系統(tǒng),該計算機系統(tǒng)可包括如下 面結(jié)合圖4-9的說明所述的各種硬件和軟件組件。類似地,每個鍵映射實 例140可通過多個計算機系統(tǒng)來實現(xiàn),如下面結(jié)合圖10-22的說明所述來 配置這些計算機系統(tǒng)。
在一些實施方式中,組件例如網(wǎng)絡(luò)服務(wù)平臺100、協(xié)調(diào)器120、節(jié)點 揀取器130、復(fù)制器180和DFDD 110可通過每個區(qū)域310內(nèi)分立的計算 資源來實現(xiàn),組件被部署在區(qū)域310內(nèi)。例如,這些組件中的每一個都可 實現(xiàn)為可由相應(yīng)的計算機系統(tǒng)執(zhí)行的一組指令和數(shù)據(jù)。可選地,這些組件 中的一些或全部可實現(xiàn)為可同時在一個或更多計算機系統(tǒng)上執(zhí)行的過程。 在一些實施方式中,用于實現(xiàn)這些組件中的一些或全部的計算資源可與用 于實現(xiàn)位存儲節(jié)點160或鍵映射實例140的那些資源一起被共享。例如, 計算機系統(tǒng)可配置成實現(xiàn)鍵映射140功能以及協(xié)調(diào)器120功能的一些部 分。 一般而言,可使用在單獨的區(qū)域310內(nèi)部署的計算資源上的圖2的組 件的任何適當(dāng)?shù)姆指睢W⒁?,如圖3所示,不同的區(qū)域310可包括存儲服 務(wù)系統(tǒng)組件的不同組合,且所示實施方式旨在為說明性的而不是限制性 的。
此外,不同的存儲服務(wù)系統(tǒng)組件可根據(jù)任何適當(dāng)類型的通信協(xié)議來進 行通信。例如,在圖2的某些組件被實現(xiàn)為分立的應(yīng)用程序或可執(zhí)行的過 程的場合,它們可使用標準的過程間通信技術(shù)或通過使用標準或?qū)S玫呐c 平臺無關(guān)的通信協(xié)議來彼此通信,標準的過程間通信技術(shù)可由操作系統(tǒng)或 平臺(例如,遠程程序調(diào)用、隊列、郵箱、套接字等)提供。這樣的協(xié)議 可包括可支持任意級的信號交換/確認、錯誤檢測和校正或通信組件可能需 要或希望的其它通信功能部件的有狀態(tài)或無狀態(tài)的協(xié)議。例如,在一個存 儲服務(wù)系統(tǒng)實施方式中,相當(dāng)程度的組件間通信可使用適當(dāng)?shù)幕ヂ?lián)網(wǎng)傳輸層協(xié)議例如傳輸控制協(xié)議(TCP )的一種版本、用戶數(shù)據(jù)報協(xié)議(UDP ) 或類似的標準或?qū)S玫膫鬏攨f(xié)議來實現(xiàn)。然而,還可以設(shè)想,在存儲服務(wù) 系統(tǒng)組件之間的通信可使用在協(xié)議抽象的較高層的協(xié)議來實現(xiàn)。例如,與 客戶50和網(wǎng)絡(luò)服務(wù)接口 100之間的通信一樣,存儲服務(wù)系統(tǒng)組件之間的 通信可使用應(yīng)用屠協(xié)議例如在HTTP上的網(wǎng)絡(luò)服務(wù)請求來進行。
位存儲配置
如上所述,在圖2所示的存儲服務(wù)系統(tǒng)體系結(jié)構(gòu)實施方式中,位存儲 節(jié)點160可通常操作來為由存儲服務(wù)系統(tǒng)管理的不同對象30提供存儲。 在圖4中示出位存儲節(jié)點160的一個示例性實施方式。在所示實施方式中, 位存儲節(jié)點160包括配置成與存儲重裝器163和邏輯文件輸入/輸出(I/O ) 管理器165通過接口連接的存儲節(jié)點管理(SNM )控制器161。管理器165 配置成與文件系統(tǒng)167通過接口連接,文件系統(tǒng)167又配置成管理一個或 更多存儲設(shè)備169。在不同實施方式中,SNM控制器161、存儲重裝器163、 邏輯文件I/O管理器165或文件系統(tǒng)167中的任何一個可實現(xiàn)為可存儲在 計算機可訪問的介質(zhì)上或可由計算機執(zhí)行的指令,以執(zhí)行下面描述的功 能??蛇x地,這些部件中的任一個都可由專用硬件電路或設(shè)備實現(xiàn)。
在一個實施方式中,SNM控制器161可配置成向節(jié)點160的客戶提供 對象存儲API ,以及協(xié)調(diào)節(jié)點160的其它組件的行為以根據(jù)API來完成動 作。例如,控制器120可配置成通過由SNM控制器161提供的API來將 對象30存儲到給定節(jié)點160并從給定節(jié)點160取回對象30。雖然API管 理在這里被描述為SNM控制器161的功能部件,可以設(shè)想,在一些實施 方式中,節(jié)點169的API處理功能可以與SNM控制器161不同的模塊或
組件實現(xiàn)。
對象存儲API可支持對象放置、獲取和釋放操作。在一個這樣的實施 方式中, 一般也可稱為存儲操作或?qū)懭氩僮鞯膶ο蠓胖貌僮骺蓪ο?0 的數(shù)據(jù)和/或元數(shù)據(jù)指定為操作的變元或參數(shù)。當(dāng)對于給定節(jié)點160完成操 作時,放置操作可向發(fā)出請求的客戶返回相應(yīng)于所存儲的對象30的定位 器,該定位器可相對于在整個存儲服務(wù)系統(tǒng)中存儲的所有其它對象30來 唯一地識別在給定節(jié)點160上的對象實例。相反地, 一般也可稱為讀取或取回操作的對象獲取操作可將對象30 的定位器指定為參數(shù)。當(dāng)完成操作時,獲取操作可向發(fā)出請求的客戶返回 相應(yīng)于所指定的定位器的對象數(shù)據(jù)和/或元數(shù)據(jù)。在一些實施方式中,獲取 操作可支持允許發(fā)出請求的客戶指定對象數(shù)據(jù)、元數(shù)據(jù)或兩者是否返回到 客戶的參數(shù)。
與獲取操作一樣,一般也可稱為刪除或消除操作的對象釋放操作可將 對象30的定位器指定為參數(shù)。然而,當(dāng)完成操作時,釋放操作可釋放以 前與參考的對象30關(guān)聯(lián)的存儲資源,且這樣的資源可接著用于存儲其它 對象30。在一個實施方式中, 一旦定位器被釋放,對定位器的隨后的獲取 操作在一段時間內(nèi)可以接著發(fā)生或可以不接著發(fā)生。也就是說,釋放操作 可用作對節(jié)點160的信號,它可釋放存儲資源用于重新使用,但節(jié)點160 可能不試圖立即這么做或通知客戶或另外地使這樣的重新使用與客戶同 步。因此,在其釋放之后的客戶繼續(xù)試圖訪問對象30可在任意的時間段 內(nèi)接著發(fā)生,其后對象30可變得在沒有通知時不可訪問。在其它實施方 式中,節(jié)點160可配置成阻止客戶訪問以前被釋放的定位器,而不管對象 數(shù)據(jù)是否仍然是可用的。
可以設(shè)想,在不同實施方式中,放置、獲取和釋放操作可根據(jù)任何適 當(dāng)?shù)膮f(xié)議來使用其它參數(shù)和/或返回不同的狀態(tài)、錯誤或其它指示。例如, 如果在節(jié)點160上對于待存儲的被請求的對象30沒有足夠的資源,或如 果由于某種其它原因放置不能被完成,則放置操作可返回錯誤情況。還可 設(shè)想,在一些實施方式中,節(jié)點160的對象存儲API可包括其它操作。例 如,API可配置成通過支持復(fù)制操作來促進對象復(fù)本的建立。在一個實施 方式中,除了不是向目標節(jié)點160提供待存儲的對象30的數(shù)據(jù),而是請 求的客戶可在不同的節(jié)點160上指定該對象30的定位器外,復(fù)制操作可 與放置操作類似地操作。目標節(jié)點160可接著與指定的節(jié)點160進行交互 作用以獲得對象數(shù)據(jù)和/或元數(shù)據(jù),并可將關(guān)于目標節(jié)點的對象的定位器返 回到客戶。在其它實施方式中,節(jié)點160可支持對對象30的其它適當(dāng)?shù)?操作。
注意,在實現(xiàn)如上所述的放置、獲取和釋放操作的一些實施方式中,現(xiàn)有對象30可以不在原位被修改。更確切地,對象30的實例可通過在寫 入包括修改的數(shù)據(jù)的新實例之后通過釋放現(xiàn)有的實例來被有效的修改。如 果對象30的修改致使它小于或大于其原始大小則例如通過減小可能出現(xiàn) 的分段存儲或?qū)ο笤俣ㄎ唬@樣的方法可簡化節(jié)點160的基本管理層的實 現(xiàn)。如下面關(guān)于網(wǎng)絡(luò)服務(wù)平臺IOO更詳細描述的,在一些實施方式中,存 儲服務(wù)系統(tǒng)可支持將大的對象分裂成塊,其中每個塊可作為不同的對象30 而被管理。這種方法可在處理大的對象中提高節(jié)點160的性能,通過限制 可能需要被重寫的塊的范圍可頻繁地修改該大的對象。然而,可以設(shè)想, 在其它實施方式中,節(jié)點160可包括支持對象30在原位的修改而不是通 過剛剛描述的釋放-重寫方法所必需的那些功能部件。
在所示實施方式中,邏輯文件I/0管理器165(或簡單地,管理器165 ) 可配置成虛擬化基本設(shè)備或文件系統(tǒng)特征,以便給SNM控制器161和重 裝器163提供一個或更多對象30可駐留的邏輯上鄰接的存儲空間。例如, 給定對象30可根據(jù)其在存儲空間內(nèi)的偏移和其距離該偏移的范圍(extent ) (例如,根據(jù)對象大小,包括數(shù)據(jù)和元數(shù)據(jù))來被定位在邏輯存儲空間中。 通過提供這樣的邏輯存儲空間,管理器165可向SNM控制器161提供基 本存儲的一致呈現(xiàn),而不管這樣的基本存儲的實現(xiàn)細節(jié)。
為了便于對邏輯存儲空間內(nèi)的對象30的訪問,在一個實施方式中, 管理器165可配置成向存儲到節(jié)點160的每個對象30分配對象索引偉也 稱為對象索引)b —般而言,任何給定對象30的索引在特定節(jié)點60內(nèi)可 以是唯一的。例如,在一個實施方式中,對象索引可通過每當(dāng)對象30存 儲到節(jié)點160時遞增計數(shù)器并使用最終的計數(shù)器值作為對象索引來獲得。 (在允許多個對象寫入操作同時進行的實施方式中,可通過例如串行化來 同步計數(shù)器遞增,以確保以一致和可預(yù)測的方式分配對象索引值。〉足夠 大的計數(shù)器值,例如64位無符號整數(shù)例如可確保為了實際目的而給每個 對象30分配唯一的索引值。這樣的計數(shù)器可在比方說264個對象被存儲之 后滾動循環(huán),其后可重復(fù)以前產(chǎn)生的索引值。然而,沖突是非常不可能的, 因為在計數(shù)器滾動循環(huán)之后以前被分配了給定索引值的對象30仍然存在 于節(jié)點160內(nèi)是非常不可能的。注意,用于分配對象索引的任何其它適當(dāng)?shù)姆椒ㄒ部杀皇褂?。如下所述,對象索引值可結(jié)合節(jié)點160的唯一標識符 使用,以確定可由協(xié)調(diào)器120或節(jié)點160的其它客戶使用來參考特定對象 30的定位器值。
管理器165可配置成使用上面描述的唯一的對象索引值來以便于對象 訪問的方式組織定位在邏輯存儲空間內(nèi)的關(guān)于對象30的信息。例如,如 在圖5的上部分中示出的,在一個實施方式中,管理器165可配置成存儲 表格或類似的數(shù)據(jù)結(jié)構(gòu),所述表格或數(shù)據(jù)結(jié)構(gòu)可被組織成通過對象索引值 而被容易地訪問。在所示實施方式中,索引表500可包括很多項目510 , 其中每個項目都可包括很多字段,包括對象索引字段、偏移字段、對象大 小字段、元數(shù)據(jù)大小字段和循環(huán)冗余碼校驗(CRC )字段。如在圖5的下 部分中,對于一些示例性對象30示出,項目510的偏移字段可指定相應(yīng) 的對象30在邏輯存儲空間內(nèi)的開始位置,以及對象大小和元數(shù)據(jù)大小字 段可指定對象數(shù)據(jù)和元數(shù)據(jù)從偏移點延伸所達到的程度。雖然對象數(shù)據(jù)和 對象元數(shù)據(jù)的順序在其它實施方式中可顛倒,但是在所示實施方式中,對 象數(shù)據(jù)在對象元數(shù)據(jù)之前。CRC字段可存儲循環(huán)冗余碼校驗算法或其它適 當(dāng)類型的校驗和或散列算法的結(jié)果。當(dāng)對象30最初存儲到節(jié)點160時, 可計算最初存儲到CRC字段中的值。隨后,當(dāng)訪問對象30時,相同的算 法可應(yīng)用于對象數(shù)據(jù)和/或元數(shù)據(jù),且作為結(jié)果的值與所存儲的CRC字段 值相比較。如果該比較導(dǎo)致失配,則可能損害所存儲的數(shù)據(jù)的完整性。注 意,在其它實施方式中,項目510可包括附加字段或與所示的那些不同的 字段。例如,CRC字段可被省略或在其它地方實現(xiàn)。此外,代替地或除了 相對偏移以外,還可存儲對象數(shù)據(jù)和元數(shù)據(jù)的絕對位置。
重裝器163可配置成對邏輯對象存儲空間進行操作,以消除當(dāng)對象30 被釋放且其相關(guān)聯(lián)的存儲資源被重新使用時可能出現(xiàn)的間隙。在一個實施 方式中,重裝器163可配置成掃描邏輯對象存儲空間(例如,周期性地或 連續(xù)地),以識別已經(jīng)被SNM控制器161和/或管理器165標記為被前面的 釋放操作釋放的對象30。重裝器163可接著使具有出現(xiàn)在被釋放的對象 30的索引之后的索引的那些對象30的項目510被更新以反映被釋放的對 象30的消除,這可有效地產(chǎn)生朝著邏輯對象存儲空間的原點移動的那些對象30。例如,如果在圖5的下部分中的對象N將被釋放,則重裝器163 可操作來使相應(yīng)于對象N+l的項目510被更新以將對象N的偏移字段表 現(xiàn)為對象N+l的新的偏移字段。重裝器163還可使與對象N關(guān)聯(lián)的項目 510被刪除,并可更新在對象N+1之后的對象的偏移以反映移位。在一個 實施方式中,管理器165可使在邏輯對象存儲空間和/或存儲設(shè)備169下面 的文件或結(jié)構(gòu)內(nèi)出現(xiàn)對象數(shù)據(jù)和元數(shù)據(jù)的相應(yīng)移位。因此,在一些實施方 式中,重裝器163的操作可減少下層存儲結(jié)構(gòu)的分段存儲并相應(yīng)地提高節(jié) 點160的對象訪問性能。
在一些實施方式中,管理器165可配置成在包括不同類型的硬件和軟 件的多個不同的執(zhí)行平臺上執(zhí)行。在一些這樣的實施方式中, 一個或更多 另外的抽象層可存在于由管理器165提供給SNM控制器161的邏輯對象 存儲空間及其客戶之間。例如,在所示實施方式中,管理器165可配置成 將邏輯對象存儲空間實現(xiàn)為由文件系統(tǒng)167管理的一個或更多物理文件。 —般而言,文件系統(tǒng)167可配置成將不同類型的物理存儲設(shè)備169組織到 邏輯存儲設(shè)備中,該邏輯存儲設(shè)備可以邏輯單元存儲數(shù)據(jù),所述邏輯單元 在這里稱為物理文件。由文件系統(tǒng)167管理的邏輯存儲設(shè)備可實際上是分 層的。例如,文件系統(tǒng)167可支持可被定位(navigated )來存儲和訪問物 理文件的目錄或文件夾的層次。 一般而言,文件系統(tǒng)167可配置成跟蹤和 管理給定物理文件和存儲設(shè)備169的位置之間的關(guān)系,其中物理文件的相 應(yīng)的數(shù)據(jù)和/或元數(shù)據(jù)存儲在存儲設(shè)備169上。因此,在一個實施方式中, 管理器165可管理邏輯對象存儲空間到由文件系統(tǒng)167分配的一個或更多 物理文件的映射。文件系統(tǒng)167又可管理這些物理文件到存儲設(shè)備169的 可尋址的位置的映射。
文件系統(tǒng)167可通常集成在操作系統(tǒng)內(nèi),雖然任何給定的操作系統(tǒng)可 支持提供用于管理下層設(shè)備169的不同功能部件的各種不同的文件系統(tǒng) 167。例如,Microsoft \¥^(10 3@操作系統(tǒng)的不同版本支持文件系統(tǒng),例如 NT文件系統(tǒng)(NTFS )以及FAT32 (文件分配表-32 )和FAT16文件系統(tǒng)。 Linux和Unix操作系統(tǒng)的不同版本可支持文件系統(tǒng),例如ext/ext2文件系 統(tǒng)、網(wǎng)絡(luò)文件系統(tǒng)(NFS Reiser文件系統(tǒng)(ReiserFS )>快速文件系統(tǒng)(FFS )
42和許多其它的文件系統(tǒng)。 一些第三方軟件廠商可提供用于與各種計算平臺
集成的專用文件系統(tǒng),例如VERITAS⑧文件系統(tǒng)(VxFS )b不同文件系統(tǒng) 可提供對于用于管理下層存儲設(shè)備169的不同功能部件的支持。例如,一 些文件系統(tǒng)167可提供對于實現(xiàn)設(shè)備鏡像、分散連結(jié)(striping 、快照或 其它類型的虛擬化功能部件的支持。
注意,在一些實施方式中,在管理器165和存儲設(shè)備169之間可能仍 然存在其它的抽象層。例如,在一些實施方式中,體積(volume )管理器 層可設(shè)置在文件系統(tǒng)167和存儲設(shè)備169之間,并可配置成執(zhí)行上面提到 的一些或所有虛擬化功能部件??蛇x地,特定的存儲設(shè)備169可配置為硬 盤驅(qū)動器或包括虛擬控制器的其它設(shè)備的獨立陣列。虛擬控制器可配置成 向文件系統(tǒng)167提供磁盤驅(qū)動器作為單個物理設(shè)備,雖然虛擬控制器在內(nèi) 部可支持設(shè)備的存儲地址空間到磁盤驅(qū)動器的任意復(fù)雜的映射,但是類似 于如上提到的可由體積管理器支持的或在文件系統(tǒng)167內(nèi)的虛擬映射。還 注意到,在一些實施方式中,可能存在比那些所示的抽象更少的層。例如, 在一些實施方式中,管理器165可配置成與例如作為原始物理設(shè)備的存儲 設(shè)備169直接進行交互作用,而不使用文件系統(tǒng)167。
一般而言,存儲設(shè)備169可包括可由文件系統(tǒng)167和/或管理器165支 持的任何適當(dāng)類型的存儲設(shè)備。存儲設(shè)備169可通常包括硬盤驅(qū)動器設(shè)備, 例如小型計算機系統(tǒng)接口 ( SCSI )設(shè)備或AT附加編程接口 ( ATAPI )設(shè) 備(其也可稱為集成驅(qū)動電子(IDE )設(shè)備)b然而,存儲設(shè)備169可包含 包括基于磁或光介質(zhì)的設(shè)備的任何類型的海量存儲設(shè)備、固態(tài)海量存儲設(shè) 備(例如,基于非易失性或"閃"存儲器的設(shè)備X磁帶等。進一步地,存儲 設(shè)備169可通過除了上面提到的那些以外的任何適當(dāng)?shù)慕涌陬愋投恢?持,例如遵循通用串行總線或IEEE 1394/Firewire⑧標準的版本的接口。
如上所述,對于存儲在存儲設(shè)備系統(tǒng)內(nèi)的對象30的任何給定的實例, 相應(yīng)的定位器可唯一地識別在系統(tǒng)內(nèi)所有節(jié)點160上的實例。在一個實施 方式中,定位器可生成為對象索引值的級連、組合或其它函數(shù),該對象索 引值以及相應(yīng)于上面存儲對象實例的節(jié)點160的唯一標識符或"節(jié)點ID"可 由管理器165分配給對象實例。例如,如上所述,64位對象索引值可與64位節(jié)點ID組合以產(chǎn)生128位定位器。這樣的定位器允許多達264個唯一 的節(jié)點160中的每一個存儲多達264個唯一的對象實例,雖然在不同實施 方式中更小或更大數(shù)量的位可用來形成定位器。
在一個實施方式中,節(jié)點ID可通過唯一的網(wǎng)絡(luò)地址,例如相應(yīng)于給 定節(jié)點160的互聯(lián)網(wǎng)協(xié)議(IP )地址的級連接或組合來形成,并具有時間 戳或日期戳。例如,根據(jù)IP地址(例如,在節(jié)點啟動/初始化時或如果不 在初始化期間則在節(jié)點ID被分配時)與反映IP地址被分配的時間或IP地 址被得知是有效的時間期間的時間戳的組合,可給節(jié)點160分配節(jié)點ID。 一般而言,屬于同一 ID地址空間的兩個不同的節(jié)點160不能在任何給定 的時間被有效地分配相同的IP地址。因此,節(jié)點的IP地址和時間戳值的 組合可產(chǎn)生對該節(jié)點來說唯一的標識符。例如,32位IP地址可與32位時 間戳(例如,其表示自從某個公共參考時間以來經(jīng)過的秒數(shù))級連或組合 以產(chǎn)生上面提到的64位節(jié)點ID ,雖然可使用其它位寬度。還可以設(shè)想, 可使用其它技術(shù)來分配不依賴于節(jié)點IP地址的唯一的節(jié)點ID。例如,授 權(quán)中心例如命名服務(wù)器可在被請求時以保證節(jié)點ID的唯一性的方式來委 派節(jié)點ID ,類似于如上所述在節(jié)點160內(nèi)對象索引值的分配。
注意,在節(jié)點ID得自節(jié)點的IP地址的實施方式中,節(jié)點ID可不在 任何給定的時間反映節(jié)點160的當(dāng)前IP地址。例如,節(jié)點ID可繼續(xù)存在 直到節(jié)點160被重置,但節(jié)點的IP地址可在節(jié)點ID產(chǎn)生之后被改變或重 新分配。此外,在一些實施方式中,節(jié)點ID可以確定性的方式被散列、 加密或混亂化,以便防止存儲客戶50或其它可能惡意的實體解碼定位器 以確定實際的節(jié)點IP地址。
圖6中示出了關(guān)于圖4的節(jié)點160的實施方式的獲取、放置和釋放操 作的示例性實施方式的操作。首先參考圖6 ,獲取操作可在塊600中開始, 其中操作在節(jié)點160處從協(xié)調(diào)器120或其它客戶接收。例如,協(xié)調(diào)器120 可向包括節(jié)點ID和對象索引值的特定的定位器發(fā)出獲取操作,如上所述。 例如,如果節(jié)點ID反映目標節(jié)點160的當(dāng)前IP地址,則節(jié)點ID可用于 直接將獲取操作路由到適當(dāng)?shù)墓?jié)點160??蛇x地,目錄服務(wù)例如下面描述 的DFDD 110可用于將定位器的節(jié)點ID解析到可尋址的端點或目的地中,獲取操作可通過該端點或目的地而被路由到適當(dāng)?shù)墓?jié)點160。
一旦被節(jié)點160接收,則獲取操作就可被處理以識別節(jié)點160的邏輯 對象存儲空間內(nèi)的目標對象實例的范圍(塊602 )b例如,控制器161可接 收獲取操作并將它傳送到管理器165。管理器165又可使用通過獲取操作 所引用的定位器的對象索引部分來訪問索引表500 ,以便獲得邏輯對象存 儲空間內(nèi)的期望的對象實例的位置。例如,管理器165可獲得在對象實例 開始位置的邏輯對象存儲空間內(nèi)的偏移,以及該對象實例距離該偏移的長 度。在一些實施方式中,獲取操作可指定對象數(shù)據(jù)、元數(shù)據(jù)或兩者是否是 期望的。在這樣的實施方式中,管理器165可確定與被請求的數(shù)據(jù)有關(guān)的 邏輯對象存儲范圍。例如,如果對象數(shù)據(jù)和元數(shù)據(jù)都是期望的,則管理器 165可使用對象數(shù)據(jù)大小和元數(shù)據(jù)大小來確定距離待取回的對象偏移的范 圍。如上所述,在其它實施方式中,管理器165可以不同的方式來存儲和 管理對象實例的存儲范圍,例如通過絕對位置而不是邏輯對象存儲空間內(nèi) 的相對偏移。
在邏輯對象存儲空間內(nèi)的對象范圍可接著被映射到物理文件存儲空 間內(nèi)的一個或更多相應(yīng)的文件內(nèi)的范圍上(塊604 )b例如,管理器165可 將邏輯對象存儲空間映射到由文件系統(tǒng)167管理的一個或更多文件上,并 可向文件系統(tǒng)167發(fā)出適當(dāng)?shù)奈募L問操作,以例如通過參考一個或更多 文件名以及待讀取的命名文件內(nèi)的位置或偏移來獲得相應(yīng)于所期望的對 象范圍的數(shù)據(jù)。可以設(shè)想,在可選的實施方式中,控制器161可配置成繞 過由管理器165管理的邏輯塊存儲空間功能部件,并可改為直接與文件系 統(tǒng)167管理的物理文件進行交互作用。
對物理文件的參考可接著被映射到與設(shè)備有關(guān)的請求(塊606 )o例如, 文件系統(tǒng)167可配置成生成對存儲設(shè)備169的特定可尋址的位置的一個或 更多讀取請求,其中特定可尋址的位置例如邏輯塊地址(LBA )或設(shè)備幾 何結(jié)構(gòu)(例如,圓柱體、軌道、扇區(qū)和/或磁頭)所特有的地址。如上所述, 在一些實施方式中,管理器165可配置成繞過文件系統(tǒng)167并直接管理存 儲設(shè)備169。
被請求的對象數(shù)據(jù)可接著被從存儲設(shè)備169取回(塊608 )并被返回
45到發(fā)出請求的客戶(塊610 )b例如,取回的數(shù)據(jù)可被向上返回通過圖4所 示的請求層次,或可從存儲設(shè)備169或文件系統(tǒng)167直接返回到控制器161 以傳送到發(fā)出請求的客戶。
如圖7所示,在一個實施方式中,在塊700中當(dāng)操作在節(jié)點160處從 協(xié)調(diào)器120或其它客戶接收放置操作時,放置操作可以類似于上面對圖6 的塊600描述的方式開始。例如,協(xié)調(diào)器120可向在由節(jié)點揀取器130產(chǎn) 生的寫入計劃中指定的節(jié)點160發(fā)出放置操作。與獲取操作相反,放置操 作可包括待存儲的對象數(shù)據(jù)和/或元數(shù)據(jù),并可以可選地包括指定數(shù)據(jù)和/ 或元數(shù)據(jù)的長度的附加參數(shù)。
一旦被節(jié)點160接收,則放置操作就可被處理以為邏輯對象存儲空間 內(nèi)的對象實例分配存儲范圍(塊702》在一個實施方式中,管理器165可 配置成向新的對象實例分配對象索引值,并在索引表500中記錄指定新的 對象實例的偏移的新項目510。例如,新項目的偏移可相對于具有最大索 引值的現(xiàn)有對象實例的存儲范圍(例如,偏移和長度)而被確定。如果新 的對象實例的數(shù)據(jù)和/或元數(shù)據(jù)的長度沒有被指定為放置操作的參數(shù),則管 理器165或控制器161可配置成計算所述數(shù)據(jù)和/或元數(shù)據(jù)的長度以包含在 新項目510中。
邏輯對象存儲空間內(nèi)新近分配的存儲范圍可接著被映射到物理文件 存儲空間內(nèi)的一個或更多相應(yīng)的文件內(nèi)的范圍上。例如,新的對象實例的 被分配的范圍可附加到一個或更多現(xiàn)有物理文件的末尾,或另外地位于現(xiàn) 有的或新近分配的物理文件內(nèi)。物理文件范圍可接著例如由文件系統(tǒng)167 以類似于上面對獲取操作描述的方式而被映射到存儲設(shè)備范圍(塊706 ), 且對象實例數(shù)據(jù)和/或元數(shù)據(jù)可接著存儲到存儲設(shè)備169 (塊708 )b
當(dāng)確認數(shù)據(jù)和/或元數(shù)據(jù)已經(jīng)被成功地寫入到存儲設(shè)備169時,相應(yīng)于 所存儲的對象實例的定位器可返回到發(fā)出請求的客戶(塊710 >>例如,管 理器165可配置成將產(chǎn)生的對象索引值附加到節(jié)點160的節(jié)點ID上,并 且當(dāng)從文件系統(tǒng)167指示物理文件寫入操作成功地完成時可返回最終的值 作為對象定位器。
如圖8所示,在一個實施方式中,在塊800中當(dāng)操作在節(jié)點160處從協(xié)調(diào)器120或其它客戶接收釋放操作時,釋放操作可以類似于上面對圖6 的塊600描述的方式開始。釋放操作可簡單地指定待釋放的對象實例的定 位器,雖然在其它實施方式中也可提供其它變元。
與獲取操作一樣, 一旦釋放操作被節(jié)點160接收,釋放操作就可被處 理以識別節(jié)點160的邏輯對象存儲空間內(nèi)的目標對象實例的范ffl(塊802 )b 例如,控制器161可接收釋放操作并將其傳送到管理器165。管理器又可 使用被釋放操作參考的定位器的對象索引部分來訪問索引表500 ,以便識 別所參考的對象實例的相應(yīng)項目510。所參考的對象可接著被標記為被釋 放的(塊804 )b例如,管理器165可配置成將偏移或項目510的另一字段 設(shè)定為非法值,例如負數(shù),其中負數(shù)可表示該項目不再是有效的。指示對 象已被釋放的確認可接著返回到發(fā)出請求的客戶(塊806 、
如上所述,當(dāng)對象實例被釋放時,與對象實例相關(guān)聯(lián)的存儲資源不能 被立即釋放、收回或重新分配以用于其它用途。更確切地,在一個實施方 式中,那些資源可繼續(xù)存在直到相對于釋放操作異步地進行操作的獨立過 程收回它們?yōu)橹?。圖9示出這樣的過程的一個實施方式的操作,例如可通 過存儲重裝器163來實現(xiàn)。在塊900中,可選擇相應(yīng)于存儲在節(jié)點160上 的特定對象實例的對象索引項目。例如,重裝器163可配置成根據(jù)存儲在 項目中的對象索引值來以連續(xù)的順序從索引表500中選擇索引項目。隨后, 可檢查所選定的項目以確定相應(yīng)的對象實例是否已被釋放(塊902 )b例如, 重裝器163可檢查偏移字段或另一字段以確定該字段是否已被設(shè)定為指示 相應(yīng)的對象實例已被釋放的值,例如負值或一些其它值。
如果所選定的對象還沒有被釋放,則操作可繼續(xù)后退到塊900 ,其中 可選擇另一對象。如果啊選定的對象已被釋放,則邏輯對象存儲空間可被 重裝以收回相應(yīng)于所釋放的對象的存儲資源(塊904 )b例如,重裝器163 可配置成調(diào)節(jié)跟隨邏輯對象存儲空間內(nèi)的所釋放的對象的那些對象實例 的索引項目510 ,以便第一個這樣的對象實例的偏移被設(shè)置成所釋放的對 象的偏移,下一個這樣的對象實例的偏移被設(shè)置為第一個這樣的對象實例 的數(shù)據(jù)大小、元數(shù)據(jù)大小和偏移的函數(shù),等等。然而,在一些實施方式中, 不是在所釋放的對象實例之后的所有對象實例都需要在新的對象被選擇用于檢查之前被重裝。例如,重裝可與對象選擇交替進行,以便遇到的每 個對象在它被選擇用于檢查吋被重裝。
在一些實施方式中,管理器165可響應(yīng)于邏輯對象存儲空間的重裝而 執(zhí)行物理文件存儲空間內(nèi)類似的重裝或合并操作。例如,管理器165可使 邏輯對象數(shù)據(jù)范圍被重新映射到不同的物理文件數(shù)據(jù)范圍。類似地,在一 些實施方式中,文件系統(tǒng)167可響應(yīng)于物理文件存儲空間的重裝而在存儲 設(shè)備169中執(zhí)行類似的重裝或合并操作。在其它實施方式中,物理文件存 儲空間或存儲設(shè)備本身的重裝可獨立于由重裝器163發(fā)起的邏輯對象存儲 空間的重裝而出現(xiàn)。例如,文件系統(tǒng)167可配置成通過重新排列物理文件 存儲范圍到設(shè)備存儲范圍的映射來為存儲在存儲設(shè)備169上的物理文件整 理碎片,以便所映射的設(shè)備存儲范圍相對于存儲設(shè)備的訪問模式來說大部 分或全部是連續(xù)的。
在邏輯對象存儲空間的重裝之后,相應(yīng)于所釋放的對象的索引項目可 被刪除(塊906 ),且操作可從另一對象被選擇的塊900繼續(xù)。如上所述, 在一些實施方式中,重裝可在對象被選擇時"即時(on the fly )('出現(xiàn),這 可提高邏輯對象存儲空間的總利用,同時最小化重新定位對象所需要的操 作的數(shù)量。
注意,在一些實施方式中,可被節(jié)點160支持的獲取、放置、釋放或 其它操作中的任何一種操作可支持關(guān)于發(fā)出請求的客戶的各種類型的信 號交換、確認或錯誤處理協(xié)議。例如,如果客戶請求對于一種操作的殘缺 的請求(例如,不能提供必要的參數(shù)),或如果節(jié)點160不能良好地完成 操作(例如,沒有充足的資源來兌現(xiàn)放置操作),則節(jié)點160可將錯誤指 示返回給發(fā)出請求的客戶。這樣的指示可以包括或可以不包括關(guān)于故障情 況的性質(zhì)的特定細節(jié)。
在一個實施方式中,協(xié)調(diào)器120可配置成將操作獨立傳送到該操作所 指向的每個相應(yīng)的節(jié)點160 ,即使當(dāng)多個操作可具有共同的數(shù)據(jù)時也是如 此。例如,在放置操作的情況下,其中對象30根據(jù)寫入計劃被寫到多個 節(jié)點160 ,協(xié)調(diào)器120可與每個指定的節(jié)點160獨立地進行通信。然而, 在可選的實施方式中,可鏈接具有共同數(shù)據(jù)和/或參數(shù)、旨在多個目標節(jié)點160的操作。在一個實施方式中,協(xié)調(diào)器120或其它客戶可通過指定在操 作的參數(shù)中的每個接收者例如接收者列表來開始所鏈接的操作。在操作中 指示的多個接收者可默認地表示鏈接,或其它參數(shù)可用于將操作標記為被 鏈接的。協(xié)調(diào)器120或其它客戶可接著通過將鏈接的操作傳送到在操作中 指定的第一個目標節(jié)點160而開始該鏈接的操作。
當(dāng)接收該鏈接的操作時,節(jié)點160可處理該操作并可將它轉(zhuǎn)發(fā)到在操 作中指定的另一個目標節(jié)點160。在這樣的轉(zhuǎn)發(fā)之前,接收者節(jié)點160可 將其自身從包括在該操作中的目標的列表中刪除,以表示接收到并避免循
環(huán)轉(zhuǎn)發(fā)。該操作可與接收者節(jié)點的處理同時被轉(zhuǎn)發(fā)??蛇x地,轉(zhuǎn)發(fā)可能發(fā) 生在接收者節(jié)點成功地完成處理時。在一些實施方式中,鏈接的操作可以 接收者被指示在該操作中的順序而被傳送到那些接收者。在其它實施方式 中,節(jié)點160可例如通過確定剩余目標中哪一個是最接近的、最少負載的 或滿足一些其它選擇標準的,來動態(tài)地選擇下一個接收者。注意,在一些 實施方式中,鏈接的和非鏈接的操作的組合可由協(xié)調(diào)器120或其它客戶產(chǎn) 生。例如,如果相同的數(shù)據(jù)是前往六個不同的節(jié)點160的放置操作的目標, 則協(xié)調(diào)器120可產(chǎn)生指定這六個目標節(jié)點的單個鏈接的操作,或兩個鏈接 的操作,其中每個操作指定目標節(jié)點中的三個目標節(jié)點。其它組合也是可 能的,包括產(chǎn)生協(xié)調(diào)器120可獨立地傳送到相應(yīng)的目標節(jié)點160中的每一 個的六個非鏈接的操作。
鍵映射配置
如上所述,各種位存儲節(jié)點160可配置成為對象30的實例提供存儲。 節(jié)點160不可單獨地為冗余和數(shù)據(jù)安全提供任何特定的支持;事實上,在 一些實施方式中,節(jié)點160可使用運行開放資源操作系統(tǒng)(例如,Linux ) 并通過廉價的商品性硬盤驅(qū)動器(例如,ATAPI/IDE硬盤驅(qū)動器)來提供 存儲的一般計算平臺來實現(xiàn)。在這樣的實施方式中,各個系統(tǒng)可能不是容 錯能力特別好的。更確切地,數(shù)據(jù)安全和冗余可通過對象30在很多節(jié)點 160上的復(fù)制而被提供,如上所述。
如前面討論的,給定對象30可相應(yīng)于可被存儲客戶指定的鍵。給定 對象30的各個實例可相應(yīng)于相應(yīng)的定位器,這些定位器可唯一地識別被包括在存儲服務(wù)系統(tǒng)中的節(jié)點160的集合中的那些實例。在一個實施方式 中,部署在存儲服務(wù)系統(tǒng)內(nèi)的每個鍵映射實例140可配置成為存儲和維持 鍵和用于給定對象30及其存儲在節(jié)點160中的復(fù)制的實例的所有相應(yīng)的 定位器之間的關(guān)系或映射。在下面的討論中,討論了鍵映射實例140的不 同實施方式的一般特征和功能,接著是鍵映射實例140的特定實施方式可 如何被實現(xiàn)的描述。
在一個實施方式中,給定鍵映射實例140可配置成將各個鍵和相關(guān)聯(lián) 的定位器之間的關(guān)系的細節(jié)存儲在一個或更多表或任何其它適當(dāng)類型的 數(shù)據(jù)結(jié)構(gòu)中。例如,在一個實施方式中如圖10所示,鍵映射實例140包 括具有很多項目144的鍵映射數(shù)據(jù)結(jié)構(gòu)142。每個項目包括相應(yīng)的鍵146 以及相關(guān)聯(lián)的記錄148。在一些實施方式中,如下面更詳細描述的,用于 組織項目144的數(shù)據(jù)結(jié)構(gòu)的組織可能是復(fù)雜的。然而,從功能性的觀點來 看,鍵映射實例140可通常保存給定鍵144及其相應(yīng)的記錄148之間的一 對一的表格狀的關(guān)系。
記錄148可一般包括相應(yīng)于給定鍵144的定位器,但也可包括其它信 息。例如,記錄148的一個實施方式可如下構(gòu)造
Struct Key Record {
intl6—t version;
intl6_t storageClass;
intl6一t creationDate;
int64」objectSize;
unit32_t crc32;
int8_t numLocators;
struct locator {
int64」nodeID;
int64—t objectlndex;
)replicas[];雖然該示例性數(shù)據(jù)結(jié)構(gòu)使用c編程語言的語法來表達,它可使用任何適當(dāng)
的語言、表示或格式來實現(xiàn)。記錄148的可選實施方式可包括比所示的那些更多、更少或不同的字段。在一些實例中,記錄148可稱為"i節(jié)點(inode )',將記錄148在組織存儲空間中的目的的相似性用于某些類型的Unix文件系統(tǒng)中采用的i節(jié)點結(jié)構(gòu)。然而,術(shù)語"!節(jié)點"在本上下文中的使用不是用來調(diào)用文件系統(tǒng)或其它存儲環(huán)境內(nèi)i節(jié)點的實現(xiàn)或使用的特定細節(jié)。
在上面的實施方式中,記錄148可包括七個特定的元素。16位的版本元素可用于存儲對于記錄148的格式特定的唯一識別的值。例如,記錄148的不同版本可用在鍵映射實例140的不同實現(xiàn)中,且在一些實施方式中,存儲在給定鍵映射實例140中的記錄148可為不同種類的。版本元素可用于區(qū)分記錄148的不同版本,以便記錄的其它元素可被正確解碼和使用。
16位storageClass元素可用于存儲相應(yīng)于記錄148的對象30的存儲類的指示。在隨后的部分中更詳細地描述了存儲類。 一般而言,對象的給定存儲類可識別存儲特征和/或策略,其對給定存儲類的其它成員可能是共有的,但可不同其它存儲類的成員。例如,對于存儲服務(wù)系統(tǒng)的給定實現(xiàn)可定義"高可靠性"存儲類和"低可靠性"存儲類。作為高可靠性存儲類的成員的對象30可比作為低可靠性存儲類的成員的對象30被更大程度地復(fù)制,因而降低對各個復(fù)本的損失的敏感性,可能是以比對低可靠性存儲類的成員估算的更高的使用成本來交換的。存儲類的很多其它可能的類型和組合是可能的和預(yù)期的。
64位的creationDate元素可用于存儲相應(yīng)的對象30在存儲服務(wù)系統(tǒng)內(nèi)被創(chuàng)建的日期和時間的指示。該元素可以任何適當(dāng)?shù)姆绞礁袷交?。例如,日期和時間可被明確地編碼為元素內(nèi)的不同字段,或表示自公共參考點以來經(jīng)過的時間單元(例如,秒、微秒等)的數(shù)量的單個數(shù)字。在一些實施方式中,creationDate元素可包括配置成指示相應(yīng)的對象30的任何方面的最后修改的日期和時間的附加字段,雖然在其它實施方式中,最后的修改元素可作為記錄148內(nèi)的不同元素而被包括。
64位的objectSize元素可用于例如以字節(jié)的形式存儲相應(yīng)對象的大小
51的指示。在一些實施方式中,該元素可反映對象數(shù)據(jù)和元數(shù)據(jù)的大小,而
在其它實施方式中,這些可存儲為不同的字段。32位的crc32元素可用于存儲根據(jù)任何適當(dāng)?shù)男r灪退惴閷ο髷?shù)據(jù)和/或元數(shù)據(jù)計算的循環(huán)冗余碼校驗(CRC )校驗和的指示。例如,可包括校驗和以驗證數(shù)據(jù)防訛誤或篡改的完整性。在其它實施方式中,除了或代替CRC校驗和,還可使用從對象數(shù)據(jù)和/或元數(shù)據(jù)計算的任何適當(dāng)類型的散列信息或簽名(signature )b
8位的numLocators元素可用于存儲包括在replicas[]陣列內(nèi)的記錄148內(nèi)的定位器的數(shù)量的指示。在該陣列內(nèi),每個定位器存儲為64位的節(jié)點ID元素以及64位的對象索引值,其可如上所述在對位存儲節(jié)點160的配置的討論中得到。在一些實施方式中,定位器可存儲為replicas[]陣列內(nèi)的單個元素。
在一個實施方式中,鍵映射實例140可配置成向鍵映射客戶提供鍵映射API ,例如協(xié)調(diào)器120 ,以及配置成執(zhí)行支持所提供的API所必需的那些功能。例如,控制器120可配置成使用API來對與鍵映射實例140管理的項目144關(guān)聯(lián)的記錄148進行存儲、取回、刪除或執(zhí)行其它操作。類似于對如上所述可由節(jié)點160支持的對象實例的操作,在一個實施方式中,鍵映射API可支持對鍵映射項目144的放置、獲取和刪除操作。在一個這樣的實施方式中,一般也可稱為鍵映射存儲操作或鍵映射寫入操作的鍵映射項目放置操作可指定要存儲在鍵映射項目144內(nèi)的鍵146和記錄148。在一個實施方式中,指定鍵146的放置操作可用被指定為放置操作的變元或參數(shù)的記錄來代替與現(xiàn)有的項目144關(guān)聯(lián)的記錄148 ,其中對于鍵146來說項目144已經(jīng)存在。當(dāng)對于給定的鍵映射實例140完成時,鍵映射放置操作可向請求的客戶返回狀態(tài)指示,例如操作是否成功或失敗,以及例如出現(xiàn)什么類型的故障(如果有)b在一些實施方式中,如果鍵映射放置操作導(dǎo)致現(xiàn)有項目144的替換,則鍵映射實例140可配置成將項目144的前面的值返回給請求的客戶。
也可一般稱為鍵映射讀取或取回操作的鍵映射獲取操作可在一個實施方式中將鍵指定為參數(shù)。當(dāng)完成時,鍵映射獲取操作可向請求的客戶返回與請求的鍵關(guān)聯(lián)的鍵映射項目144的記錄148 ,如果這樣的項目存在的話。如果沒有相應(yīng)的項目144存在則可將對該結(jié)果的指示返回給請求的客戶。
在一個實施方式中,除了請求的客戶不需要指定將寫入到項目中的記錄之外,鍵映射項目刪除操作可配置成與放置操作類似地操作。當(dāng)對給定的鍵映射實例140完成時緯映射刪除操作可向請求的客戶返回狀態(tài)指示,類似于鍵映射放置操作的情況。與放置操作一樣,在一些實施方式中,鍵映射實例140可配置成將刪除的項目144的前面的值返回給請求的客戶。
鍵映射API還可支持在不同實施方式中的其它類型的操作。例如,鍵映射API可支持可幫助鍵映射客戶管理鍵映射項目的操作。在一個實施方式中,鍵映射API可支持列表操作,其可配置成識別具有與請求的客戶指定的一些標準匹配的鍵146的那些項目144。例如,列表操作可允許客戶將字符串或模式指定為操作的參數(shù)。當(dāng)對于給定的鍵映射實例140完成時,列表操作可給請求的客戶返回滿足所指定的字符串或模式的那些鍵146的列表。在一個實施方式中,只有當(dāng)字符串是鍵146的正確前綴(例如,對于字符串的所有字符,字符串的第N個字符與鍵的第N個字符匹配)時,鍵146才可滿足給定的字符串。在其它實施方式中,如果字符串可在鍵146內(nèi)的任何位置找到,則鍵146可滿足給定的字符串。
在一些實施方式中列表操作可支持其它參數(shù)。例如,列表操作可允許請求的客戶指定對待返回的匹配的數(shù)量的限制。此外,請求的客戶可例如通過指定可擴充的或封閉式的按字母順序的范圍來指定對將被搜索的鍵146的約束條件,其中將被搜索的鍵146應(yīng)落在該按字母順序的范圍內(nèi)。在一些實施方式中,鍵映射實例140可配置成返回記錄148以及滿足列表操作標準的鍵146。此外,在一些操作中,鍵映射API可支持計數(shù)操作,其可支持與列表操作相同類型的參數(shù)和執(zhí)行行為。然而,不是返回滿足由請求的客戶提供的標準的那些鍵146和/或記錄148 ,計數(shù)操作可返回滿足那些標準的鍵的數(shù)量(例如,由相應(yīng)的列表操作返回的鍵的數(shù)量)b注意,鍵映射API還可支持沒有在上面詳述的其它操作。
在一些情況下,不同的鍵映射客戶可試圖修改相同的鍵映射項目144。例如,響應(yīng)于各種客戶或系統(tǒng)驅(qū)動的操作,兩個不同的協(xié)調(diào)器120可試圖同時改變給定記錄148的內(nèi)容(例如,以增加、刪除或修改復(fù)本的定位器),或一個協(xié)調(diào)器120可試圖修改記錄148 ,同時另一個協(xié)調(diào)器120試圖刪除相應(yīng)的項目144。為了提供用于解決對給定鍵映射實例144的同時請求的一致方法,在一個實施方式中,鍵映射API可要求至少那些更新或修改鍵映射狀態(tài)的鍵映射操作(例如,鍵映射放置和刪除操作)提供序列號作為鍵映射操作的參數(shù)。鍵映射實例140可接著配置成通過比較序列號(數(shù)字式或按字母順序地)和在比較的基礎(chǔ)上一致地挑選一個操作來解決對項目144的沖突更新。在一些實施方式中,所提供的序列號連同如下面更詳細描述的用于同步恢復(fù)的修改的記錄148 —起可存儲在修改的鍵映射項目144中。
例如,鍵映射客戶可基于時間戳來產(chǎn)生序列號。在一個實施方式中,這樣的時間戳可包括如下格式化的64位數(shù)字。時間戳的第63位可設(shè)定為零(例如,以避免關(guān)于時間戳是否是有符號的或無符號的數(shù)字的混淆)o第62 - 32位可包括自從時間的參考點(例如,1970年1月1日午夜,格林尼治標準時間,被很多版本的Unix和Linux使用的參考時間)以來經(jīng)過的秒數(shù)。第31 -22位可包括自從最后一秒以來經(jīng)過的微秒數(shù)。第21 -0位可包括實質(zhì)上隨機產(chǎn)生的位。在其它實施方式中,時間戳可在不同寬度或類型的字段的基礎(chǔ)上產(chǎn)生??蛇x地,鍵映射客戶可使用完全不同的基礎(chǔ)來產(chǎn)生序列號。假定序列號的分辨度高,則在由不同鍵映射客戶為相同的鍵映射項目144提供的不同序列號中間的沖突的機會可能低。然而,如果沖突將要出現(xiàn),則鍵映射實例140可配置成使用任何適當(dāng)?shù)囊恢碌募夹g(shù)來解決沖突。
在很多實施方式中,鍵映射實例140在將鍵映射到定位器中的抽象功能行為可能相對直接。例如,如上所述,由鍵映射實例140的一個實施方式支持的一組基本操作可包括配置成處理項目144的放置、獲取和刪除操作,該項目144反映鍵146和包括在記錄148內(nèi)的定位器之間的關(guān)系。然而,鍵映射功能在存儲設(shè)備系統(tǒng)內(nèi)的實現(xiàn)可提出很多挑戰(zhàn)。特別是,如果存儲服務(wù)系統(tǒng)要支持代表大量客戶的大量對象30 (例如,總數(shù)達1000千兆字節(jié)(TB )或1000 TB字節(jié)(EB )的存儲量或更多的成百萬或十億的對象30 ),則可能要求鍵映射的實現(xiàn)相應(yīng)地在容量上調(diào)節(jié)。然而,實現(xiàn)足夠的系統(tǒng)資源以在單個計算機系統(tǒng)內(nèi)表示包含在鍵映射內(nèi)的全部信息可能是不可能的或在經(jīng)濟上是不可行的。此外,對于鍵映射客戶請求的容錯能力和增加的總處理能力,可在存儲服務(wù)系統(tǒng)內(nèi)以分布式方式部署鍵映射數(shù)據(jù)的多個復(fù)本。然而,例如如果一個復(fù)本在另一個復(fù)本被訪問時被修改,則鍵映射數(shù)據(jù)的復(fù)本可導(dǎo)致鍵映射同步和一致性問題。
鍵映射功能的可縮放性可通過將層次級別引入鍵映射實例140內(nèi)來提高。在圖IIA-D中示出了這樣的層次的一個實施方式。在圖IIA中,示出了示例性鍵映射部署1100。如上所述,例如,關(guān)于圖3 ,在一些存儲服務(wù)系統(tǒng)實施方式中,多個鍵映射實例140可分布在整個系統(tǒng)中,例如在不同的數(shù)據(jù)中心300或區(qū)域310中。通常,鍵映射實例的集合可稱為部署。在一些實施方式中,存儲服務(wù)系統(tǒng)可包含單個鍵映射部署1100 ,單個鍵映射部署1100包括在系統(tǒng)內(nèi)提供的所有鍵映射實例140 ,雖然在其它實施方式中,系統(tǒng)可包括在鍵映射層次的其它級別下合并的多個鍵映射部署IIOO。
在所示實施方式中,部署IIOO包括鍵映射實例140a-c ,其中每個鍵映射實例都配置成例如根據(jù)如下面更詳細描述的實例同步協(xié)議來與其它鍵映射實例交換鍵映射信息。如所示,每個鍵映射實例140包括配置成彼此通信的很多主機400。例如,鍵映射實例140a包括主機400a-c ,鍵映射實例140b包括主機400d-g ,以及鍵映射實例140c包括主機400h-j。 一般而言,每個主機400可包括計算機系統(tǒng)和相關(guān)聯(lián)的軟件,并可包括例如處理器、系統(tǒng)存儲器、存儲設(shè)備、聯(lián)網(wǎng)接口或其它適當(dāng)?shù)慕M件的元件。例如,計算機系統(tǒng)或節(jié)點的一個實施方式可配置成用作下面結(jié)合圖29的描述所討論的主機400。
一般而言,對于存儲在存儲服務(wù)系統(tǒng)內(nèi)的所有對象30 ,每個鍵映射實例140可配置成維持鍵映射數(shù)據(jù)的完整表示,包括鍵映射項目144以及用于索引并管理鍵映射層次的任何其它數(shù)據(jù)。在鍵映射實例140內(nèi),鍵映射數(shù)據(jù)可分布在主機400中,以便各個主機400存儲鍵映射數(shù)據(jù)的某個(可能冗余的)部分。注意,雖然在圖11A中只示出幾個主機400 ,但是在其它實施方式中,每個鍵映射實例140可具有任何適當(dāng)數(shù)量的主機140。例
55如,在一些大范圍的實現(xiàn)中,許多的或者可能數(shù)百的主機140可以被包括在鍵映射實例140中。還可以設(shè)想,雖然在一些實施方式中,用于給定鍵映射實例140的主機400可局限于給定區(qū)域310或數(shù)據(jù)中心300內(nèi),但在其它實施方式中,這樣的主機400可分布在不同區(qū)域310或數(shù)據(jù)中心300中。進一步地,雖然主機400可配置成在一些實施方式中只實現(xiàn)與鍵映射有關(guān)的功能,但在其它實施方式中,主機400可實現(xiàn)與存儲服務(wù)系統(tǒng)的其它元件有關(guān)的功能。例如,在一個實施方式中,各個主機400還可配置為位存儲節(jié)點160 ,因而可存儲鍵映射數(shù)據(jù)以及對象數(shù)據(jù)。
圖11B更詳細地示出鍵映射實例140a的示例性實施方式。在所示實施方式中,包括在鍵映射實例140a內(nèi)的每個主機400a-c包括相應(yīng)的分區(qū)索引410a-c和任意數(shù)量的程序塊(brick ) 415。 一般而言,程序塊415可相應(yīng)于鍵映射實例140內(nèi)的中間鍵映射數(shù)據(jù)結(jié)構(gòu)。在一些實施方式中,如下面結(jié)合圖12的描述更詳細描述的,鍵映射數(shù)據(jù)可在程序塊415中間分成分區(qū),以及在鍵映射實例140內(nèi)分區(qū)的復(fù)制可出現(xiàn)在程序塊級。分區(qū)索引410可配置成為程序塊415編索引,以便于選擇一個或更多特定的程序塊415來在鍵映射操作期間進行處理。例如,分區(qū)索引410可配置為樹或另一適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。在一個實施方式中,分區(qū)鍵映射實例140內(nèi)的索引410以及較深層的索引級可配置為稱為分層的不平衡樹或特里結(jié)構(gòu)(trie )的特定類型的數(shù)據(jù)結(jié)構(gòu)的一部分,這在隨后的部分中被詳細描述。在所示實施方式中,鍵映射實例140進一步包括鍵映射協(xié)調(diào)器412。 一般而言,鍵映射協(xié)調(diào)器412可配置成實現(xiàn)鍵映射訪問管理、內(nèi)容管理和同步方法或協(xié)議,例如下面更詳細描述的那些方法或協(xié)議。注意,雖然示出鍵映射協(xié)調(diào)器412與主機400不同,但在一些實施方式中,它可實現(xiàn)為在一個或更多主機400內(nèi)的過程或模塊。還注意到,在一些實施方式中,分區(qū)索引410可在鍵映射協(xié)調(diào)器412內(nèi)而不是分開地在主機400內(nèi)實現(xiàn)。
圖11C示出包括程序塊415a-n的主機400a的示例性實施方式。如所示,每個程序塊415a-n包括相應(yīng)的塊索引420a-n以及任意數(shù)量的塊425。一般而言,塊425可相應(yīng)于鍵映射實例140內(nèi)的中間鍵映射數(shù)據(jù)結(jié)構(gòu),類似于程序塊415 ,但屬于程序塊的抽象級。類似于分區(qū)索引410 ,塊索引420可為配置成為程序塊415內(nèi)的塊425編索引的任何適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。 例如,塊索引420在一個實施方式內(nèi)可配置為分層不平衡樹的一部分。
如圖11D所示,在一個實施方式中,塊425可配置成包括任意數(shù)量的 各個鍵映射項目144a-n以及配置成為項目144編索引用于選擇的項目索引 430。如前所述,每個項目144a-n都可包括相應(yīng)的鍵146a-n以及相應(yīng)的紀 錄148a-n的指示。
在圖12中概述了在圖11A-D所示的實施方式的鍵映射實例140和鍵 映射項目144之間的等級層次中的關(guān)系。在包括多個鍵映射實例140的抽 象的部署層中,特定的鍵映射實例140可參考在抽象的實例層的分區(qū)索引 410。參考的分區(qū)索引410可識別相應(yīng)于特定項目144的一個或多個程序 塊415。例如,在所示實施方式中,所有的鍵映射項目都由相應(yīng)于不同的 程序塊415的三個不同分區(qū)復(fù)制。給定的程序塊又可通過塊索引420參考 特定的塊425 (未在圖12中示出),且參考的塊可通過項目索引430指向 特定的項目144。注意,雖然鍵映射可使用例如在圖12中所示的等級實現(xiàn) 來實現(xiàn),但是其它實現(xiàn)是可能的。泛泛地說,可以設(shè)想,鍵映射實例140 可使用將鍵144與紀錄148關(guān)聯(lián)的任何適當(dāng)?shù)募夹g(shù)來實現(xiàn)。例如,在一個 實施方式中,鍵映射實例140可使用傳統(tǒng)的數(shù)據(jù)庫或其它類型的結(jié)構(gòu)化索 引來實現(xiàn)。
注意在圖12的實施方式中的一些等級層次可配置成提供冗與例如, 在部署層內(nèi)鍵映射實例140的復(fù)制以及在分區(qū)層的程序塊415的復(fù)制), 而其它層可配置成提供可縮放性。例如,當(dāng)在鍵映射部署內(nèi)要被編索引的 項目144的數(shù)量增加時,在多個不同層中索引(分區(qū)索引410、塊索引420 和項目索引430 )的分布可通過允許索引的每個部分以易于管理的方式擴 大來便于數(shù)據(jù)結(jié)構(gòu)的縮放。注意,在其它實施方式中,可使用更多或更少 的等級層次以及冗余和不冗余層的不同組合。
如同對象30 —樣在鍵映射等級層次內(nèi)復(fù)制的使用可通過降低對各個 復(fù)本的損失的敏感度來提高容錯能力。然而,如果在修改出現(xiàn)時不試圖使 鍵映射數(shù)據(jù)的復(fù)本同步,則鍵映射的正確(例如,最近的)狀態(tài)可能變得 模棱兩可,這又可導(dǎo)致不可預(yù)知的或錯誤的系統(tǒng)操作。在一些實施方式中,鍵映射數(shù)據(jù)的復(fù)制部分可使用原子的或事務(wù)處理的語義(例如,兩階段提 交語義)以嚴格同步的方式被更新,其中不將更新向鍵映射客戶報告為完 整的,直到它們關(guān)于每個復(fù)本被持久和可驗證地完成。雖然原子更新語義 可最小化或甚至消除了使鍵映射數(shù)據(jù)維持在不一致狀態(tài)中的更新的可能 性,但是原子更新的性能可能在相當(dāng)大規(guī)模的分布式環(huán)境中相當(dāng)大地退 化。例如,如果鍵映射數(shù)據(jù)的復(fù)本被廣泛地分布,則從客戶的觀點來看復(fù) 本訪問等待時間可相當(dāng)大地變化,最慢的復(fù)本指示完成更新操作所需要的 總時間。而且,如果一個復(fù)被失敗,則嚴格的原子更新語義可使客戶停機, 直到故障被糾正,這可導(dǎo)致客戶不可接受的延遲。
可提供比原子協(xié)議更好的客戶性能的其它類型的同步協(xié)議可在鍵映射 等級內(nèi)使用。在一些實施方式中,可實現(xiàn)混合同步方法,其中一種類型的
同步協(xié)議可相對于特定鍵映射實例140內(nèi)的復(fù)本(例如,在分區(qū)層的復(fù)本, 如圖12所示)使用,而另一類型的協(xié)議可用來同步鍵映射部署內(nèi)的不同 鍵映射實例140。這樣的混合方法可允許尤其針對在鍵映射等級內(nèi)的不同 層的復(fù)本的使用動態(tài)來調(diào)整同步開銷。
例如,鍵映射數(shù)據(jù)訪問可展示參考的位置,以便對特定項目144的重 復(fù)請求指向比另一鍵映射實例140更可能的特定的鍵映射實例140(例如, 根據(jù)地理、網(wǎng)絡(luò)拓撲或另一適當(dāng)?shù)臉藴首罱咏谡埱蟮目蛻舻膶嵗?o也 就是說,情況可能是,給定鍵映射實例140內(nèi)的鍵映射數(shù)據(jù)的復(fù)本比在不 同的鍵映射實例140內(nèi)的相應(yīng)鍵映射數(shù)據(jù)可能更可能被給定的客戶訪問。 相應(yīng)地,在一些實施方式中,給定鍵映射實例140內(nèi)的復(fù)本可使用這種協(xié) 議被同步,即該協(xié)議可配置成比用于同步不同鍵映射實例140的協(xié)議更快 地收斂(例如,以傳播復(fù)本中間的變化)b
在一個實施方式中,給定鍵映射實例140內(nèi)的鍵映射數(shù)據(jù)復(fù)本的同步 可使用適當(dāng)版本的定額協(xié)議(quorum protocol )來執(zhí)行。 一般而言,根據(jù) 定額協(xié)議執(zhí)行的鍵映射數(shù)據(jù)的復(fù)本的更新或修改(包括鍵映射放置和刪除 操作)在該修改相對于至少定額數(shù)量的復(fù)本被持久地(例如,完全地和持 續(xù)地)執(zhí)行時可被認為相對于請求的客戶完成。類似地,當(dāng)相同的數(shù)據(jù)從 至少定額數(shù)量的復(fù)制本取時,根據(jù)定額協(xié)議執(zhí)行的鍵映射項目獲取操作可被認為完成。在一些實施方式中,定額數(shù)量可被定義為出現(xiàn)的復(fù)本的數(shù)量 的簡單大多數(shù),而在其它實施方式中,可使用任意程度超級大多數(shù)。注意, 如果不滿足定額要求,則定額協(xié)議操作可能不能完成。然而,如果復(fù)本的 定額數(shù)量小于復(fù)本的總數(shù)量,則給定的定額協(xié)議操作失敗的概率可能小于 原子協(xié)議操作的失敗概率,這有效地需要在復(fù)本中間的一致而不是定額。
注意,鍵映射實例140可使用除了這里描述的定額協(xié)議以外的定額協(xié)議。 例如,多階段提交協(xié)議例如Paxos或兩階段提交可用于實現(xiàn)定額類型的鍵 映射語義。
在正常的讀取操作和根據(jù)定額協(xié)議的更新操作的過程中,例如由于通 訊故障或在復(fù)本下層的資源的故障,更新不能傳播到每個復(fù)本是可能的。 在一個實施方式中,復(fù)本中間的不一致可在讀取操作期間被檢測和修復(fù)。 特別地,如果在鍵映射項目獲取操作期間在特定項目144的不同復(fù)本中間 檢測到不同的值,則可產(chǎn)生鍵映射放置操作以調(diào)整差異。在一個實施方式 中,用作放置操作的基礎(chǔ)的項目144可為具有在讀取的不同值中最近(例 如,數(shù)字式或按字母順序地最高的)關(guān)聯(lián)的時間戳的項目。因此,復(fù)本中 間的差異可"即時"被解決,例如,當(dāng)鍵映射項目獲取操作被處理時,而不 需要不同的過程或操作修復(fù)該差異。
在圖13-14中示出了關(guān)于配置成實現(xiàn)定額協(xié)議的鍵映射實例140的鍵 映射項目放置、獲取、刪除和列表操作的示例性實施方式的操作。在不同 實施方式中,這些方法可在鍵映射協(xié)調(diào)器過程內(nèi)實現(xiàn),這些過程可配置在 例如處于包括在鍵映射實例140內(nèi)的一個或更多主機400內(nèi),或作為鍵映 射實例140內(nèi)的分離的過程或系統(tǒng),例如圖11B所示的鍵映射協(xié)調(diào)器412。 首先參考圖13 ,在塊1300中,鍵映射項目放置操作可當(dāng)操作在鍵映射實 例140從協(xié)調(diào)器120或其它鍵映射客戶接收時開始。例如,響應(yīng)于特定對 象30的相應(yīng)對象實例存儲到特定的位存儲節(jié)點160 ,協(xié)調(diào)器120可產(chǎn)生鍵 映射項目放置操作,以便更新對象30的項目144來反映存儲的對象實例 的定位器。
鍵映射實例140的等級可接著被導(dǎo)航以識別相應(yīng)于鍵映射項目放置操 作的復(fù)本(塊1302 )b例如,對于圖12的實施方式,可查閱分區(qū)索引410以確定哪個程序塊415復(fù)制相應(yīng)于所關(guān)心的對象30的項目144。隨后,各 個放置操作可指向識別的復(fù)本(塊1304》對于每個放置操作,鍵映射實 例140的剩余等級可被導(dǎo)航以訪問和修改相應(yīng)的項目144 (塊1306 )b例 如,在給定程序塊415內(nèi),可遍歷塊索引420和項目索引430以便訪問特 定的項目144。 一旦項目144的給定復(fù)本被成功地寫入,則相應(yīng)的放置操 作就可指示成功(塊1308 )b注意,以項目144的相應(yīng)復(fù)本為目標的各個 放置操作可同時執(zhí)行。相應(yīng)地,塊1306-1308的多個實例被并行地示出。
可監(jiān)控各個復(fù)本放置操作的成功指示以確定復(fù)本的定額數(shù)量是否被成 功地更新(塊1310 >例如,在包括三個復(fù)本的實施方式中,用于完成鍵 映射項目放置操作的復(fù)本的定額數(shù)量可能是兩個。如果成功地更新了復(fù)本 的定額數(shù)量,則可給請求的客戶返回被請求的鍵映射項目放置操作已完成 的指示(塊1312 >如果沒有更新,則監(jiān)控可繼續(xù)。在一些實施方式中, 可實施超時,以便如果鍵映射項目放置操作沒有在處理開始之后的特定時 間段內(nèi)完成,則該操作可終止且錯誤指示可返回給請求的客戶。在其它實 施方式中,鍵映射項目放置操作可保持無限地掛起,直到它完成。
在一個實施方式中,鍵映射項目刪除操作可實現(xiàn)為放置操作的特殊情 況。在這樣的實施方式中,鍵映射項目144可包括配置為刪除標記或標志 字段的附加字段,且刪除操作可作為配置成將刪除字段設(shè)定到有效狀態(tài)的 放置操作來執(zhí)行(例如,通過將該字段設(shè)定為特定的值,例如'T')b具有宣 稱的刪除字段的那些項目144可在未來的鍵映射操作期間不予處理。在一 些這樣的實施方式中,分離的過程可配置成通過鍵映射實例144獨立地重 復(fù),以清除具有宣稱的刪除字段的那些項目144。在其它實施方式中,這 樣的項目144可無限地保持為歷史鍵映射行為的日志。
圖14中示出了鍵映射項目獲取操作的操作方法的一個實施方式。在塊 1400中,當(dāng)獲取操作在鍵映射實例140從協(xié)調(diào)器120或其它鍵映射客戶接 收時操作可開始。例如,響應(yīng)于來自存儲客戶50的對相應(yīng)于特定鍵的對 象數(shù)據(jù)的請求,節(jié)點揀取器130或協(xié)調(diào)器120可產(chǎn)生鍵映射項目獲取操作, 以便獲得相應(yīng)于特定鍵的定位器,使得位存儲節(jié)點160可被訪問以取回如 前面的部分中所述的對象數(shù)據(jù)。如同鍵映射項目放置操作一樣,鍵映射實例140的等級可接著被導(dǎo)航 以識別相應(yīng)于鍵映射項目獲取操作的復(fù)本(塊1402 )b隨后,各個獲取操 作可指向識別的復(fù)本(塊1404 )b對于每個獲取操作,鍵映射實例140的 剩余等級可被導(dǎo)航以訪問和取回相應(yīng)的項目144(塊1406 )b —旦項目144 的給定復(fù)本被成功地取回,則相應(yīng)的獲取操作就可指示成功(塊1408 注意,如同上述和在圖13中所示的各個放置操作一樣,以項目144的相 應(yīng)復(fù)本為目標的各個獲取操作可同時執(zhí)行,且塊1406—1408相應(yīng)地被并 行示出。
可監(jiān)控各個復(fù)本獲取操作的成功指示以確定定額數(shù)量的復(fù)本是否被成 功地讀取(塊1410 )b如果沒有,則監(jiān)控可繼續(xù),直到附加的復(fù)本被讀取。 至于上述鍵映射項目放置操作,在一些實施方式中,鍵映射項目獲取操作 可無限地等待下去,直到定額數(shù)量的復(fù)本被成功地讀取。在其它實施方式 中,鍵映射項目獲取操作可在一段時間之后暫停,其后錯誤指示和/或在此 時可得到的最佳數(shù)據(jù)(例如,具有最近的時間戳的復(fù)制數(shù)據(jù))可返回到請 求的客戶。
如果定額數(shù)量的復(fù)本被成功地讀取,則可確定取回的復(fù)本的內(nèi)容是否 不同(塊1412 )b例如,對照每個其它取回的復(fù)本可比較被請求的項目144 的每個復(fù)本的總體,或可只比較項目144的某些字段(例如,記錄148的 某些字段)o如果根據(jù)用于比較的標準,在取回的復(fù)本中間沒有差異,則 取回的數(shù)據(jù)可連同鍵映射項目獲取操作完成的指示一起返回到請求的客 戶(塊1414 )b
如果在復(fù)本中間存在差異,則可根據(jù)選擇標準選擇一個復(fù)本(塊 1416》例如,該標準可包括考慮每個復(fù)本的時間戳值,其中可選擇具有 最高時間戳值的復(fù)本。接著可使用選定復(fù)本的數(shù)據(jù)來開始鍵映射項目放置 操作(塊1418 >例如,可根據(jù)圖13執(zhí)行放置操作,如上所述。作為放置 操作的結(jié)果,可寫入具有選定復(fù)本的內(nèi)容的最初請求的項目144的定額數(shù) 量的復(fù)本,降低了未來的獲取操作將遇到復(fù)本中的差異的可能性。在放置 操作之后,選定復(fù)本的數(shù)據(jù)可連同返回到鍵映射項目獲取操作完成的指示 一起返回到請求的客戶(塊1414、在一些實施方式中,當(dāng)完成被開始以
61解決差異的放置操作時,在復(fù)本中間檢測到差異的情況下完成獲取操作是 可能發(fā)生的,而在其它實施方式中,可向請求的客戶指示獲取操作為完成 的,而與隨后的放置操作是否完成無關(guān)。
如上所討論的,在一些實施方式中,鍵映射API可支持配置成指示鍵 映射項目144的那些鍵146的鍵映射項目列表或計數(shù)操作,該鍵映射項目 144滿足某個標準例如搜索模式。在一個實施方式中,列表或/或計數(shù)操作 可實現(xiàn)為鍵映射項目獲取操作的特定情況,其中對滿足給定列表或計數(shù)操 作的標準的每個項目144執(zhí)行相應(yīng)的鍵映射項目獲取操作。然而,根據(jù)定 額協(xié)議實際上從多個復(fù)本取回項目數(shù)據(jù)(例如,記錄148 )的額外開銷可 能對鍵映射項目列表或計數(shù)操作是不必要的。因此,在一些實施方式中, 與定額協(xié)議有關(guān)的鍵映射項目獲取操作的那些步驟可從鍵映射項目列表 或計數(shù)操作省略。例如,不是識別給定項目的所有復(fù)本并為每個復(fù)本產(chǎn)生 單獨的獲取操作,如在塊1402-1404中的,對于列表或計數(shù)操作,單個復(fù) 本(例如,程序塊415 )可被任意選擇,且其相應(yīng)的等級被導(dǎo)航以便識別 滿足列表或計數(shù)操作標準的每個項目144。對于滿足該標準的最終的項目 144 ,相應(yīng)的鍵146或最終的項目144的計數(shù)可返回到請求的客戶,繞過 圖14的與定額有關(guān)的處理部分(例如,塊1410-1418 >
在一些實施方式中辟了用于為項目144編索引的不同數(shù)據(jù)結(jié)構(gòu)以外, 鍵映射實例140還可實現(xiàn)高速緩存。例如,高速緩存可允許指向頻繁使用 的項目144的鍵的鍵映射操作繞過索引數(shù)據(jù)結(jié)構(gòu)的導(dǎo)航,以便直接訪問相 應(yīng)的項目144 ,這可提高鍵映射項目獲取操作的效率。此外,高速緩存可 幫助阻止與普通的頻繁地訪問的鍵關(guān)聯(lián)的主機400變得被鍵映射請求業(yè)務(wù) 過載。例如,在鍵映射高速緩存分布在主機400中間的一個實施方式中, 鍵的副本可被高速緩存在與為該鍵維持索引數(shù)據(jù)結(jié)構(gòu)的主機400不同的主 機400上。通過鍵的高速緩存在主機400中間這樣的分布,鍵處理工作量 可更均勻地在主機400中分配。
在一個實施方式中,鍵映射高速緩存可配置成存儲鍵148的散列并被 鍵148的散列而不是鍵本身編索引。下面結(jié)合不平衡索引數(shù)據(jù)結(jié)構(gòu)的討論 更詳細討論的數(shù)據(jù)散列法可構(gòu)成用于以固定長度的數(shù)據(jù)結(jié)構(gòu)表示可變長度的數(shù)據(jù)例如鍵148的有效技術(shù),該數(shù)據(jù)結(jié)構(gòu)更容易在鍵映射高速緩存內(nèi) 管理。此外,各種散列算法可為可能最初不能均勻分布的數(shù)據(jù)(例如,具 有公有的相當(dāng)大部分的數(shù)據(jù)的一組鍵148 )產(chǎn)生均勻分布的散列值,這可 便于鍵映射高速緩存數(shù)據(jù)在主機400中間的均勻分布。在一些實施方式中, 項目144的內(nèi)容可連同相應(yīng)的鍵148的散列值一起存儲在鍵映射高速緩存 中。在其它實施方式中,項目144的指針或其它參考信息可被存儲,而不 是項目144本身的內(nèi)容。
一般而言,在包括鍵映射高速緩存的鍵映射實施方式中,鍵映射項目 放置和獲取操作可在對上面提供的描述有微小修改的情況下操作。在一個 實施方式中,鍵映射項目獲取操作可首先咨詢高速緩存以確定獲取操作是 否可根據(jù)駐留在高速緩存中的數(shù)據(jù)而被服務(wù)。獲取操作在使用用于讀取的 定額協(xié)議繼續(xù)進行之前可等待來自高速緩存的響應(yīng)達固定數(shù)量的時間。如 果高速緩存在定額協(xié)議讀取開始之后返回值,則從高速緩沖存儲器讀取的 該值可被處理且相應(yīng)的項目144返回,以及定額協(xié)議讀取可終止。如果沒 有值從高速緩沖存儲器返回,則從定額協(xié)議讀取操作讀取的項目144或指 向這樣的項目144的指針可連同相應(yīng)的鍵信息一起安裝在鍵映射高速緩存 中。
一般而言,在包括高速緩存的鍵映射實施方式中的鍵映射項目放置操 作可實質(zhì)上如上所述操作,除了鎖定或其它一致性協(xié)議可用于阻止多個放 置操作同時試圖修改相同的高速緩存項目以外。在一個實施方式中,鍵映 射項目放置操作可配置成在開始用于寫入的定額協(xié)議之前試圖鎖定相應(yīng) 于鍵148的高速緩存項目。當(dāng)接收到來自鎖定請求成功的高速緩存的響應(yīng) 時(例如,因為不存在對項目的其它鎖定,或因為在高速緩存中沒有相應(yīng) 的項目),定額協(xié)議可繼續(xù)下去。在放置操作根據(jù)定額協(xié)議結(jié)束之后,鎖 定可被釋放,且新項目數(shù)據(jù)可安裝在高速緩存中。
注意,在一些實施方式中,用于如剛剛描述的鍵映射放置和獲取操作 的定額協(xié)議可實現(xiàn)用于更新鍵映射項目狀態(tài)的強一致性模型。也就是說, 定額協(xié)議可保證一旦對特定鍵的放置操作被客戶確認為完成,則隨后的獲 取操作將返回最近放置的數(shù)據(jù),即使不是每個復(fù)本都在獲取操作被處理的時間被更新。
當(dāng)鍵映射操作例如放置和刪除操作指向特定的鍵映射實例140時,在 該特定的鍵映射實例140內(nèi)的項目144的狀態(tài)可隨著時間的過去而改變。 因此,在沒有調(diào)整它們的任何企圖時,在部署內(nèi)的不同鍵映射實例140可 能隨著時間的過去往往變得不同或不一致。如果只有一個存儲服務(wù)客戶50 參考給定的對象30 ,并且通過相同的鍵映射實例140這么做,則這樣的不 同可能沒有實際效果。然而,如果多個存儲服務(wù)客戶50通過不同的鍵映 射實例140參考相同的鍵,則這樣的不一致可使客戶50在時間的相同點 觀察到不同的鍵映射狀態(tài)和/或不同版本的對象數(shù)據(jù)。
如前所述,強一致性協(xié)議例如原子或定額協(xié)議可在更新復(fù)本時使用, 以有效地阻止客戶觀察到復(fù)本不一致性或根本阻止這樣的不一致性出現(xiàn)。 然而,在不同復(fù)本的訪問等待時間有時可相當(dāng)大地變化的分布式環(huán)境中, 強一致性協(xié)議可能有高性能成本。例如,對于原子或定額協(xié)議,操作完成 所需的時間可相應(yīng)地為相對于所有復(fù)本或定額數(shù)量的復(fù)本中最慢復(fù)本來 說完成操作所需的時間的函數(shù)。而且,在沒有強一致性協(xié)議時,復(fù)本不一 致性變得對客戶可見的概率(例如,存儲服務(wù)客戶50獲得失效的鍵映射 或?qū)ο髷?shù)據(jù)的概率)可能通常為在被訪問的復(fù)本還沒有反映更新時的時間 段期間客戶訪問復(fù)本的概率的函數(shù)。
對于很多對象30 ,這個后面的概率可能很低。例如,在一些實施方式 中,由存儲服務(wù)系統(tǒng)管理的大多數(shù)對象30可通過特定的鍵映射實例140 被單個客戶50訪問,在這種情況下從客戶的觀點來看不一致性可能是未 解決的。對于可被多個客戶50訪問的對象50 ,可觀察的不一致性仍然是 不可能的。例如,兩個鍵映射實例140對于特定的鍵在比方說10秒的時 期內(nèi)不一致。然而,如果在不一致的時期期間對于特定的鍵沒有訪問被執(zhí) 行(例如,如果相應(yīng)的對象30的訪問之間的持續(xù)時間大于不一致的時期), 或如果被執(zhí)行的訪問指向較新近更新的鍵映射實例140 (例如,如果最后 更新鍵的狀態(tài)的客戶50是通過相同的鍵映射實例140參考鍵的下一個客 戶),則不一致性可能對客戶50沒有可觀察的效果。因此,在一些實施方 式中,鍵映射實例140可使用力求將鍵映射實例140聚合到一致狀態(tài)的不嚴格的同步協(xié)議,但其可允許在任何給定的時間在鍵映射實例140中的某 種程度的不一致性。這樣的同步協(xié)議可為大多數(shù)客戶50提供更好的總性 能,更嚴格的同步對這些客戶50可能是不必要的。在一些實施方式中, 對共享的對象30需要鍵映射數(shù)據(jù)的更嚴格的訪問同步的客戶50可在他們 本身中間實現(xiàn)附加的協(xié)議,而不需要所有的客戶50承受更嚴格的同步的 負擔(dān)。例如,共享對特定的一組對象30的訪問的一組客戶50可使用信號 (semaphore )或其它分布式鎖定技術(shù)來協(xié)調(diào)他們對鍵映射數(shù)據(jù)的訪問。
在一些實施方式中,在鍵映射實例140中間的不嚴格的同步協(xié)議可包 括可獨立地實現(xiàn)同步過程的不同方面的不同同步任務(wù)的組合。圖15A-B示 出包括兩個不同的同步任務(wù)的不嚴格的同步協(xié)議的操作的方法的一個實 施方式更新傳播任務(wù)在圖15A中示出,而反熵或設(shè)定一致任務(wù)在圖15B 中示出。首先參考圖15A ,操作在塊1500中開始,其中可檢測到對一個鍵 映射實例140的更新。例如,鍵映射實例140可根據(jù)如上所述的定額協(xié)議 來接收和完成鍵映射項目放置或刪除操作。
處理鍵映射更新的鍵映射實例140可接著將更新操作轉(zhuǎn)發(fā)到在存儲服 務(wù)系統(tǒng)內(nèi)提供的每個其它鍵映射實例140 (塊1504 )b例如,如果鍵映射 實例140a處理鍵映射項目放置操作,則它可將包括變元、參數(shù)等的操作轉(zhuǎn) 發(fā)到鍵映射實例140b和140c。在一個實施方式中,可在沒有驗證或確認 的情況下執(zhí)行轉(zhuǎn)發(fā)。例如,處理鍵映射更新操作的鍵映射實例可使用"發(fā)后 不理(fire and forget )'來轉(zhuǎn)發(fā)操作,進行一次將操作轉(zhuǎn)發(fā)到每個其它鍵映 射實例的嘗試,而不試圖驗證轉(zhuǎn)發(fā)的操作是否在其目的地被接收或如果沒 有接收到則重新發(fā)送該操作。使用任何適當(dāng)?shù)霓D(zhuǎn)發(fā)策略可出現(xiàn)這樣的轉(zhuǎn) 發(fā),例如從發(fā)起的鍵映射實例140到多個鍵映射實例140的并行廣播、從 發(fā)起的鍵映射實例140到其它實例的順序轉(zhuǎn)發(fā)、基于樹的策略,等等。
接收轉(zhuǎn)發(fā)的操作的那些相關(guān)聯(lián)的主機400可在本地執(zhí)行更新操作(塊 1506 )b例如,如果主機400f成功地接收到從主機400a轉(zhuǎn)發(fā)的鍵映射項目 放置操作,則它可執(zhí)行該操作,好像它從任何鍵映射客戶接收操作一樣。 如果放置操作在主機400f上成功地完成,則鍵映射實例140a和140b可相 對于放置操作被同步。一般而言,可能期望在主機400中間轉(zhuǎn)發(fā)鍵映射更新操作在大部分時 間成功。因此,最小化在轉(zhuǎn)發(fā)這樣的操作中包含的開銷可減少在大多數(shù)情 況下在鍵映射實例140中間獲得同步所需的時間和/或帶寬。例如,從轉(zhuǎn)發(fā) 過程消除確認響應(yīng)或其它類型協(xié)議的驗證或信號交換可釋放通信帶寬用 于其它用途,例如以支持包含較大程度的同步業(yè)務(wù)的較大規(guī)模的鍵映射實 現(xiàn)。在很多情況下,通過鍵映射部署(其可通常相應(yīng)于給定鍵映射項目144 的復(fù)本的可能不一致性的窗口)傳播鍵映射更新所需的時間可限制為將操 作轉(zhuǎn)發(fā)到相關(guān)聯(lián)的主機400所需的通信等待時間以及主機400應(yīng)用轉(zhuǎn)發(fā)的 操作的處理等待時間。經(jīng)常地,此總時間可在秒或秒的分數(shù)的數(shù)量級。
然而在一些實施方式中,在主機400中間鍵映射更新操作的轉(zhuǎn)發(fā)可能 失敗。例如,通信鏈接失敗可能致使一個主機400不可從另一個主機400 到達,或可使轉(zhuǎn)發(fā)的操作在傳輸中丟失、截斷或否則損壞。可選地,例如 由于暫時的硬件或軟件問題,目標主機400可能不能接收或正確處理準確 轉(zhuǎn)發(fā)的更新操作。如在一個實施方式中的,如果在發(fā)起的主機400方面不 試圖驗證或確保轉(zhuǎn)發(fā)的鍵映射更新操作被目標主機400成功地接收并處 理,則個別操作的轉(zhuǎn)發(fā)失敗可能導(dǎo)致在鍵映射實例140中間相對于某些項 目的不一致性。
相應(yīng)地,在一個實施方式中,在鍵映射實例140中間不嚴格的同步協(xié) 議可包括上面提到的并在圖15B中示出的反熵或設(shè)定調(diào)整任務(wù)。該任務(wù)可 稱為"反熵"任務(wù),因為通常任務(wù)的操作可用來在不同的鍵映射實例140中 間減小差異并增加相似性,因而在鍵映射實例140中間降低可由更新傳播 的隨機或系統(tǒng)故障引入的總熵以正確同步實例。在所示實施方式中,操作 在塊1510中開始,其中發(fā)起的鍵映射實例140隨機選擇一起執(zhí)行特定分 區(qū)的調(diào)整的另一鍵映射實例140 ,該特定分區(qū)如上所述可包括駐留在不同 主機400上的很多復(fù)制的程序塊415。
發(fā)起的鍵映射實例140可接著與選定的鍵映射實例140交換關(guān)于在實 例內(nèi)的分區(qū)的信息(塊1512》例如,在兩個鍵映射實例140的特定主機 400可配置成交換在每個實例內(nèi)維持的分區(qū)索引410的拷貝,分區(qū)索引410 又可識別在每個實例內(nèi)定義的那些程序塊415。根據(jù)交換的分區(qū)信息,發(fā)起的鍵映射實例140可接著識別兩個實例中 分區(qū)之間的相應(yīng)性(塊1514 ),并可調(diào)整發(fā)起的鍵映射實例140內(nèi)的每個 分區(qū)與選定的鍵映射實例140內(nèi)的相應(yīng)分區(qū)(塊1516 )b例如,如前所述, 給定鍵映射實例140內(nèi)的每個分區(qū)可在很多程序塊415中復(fù)制。在一個實 施方式中,發(fā)起的鍵映射實例140可配置成指引分區(qū)內(nèi)的特定程序塊415 (其可稱為"引導(dǎo)程序塊")來與選定鍵映射實例140內(nèi)的相應(yīng)分區(qū)的相應(yīng)或 "對等"程序塊415通信,以便調(diào)整分區(qū)之間的差異。在一個實施方式中, 兩個程序塊415的調(diào)整可包含程序塊交換關(guān)于包括在每個程序塊415中的 鍵映射項目144內(nèi)的差異的信息并接著傳播每個鍵映射實例140內(nèi)的最當(dāng) 前的信息。例如,如果一個程序塊415在時間戳信息的基礎(chǔ)上確定其項目 144的版本比對等程序塊415的項目更近,則它可將項目數(shù)據(jù)傳送到對等 程序塊415。隨后,對等程序塊415可執(zhí)行鍵映射項目放置操作(例如, 根據(jù)如上詳細描述的定額協(xié)議)以更新項目144的拷貝。
一旦兩個鍵映射實例140之間的分區(qū)調(diào)整已經(jīng)完成,則操作就可從塊 1510繼續(xù),其中調(diào)整過程相對于另一隨機的鍵映射實例140再次開始。在 不同實施方式中,每個鍵映射實例140可配置成以預(yù)定的或動態(tài)地確定的 時間間隔執(zhí)行該過程。例如,調(diào)整可以每分鐘一次的靜態(tài)速率或以根據(jù)隨 機或其它統(tǒng)計概率分布確定的時間間隔出現(xiàn)。在一些實施方式中,調(diào)整可 在一定數(shù)量的鍵映射訪問出現(xiàn)之后或在對某些個別的、類型的或組的鍵映 射項目的訪問被檢測到之后執(zhí)行。
—般而言,圖15A-B所示的更新傳播和設(shè)定調(diào)整或反熵的方法可以互 補的方式操作。在大多數(shù)情況下,更新傳播可良好地同步部署內(nèi)的不同鍵 映射實例140。在由于更新傳播故障出現(xiàn)鍵映射不一致性的那些實例中, 反熵任務(wù)可通常操作來調(diào)整這樣的不一致性。注意,在一些實施方式中, 反熵任務(wù)的執(zhí)行可能不能保證兩個鍵映射實例140準確地全部同步。然而, 在一個實施方式中,可實現(xiàn)反熵任務(wù)以保證其操作不增加兩個鍵映射實例 140之間不一致性的程度。因此,通過重復(fù)的應(yīng)用,反熵任務(wù)可便于鍵映 射實例140的收斂。下面結(jié)合數(shù)據(jù)結(jié)構(gòu)的特定實施方式的描述提供了關(guān)于 反熵任務(wù)的一個特定實施方式的更多的細節(jié),鍵映射實例140可用該數(shù)據(jù)結(jié)構(gòu)實現(xiàn)。
如圖12所示和上面討論的,在一些實施方式中,除了其他鍵映射實例 140以外,存儲服務(wù)系統(tǒng)還可包括復(fù)制器鍵映射實例190。在一個實施方 式中,復(fù)制器鍵映射實例190可本質(zhì)上配置成與上述鍵映射實例140相同, 并可使用上面討論的協(xié)議參與鍵映射同步。然而,在這樣的實施方式中, 復(fù)制器鍵映射實例190可配置成為復(fù)制器180而不是協(xié)調(diào)器120或其它鍵 映射客戶服務(wù)。在一些情況下,從其它鍵映射實例140分離復(fù)制器鍵映射 實例190可在總體上提高鍵映射性能。例如,當(dāng)復(fù)制器180通過鍵映射重 復(fù)以檢查對象30的復(fù)本的狀況和數(shù)量時,復(fù)制器180可產(chǎn)生相當(dāng)數(shù)量的 鍵映射請求業(yè)務(wù)。如果與代表存儲服務(wù)客戶50的請求而產(chǎn)生的鍵映射業(yè) 務(wù)混合,則復(fù)制器鍵映射業(yè)務(wù)可能消極地影響響應(yīng)時間或與客戶50有關(guān) 的其它服務(wù)質(zhì)量測量。相反,配置復(fù)制器180來利用專用鍵映射實例190 可將內(nèi)部產(chǎn)生的鍵映射業(yè)務(wù)與客戶產(chǎn)生的業(yè)務(wù)分離。此外,這樣的分離可 更好地使每種類型的鍵映射實例的實現(xiàn)能夠根據(jù)其主要客戶的要求而進 行調(diào)整。例如,復(fù)制器鍵映射實例190的實現(xiàn)可配置成便于大量并行鍵映 射操作的處理,而不是最小化任何給定鍵映射操作的等待時間,同時鍵映 射實例140可被最佳化而用于服務(wù)質(zhì)量標準的不同組合。然而,注意,不 需要以這種方式分離鍵映射實例140 ,而在一些實施方式中,復(fù)制器180 可為鍵映射實例140的客戶而不是專用復(fù)制器鍵映射實例190的客戶。
在一個實施方式中,復(fù)制器鍵映射實例190還可配置成便于由客戶50 使用的存儲服務(wù)系統(tǒng)資源的賬目管理。特別地,復(fù)制器鍵映射實例190可 配置成以指示相應(yīng)項目的額外數(shù)據(jù)來增加由鍵映射實例140存儲的項目 144 ,所述相應(yīng)項目承擔(dān)為相應(yīng)的對象30記賬或其它的財務(wù)責(zé)任。例如, 在圖16所示的實施方式中,示出了復(fù)制器鍵映射項目194。在復(fù)制器鍵映 射實例190內(nèi),項目194可相對于鍵映射實例140的結(jié)構(gòu)和等級與項目144 相同地起作用。然而,在所示實施方式中,項目194包括附加字段,即, 存儲桶ID196。一般而言,存儲桶ID196可包括存儲桶20的標識符的指示, 該存儲桶20包括相應(yīng)于鍵146的對象30。這樣的標識符可響應(yīng)于來自客 戶50的請求,例如如上所述通過網(wǎng)絡(luò)服務(wù)接口 100或協(xié)調(diào)器120來定義,以產(chǎn)生其中存儲對象30的存儲桶20。注意,在其它實施方式中,賬目管 理信息不需要完全反映在復(fù)制器鍵映射實例190的項目內(nèi)。例如,在一個 實施方式中, 一些或所有鍵映射實例140的鍵映射項目144可配置成將存 儲桶ID196的指示存儲為例如記錄148或鍵146內(nèi)的附加字段。
如上討論的,對象30和存儲桶20之間的關(guān)系對鍵映射實例140的一 般操作可以是透明的。然而,假定這種關(guān)系一般是靜態(tài)的,則通過復(fù)制器
鍵映射項目194存儲桶20和對象30的明確關(guān)聯(lián)可便于客戶50的賬目管 理和記賬。例如,不是明確地向網(wǎng)絡(luò)服務(wù)接口 100詢問與每個對象30相 關(guān)聯(lián)的存儲桶20 ,賬目管理過程(其可包括在復(fù)制器180或另一模塊中, 或?qū)崿F(xiàn)為系統(tǒng)內(nèi)的不同模塊)可配置成根據(jù)存儲桶ID196來分類復(fù)制器鍵 映射項目194。當(dāng)完成這樣的分類時,與特定的存儲桶ID196相關(guān)聯(lián)的所 有鍵146將容易顯而易見。如在記錄148內(nèi)指示的相應(yīng)對象30的大小可 接著被合計以確定與存儲桶ID196相關(guān)聯(lián)的總存儲資源利用。此外,可考 慮對象30的其它特征,例如與特定對象30相關(guān)聯(lián)的存儲的類。接著根據(jù) 適當(dāng)?shù)挠涃~模型可貨幣化資源利用。
在不同實施方式中,代替或除了可便于各種內(nèi)部系統(tǒng)維護或賬目管理 任務(wù)的存儲桶ID 196之外,復(fù)制器鍵映射項目194還可包括其它字段。注 意,在復(fù)制器鍵映射實例190不同于其它鍵映射實例140的實施方式中, 這樣的附加字段的存儲成本可配置成復(fù)制器鍵映射實例190。然而,可以 設(shè)想,在缺少專用復(fù)制器鍵映射實例190的實施方式中,可增加鍵映射實 例140的項目144以包括這樣的附加字段。
分層的不平衡數(shù)據(jù)結(jié)構(gòu)
如前所述,在一些實施方式中,存儲服務(wù)系統(tǒng)可調(diào)整以支持非常大數(shù) 量的對象30 ,例如,大約十億或更多。因此,在這樣的實施方式中,每個 鍵映射實例140管理類似數(shù)量的項目144。在一些實施方式中,鍵映射實 例140可支持不同類型的分類和/或分組操作,例如在前面部分中討論的鍵 映射項目列表和計數(shù)操作。此外,為了支持一致的鍵映射操作,由每個鍵 映射實例140管理的很多鍵可能需要在其它鍵映射實例140中間同步,如 上所述。在很多情況下,由鍵映射實例140提供的鍵映射功能可能對總存儲服 務(wù)系統(tǒng)的操作是重要的。例如,如果客戶50選擇不執(zhí)行對于對象30的特 定實例的基于定位器的訪問,則鍵映射實例140可調(diào)解由客戶50執(zhí)行的 每個基于鍵的對象訪問請求。因此,如客戶50看到的存儲服務(wù)系統(tǒng)的性 能可直接依賴于鍵映射實例140訪問和處理鍵映射項目144的效率和速 度。鍵映射實例140的性能又可直接依賴于用于索引和組織項目144的數(shù) 據(jù)結(jié)構(gòu),例如用于在圖12的實施方式中實現(xiàn)分區(qū)索引410、塊索引420和 項目索引430的數(shù)據(jù)結(jié)構(gòu)。
設(shè)計索引數(shù)據(jù)結(jié)構(gòu)來支持大規(guī)模鍵映射實現(xiàn)中的分類和同步操作可能 提出相當(dāng)多的挑戰(zhàn)。需要索引大量數(shù)據(jù)例如數(shù)據(jù)庫的傳統(tǒng)應(yīng)用頻繁地使用 傳統(tǒng)的平衡數(shù)據(jù)結(jié)構(gòu),例如B-樹或其它類型的平衡樹。 一般而言,當(dāng)用于 索為給定數(shù)量的數(shù)據(jù)項例如鍵映射項目144吋,平衡數(shù)據(jù)結(jié)構(gòu)算法試圖根 據(jù)被管理的項的數(shù)量在平衡數(shù)據(jù)結(jié)構(gòu)中分布數(shù)據(jù)項。例如,給定索引的 10,000個鍵映射項目144 ,平衡數(shù)據(jù)結(jié)構(gòu)算法可試圖在項目144中間選擇 斷點,以便項目分成10組,每組大約1,000個項目。平衡的數(shù)據(jù)結(jié)構(gòu)算法 可在每組內(nèi)產(chǎn)生平衡等級的其它層次,例如將大約1,000個項目的每組再 分成五個子組,每個子組大約200個項目。由于數(shù)據(jù)項被添加到平衡數(shù)據(jù) 結(jié)構(gòu)和從平衡數(shù)據(jù)結(jié)構(gòu)刪除,因此數(shù)據(jù)結(jié)構(gòu)內(nèi)的組和/或子組可能變得不平 衡。因此,傳統(tǒng)的平衡數(shù)據(jù)結(jié)構(gòu)算法可通過在組中重新分配數(shù)據(jù)項而使數(shù) 據(jù)結(jié)構(gòu)重新平衡,產(chǎn)生額外的組和/或產(chǎn)生額外的等級層次。這樣的重新平 衡在數(shù)據(jù)項被添加或刪除時可"即時"發(fā)生,或可在一定數(shù)量的數(shù)據(jù)項修改 發(fā)生或自從最后的重新平衡以來經(jīng)過一定數(shù)量的時間之后出現(xiàn)。
通過以平衡的方式分離數(shù)據(jù)項,平衡數(shù)據(jù)結(jié)構(gòu)可為數(shù)據(jù)結(jié)構(gòu)內(nèi)的任何 給定的數(shù)據(jù)項提供可預(yù)測的、大致一致的訪問等待時間,這可能是在大量 數(shù)據(jù)項需要被索引的大規(guī)模實現(xiàn)中所希望的。然而,例如使用如上所述的 不嚴格的同步模型,有效地調(diào)整或同步分布的平衡數(shù)據(jù)結(jié)構(gòu)的實例可能特 別困難。特別地,當(dāng)平衡數(shù)據(jù)結(jié)構(gòu)的實例被單獨修改時,在每個實例內(nèi)將 數(shù)據(jù)項分成組的斷點可變得不同。作為結(jié)果,在不同的平衡數(shù)據(jù)結(jié)構(gòu)實例 的組或子組之間的數(shù)據(jù)項從屬關(guān)系方面可能沒有直接的相應(yīng)性。因而為了協(xié)調(diào)兩個這樣的實例,徹底比較兩個實例的整體可能是必要的,這在每個 實例索引大量數(shù)據(jù)項的情況下可能非常耗費時間。
作為根據(jù)數(shù)量在組中間分布數(shù)據(jù)項的平衡數(shù)據(jù)結(jié)構(gòu)的可選方案,在一
些實施方式中,鍵映射實例140的索引數(shù)據(jù)結(jié)構(gòu)可配置成實現(xiàn)不平衡數(shù)據(jù) 結(jié)構(gòu)(其也可稱為特里結(jié)構(gòu)),該不平衡數(shù)據(jù)結(jié)構(gòu)根據(jù)每個組內(nèi)數(shù)據(jù)項中
間的一些關(guān)系在組中間分布數(shù)據(jù)項。特別地,鍵映射實例140可配置成根 據(jù)相應(yīng)的鍵146的前綴索引項目144。作為例子,考慮存在具有相應(yīng)的對 情況不敏感的字母數(shù)字鍵146的600個鍵映射項目144的情況。這600個 項目的平衡索引可將項目分成三個不平衡組,每組有200個項目。相反, 在一個實施方式中,不平衡索引可定義三個字母數(shù)字組,以便以字符a到 l開始的那些項目分配到第一組,以字符m到x開始的那些項目分配到第 二組,以及以字符y或z或數(shù)字0到9開始的那些項目分配到第三組。
項目144可不均勻地分布在不平衡索引的組中。例如,在第一組中可 有300個項目,在第二組中250個項目,而在第三組中只有50個項目。 然而,注意,對于任何給定的項目144 ,在不平衡索引的特定組中的給定 項目144的從屬關(guān)系可為其相應(yīng)的鍵146的函數(shù),而不依賴于任何特定的 組內(nèi)的項目144的數(shù)量。因此,如果不平衡索引的兩個實例維持相同的組 定義,則每個組可獨立地同步,而不依賴于其它組。例如,在兩個實例之 間的a-l組可被同步而與m-x組和y-9組無關(guān)。相反,如上所述,相同的 項目144的集合的平衡索引的兩個實例的同步可能需要考慮在所有組中的 所有項目。
圖17示出了說明索引很多數(shù)據(jù)項的不平衡數(shù)據(jù)結(jié)構(gòu)的使用的一個例 子。在所示實施方式中,不平衡索引200 (或簡單地,索引200 )包括以 等級的方式布置來索引為以前綴"al"開始的很多字符串值的很多節(jié)點210。 例如,被索引的值可相應(yīng)于鍵映射實例140的不同項目144的鍵146。索 引200內(nèi)的每個節(jié)點210包括可以直接相應(yīng)于或可以不直接相應(yīng)于被索引 的數(shù)據(jù)項的相關(guān)的標記值。在所示實施方式中,被描繪為橢圓形的節(jié)點可 相應(yīng)于沒有相應(yīng)的數(shù)據(jù)項的索引200的內(nèi)部節(jié)點,而被描繪為矩形的節(jié)點 可相應(yīng)于被索引的數(shù)據(jù)項。因此,例如,節(jié)點210a相應(yīng)于字符串"al"并與索引200內(nèi)的很多其它節(jié)點有關(guān),但可能不存在相應(yīng)于字符串"al"的實際鍵 146。相反具有標記"Alicia"的節(jié)點210n可相應(yīng)于指定相同字符串的鍵146。 內(nèi)部和非內(nèi)部節(jié)點210之間的區(qū)別可以明確反映或可以不明確反映在節(jié)點 210的狀態(tài)中。
如下所述,在一些實施方式中,不平衡數(shù)據(jù)結(jié)構(gòu)可配置為其它索引的 索引。在一些這樣的實施方式中,在索引200的第一實例內(nèi)索引的數(shù)據(jù)項 可為另一索引200的根節(jié)點210 ,且第一索引200內(nèi)的相應(yīng)節(jié)點210可被 考慮為非內(nèi)部節(jié)點。也就是說,在一些實施方式中,給定索引200的非內(nèi) 部節(jié)點210可一般被定義為與數(shù)據(jù)值相關(guān)聯(lián)的任何節(jié)點210 ,例如另一索 引200的項目144或根節(jié)點,所述另一索引在給定索引200的外部。類似 地,給定索引200的內(nèi)部節(jié)點可只涉及給定索引200內(nèi)的其它節(jié)點210 , 并且可不具有與項目144或不同于給定索引200的其它索引200的任何關(guān) 聯(lián)。還注意到,如圖17所示,非內(nèi)部節(jié)點210不必為葉節(jié)點(例如,不 涉及在較低等級層次的其它節(jié)點的節(jié)點)b
在不同實施方式中,每個節(jié)點210可編碼各種信息。在圖18中示出了 說明可在節(jié)點內(nèi)編碼的不同數(shù)據(jù)字段的一般節(jié)點210的一個實施方式。在 所示實施方式中,節(jié)點210包括標記字段212、計數(shù)字段214、指紋字段 216以及一個或更多指針字段218。通常,標記212可配置成存儲相應(yīng)于 給定節(jié)點210的值,該值可被使用在遍歷或利用索引200的過程中,如下 面更詳細描述的。在一些實施方式中,標記212可唯一地識別索引200內(nèi) 的所有節(jié)點中的一個節(jié)點210。此外,在一些實施方式中,給定節(jié)點210 的標記212可包括作為前綴的索引200內(nèi)給定節(jié)點210的所有直接的先輩 的標記。也就是說,通過將某個值附加到該給定節(jié)點的直接的父節(jié)點210 的標記212 ,可確定任何給定節(jié)點210的標記212。例如,考慮圖17的具 有標記"alicia"的節(jié)點210n。節(jié)點210n的直接先輩節(jié)點2101 、 210k和210a 中的每個都具有形成節(jié)點210n的標記的適當(dāng)前綴的標iE(分別為"alic';"ali" 和"al")b
如圖17所示某些節(jié)點210指向在索引210的等級中進一步在下面的 一個或更多子或后繼節(jié)點210。在一個實施方式中,指針字段218可配置成將數(shù)據(jù)反射指針或參考從給定節(jié)點210存儲到另一節(jié)點210。例如,給 定的指針字段218可包括識別地址空間例如存儲器地址空間內(nèi)參考的節(jié)點 210的位置的地址。給定的指針字段218還可包括關(guān)于參考的節(jié)點210的 額外的標記信息。例如,如圖17所示,從給定節(jié)點210到后繼節(jié)點210 的每個弧線標注有后繼節(jié)點210的標記212的第一字符,該字符不同于由 給定節(jié)點210的標記212形成的前綴。在一個實施方式中,此附加的標記 信息可連同指向該參考的節(jié)點210的指針一起存儲在相應(yīng)的指針字段218 內(nèi)。例如,包括在節(jié)點210a中的指針字段218可分別包括對節(jié)點210b、 210g、 210j、 210k和210t的參考以及相應(yīng)的標記數(shù)據(jù)"a';"erfri"和"z'二
如上面關(guān)于圖12討論的,索引例如索引200可用于組織數(shù)據(jù)項例如鍵 映射項目144用于選擇。在一些實施方式中,非內(nèi)部節(jié)點210 (即,直接 映射到被索引的數(shù)據(jù)項的節(jié)點210 )的指針字段218還可包括指向相應(yīng)的 數(shù)據(jù)項,例如鍵映射項目144、塊425或程序塊415的指針。在一些實施 方式中,如下面更詳細描述的,不平衡索引例如索引200可分等級地實現(xiàn), 以便一個索引200的非內(nèi)部節(jié)點210可指向另一索引200。參考被索引的 數(shù)據(jù)項的指針字段218可通過任何適當(dāng)?shù)募夹g(shù)與參考另一節(jié)點210的指針 字段218區(qū)分開,例如通過對不同類型的指針字段218使用不同的編碼。 例如,如在前面的段落中描述的,在與到后繼節(jié)點210的弧線關(guān)聯(lián)的標記 信息被在指針字段218內(nèi)編碼的實施方式中,無標記用于將對被索引的數(shù) 據(jù)項的參考與對后繼節(jié)點210的參考相區(qū)分。
對于給定的節(jié)點210 ,計數(shù)字段214和指紋字段216可配置成反映在 給定節(jié)點210之下的節(jié)點210的狀態(tài)。在一個實施方式中,計數(shù)214可配 置成存儲作為給定節(jié)點210 (例如,分屠地在下面)的子孫的所有節(jié)點的 計數(shù)。例如,圖17的節(jié)點210k在索引200內(nèi)在其下有八個其它節(jié)點210。 相應(yīng)地,它的計數(shù)214可使用任何適當(dāng)?shù)木幋a或格式指示8的值。
在不同實施方式中,給定節(jié)點210的指紋字段216可配置成存儲指示 對分等級地在給定節(jié)點210下面的節(jié)點210的數(shù)據(jù)的某個部分執(zhí)行的散列 (例如,適當(dāng)?shù)纳⒘兴惴ǖ慕Y(jié)果)的值。例如,給定節(jié)點210的指紋字段 216可反映作為給定節(jié)點210的子孫的所有節(jié)點210的標記212的散列的和??蛇x地,指紋字段216可根據(jù)特定的、 一致的遍歷順序(例如,橫向 優(yōu)先或深度優(yōu)先的遍歷)來反映后繼節(jié)點210的標記212的串連的散列。 在其它實施方式中,除標記212外的節(jié)點210的其它字段可參與散列。在 一些實施方式中,與給定節(jié)點210相關(guān)聯(lián)的數(shù)據(jù)可反映在其自己的指紋字 段216內(nèi),而在其它實施方式中,給定節(jié)點210的指紋字段216可根據(jù)其 后繼節(jié)點而被嚴格地確定。為了描述的一致性,如在這里使用的,給定節(jié) 點210的指紋可表示作為給定節(jié)點20的至少一些后繼節(jié)點的函數(shù)的散列 值,同時給定節(jié)點210的散列可表示作為只與給定節(jié)點210關(guān)聯(lián)而不與其 子孫關(guān)聯(lián)的數(shù)據(jù)的函數(shù)的散列值。
一般而言,散列算法可配置成將可能任意長度的給定的源數(shù)據(jù)值映射 到較小的一般固定長度的散列值上,以便如果兩個散列值不同,則原始的 源數(shù)據(jù)值也必須在某個方面不同,其中兩個散列值從所述原始的源數(shù)據(jù)值 產(chǎn)生。當(dāng)散列算法一般不是一對一的函數(shù)時,兩個散列值之間的一致性不 必暗示原始的源數(shù)據(jù)值之間的一致性。然而,對于一些類別的散列算法, 原始的源數(shù)據(jù)值與給定的完全相同的散列值之間的一致性在統(tǒng)計上可能 處于可以計量的概率或信任度內(nèi),特別是對于表現(xiàn)某種冗余度的源數(shù)據(jù)值 來說。不同類型的散列算法也可稱為符號差、指紋或校驗和算法??梢栽O(shè) 想,可使用任何適當(dāng)類型的散列算法來產(chǎn)生將存儲在指紋字段216中的散 列值,作為非限制性的例子包括任何適當(dāng)版本的消息摘要5( MD5 )算法 或安全散列算法(SHA ),例如SHA-、SHA-256、 SHA-512等。
如在前面部分中描述的,可對鍵映射實例140執(zhí)行的基本操作可包括 放置和獲取操作,其可分別存儲和取回相應(yīng)于被指定為操作的參數(shù)的鍵的 項目144。在一些實施方式中,鍵映射實例140內(nèi)的不同索引可實現(xiàn)為不 平衡索引,例如索引200。
在大量數(shù)據(jù)項需要被編索引的場合,如可能在鍵映射實例140中共用 的,對所有數(shù)據(jù)項使用索引200的單個實例可能是不實際的。例如,單個 大的索引可能不完全適合于處理索引的系統(tǒng)的存儲器,這可消極地影響依 賴于索引的操作的性能。在一些實施方式中,使用分層的不平衡數(shù)據(jù)結(jié)構(gòu) 或分層的索引可實現(xiàn)大的索引。 一般而言,在分層的索引中,索引200的多個實例可被分等級地定義,其中在等級中較高處的實例可索引其它索引
200 ,以及在等級中較低處的實例可索引特定的項目144或其它項目(例 如,塊425或程序塊415 )b
在圖19中示出了分層索引的一個實施方式。在所示實施方式中,分層 索引220包括五個索引200a-e。索引200a包括節(jié)點210u-x ,其中每個都 是涉及索引200b-e之一的相應(yīng)根節(jié)點的非內(nèi)部節(jié)點。索引200b-e每個又 包括圖17示出的各個節(jié)點210a-t。在分層索引220的一些實施方式中,較 高層索引例如索引200a可配置成駐留在處理索引的系統(tǒng)的存儲器、高速緩 存或另一較高層的存儲器等級中,而較低層索引例如索引200b-e可主要駐 留在磁盤或這樣的存儲器等級的另一較低層中。在這樣的實施方式中,較 低層索引可例如使用分頁(paging )型技術(shù)按需要從存儲器等級的較層重 新定位到較高層。通過支持大量數(shù)據(jù)項的索引的等級分區(qū),分層索引220 可更高效和有效地使用系統(tǒng)資源。
例如,使用上述分頁技術(shù),分層的索引220的頻繁使用的索引200可 保持在存儲器等級的較高層,這些較高層一般訪問得較快但在容量上被限 制,而較不頻繁使用的索引200可存儲在較低的存儲器等級層次中,這些 較低層一般訪問得較慢但具有比較高層更大的存儲容量。可以設(shè)想,在一 些實施方式中,當(dāng)節(jié)點210添加到分層索引220內(nèi)的索引200時,各個索 引200可增長到超過目標大小(例如,在實現(xiàn)索引的系統(tǒng)上磁盤塊或存儲 器頁面的大小 >> 在這樣的實施方式中,如果給定索引200增長到超過目 標大小,則它可分裂成兩個或更多索引實例。在執(zhí)行這樣的分裂的過程中, 節(jié)點210可按需要添加到較高層索引200中,以構(gòu)成新索引實例。
響應(yīng)于鍵映射項目放置或獲取操作,可遍歷分層的或不分層的不平衡 索引以確定指定的鍵是否相應(yīng)于索引200內(nèi)的節(jié)點210。在圖20中示出了 不平衡索引遍歷方法的一個實施方式。在所示實施方式中,操作在塊2000 中開始,其中索引內(nèi)待搜索的鍵值(也稱為搜索值)例如通過相關(guān)的鍵映 射操作被指定。隨后,選擇索引的根節(jié)點210 (例如,沒有父節(jié)點的節(jié)點 210 )(塊2002 )b
對于選定的節(jié)點210 ,對照搜索值比較該節(jié)點的相應(yīng)標記值212以確定該標記值是與搜索值確切地匹配,是搜索值的前綴,還是兩者都不是(塊
2004 )b如果選定節(jié)點210的標記值212與搜索值匹配,則檢查選定的節(jié) 點210以確定它是內(nèi)部還是非內(nèi)部節(jié)點(塊2006-2008 )b例如,可檢查選 定節(jié)點210的指針218或其它內(nèi)容以確定節(jié)點是否參考由索引200索引的 數(shù)據(jù)值,例如項目144或索引200的另一實例。如果選定的節(jié)點210是內(nèi) 部節(jié)點,則可能出現(xiàn)索引失敗,如下所述(塊2022 )b
如果選定節(jié)點210是非內(nèi)部節(jié)點,則取回由選定節(jié)點210參考的數(shù)據(jù) 值(塊2010 )b在支持分層的不平衡數(shù)據(jù)結(jié)構(gòu)的實施方式中,其中一些數(shù) 據(jù)結(jié)構(gòu)實例可索引其它數(shù)據(jù)結(jié)構(gòu)實例,取回的數(shù)據(jù)值可相應(yīng)于項目144或 索引200的另一實例的根節(jié)點。如果取回的數(shù)據(jù)值是項目144 ,則索引遍 歷可結(jié)束,且取回的項目144可被根據(jù)發(fā)起遍歷的鍵映射操作來處理(塊 2012-2014 )b例如,如果發(fā)起的鍵映射操作是獲取操作,則取回的項目144 可被作為獲取操作的結(jié)果返回。如果發(fā)起的鍵映射操作是放置操作,則取 回的項目144可根據(jù)在放置操作中指定的參數(shù)來修改。
如果取回的數(shù)據(jù)值不相應(yīng)于項目144 ,則在所示實施方式中,它可相 應(yīng)于另一索引200的根節(jié)點210。相應(yīng)地諒根節(jié)點210可被選S(塊2012、 2016 ),且操作可從塊2004繼續(xù)進行,在塊2004中新選擇的索引200的 遍歷可繼續(xù)進行。因此,在一個實施方式中,圖20的方法的執(zhí)行可繼續(xù) 進行,直到相應(yīng)于搜索值的節(jié)點210的存在或沒有被最后確定。
返回到塊2006 ,如果選定節(jié)點210的標記212與搜索值不匹配,而是 搜索值的前綴,則可檢查選定節(jié)點210的子孫以確定是否任何子孫相應(yīng)于 搜索值(塊201S >>如果是這樣,則可選擇相應(yīng)的后繼節(jié)點210(塊2020 ), 且操作可從塊2004繼續(xù)進行。在一個實施方式中,可檢查選定節(jié)點210 的指針218以確定與特定指針218關(guān)聯(lián)的額外的標記信息在與選定節(jié)點 210的標記212結(jié)合時是否也形成搜索值的前綴(或完全匹配)b例如,參 考圖17 ,節(jié)點210a的標記"al"可被確定為"alibaba"的搜索值的前綴。此外, 可由相應(yīng)的指針218表示的、從節(jié)點210a到節(jié)點210k的弧線與額外的標 記信息"i"相關(guān)聯(lián)。該標記信息在附加到節(jié)點210a的標記"al"時形成值"ali", 該值"ali"也是搜索值的前綴。因此,可選擇節(jié)點210k用于進一步的遍歷。返回到塊2018 ,如果選定節(jié)點210的子孫不相應(yīng)于搜索值,則搜索值 在索引200內(nèi)沒有相應(yīng)的項目144 ,這也可稱為索引失敗(塊2022》該 索引失敗可接著根據(jù)發(fā)起索引遍歷的鍵映射操作的類型來處理(塊2024 )b 例如,鍵映射項目獲取操作可通過將表示失敗的適當(dāng)?shù)臓顟B(tài)指示返回到請 求的客戶來處理索引失敗。相反,鍵映射項目放置操作可通過將相應(yīng)于待 存儲的項目144的新節(jié)點210插入索引中作為選定節(jié)點210的子孫來處理 索引失敗。例如,新節(jié)點210可被創(chuàng)建,且其為待存儲的項目144適當(dāng)?shù)?設(shè)置不同的字段,以及指向新節(jié)點210的指針218可存儲在選定節(jié)點210 內(nèi)。注意,如果新節(jié)點210被添加到索引200或現(xiàn)有的節(jié)點210被修改, 則添加或修改的節(jié)點210的所有先輩節(jié)點210的計數(shù)字段214和指紋字段 216可被更新以反映該變化。
返回到塊2006 ,如果選定節(jié)點210的標記212與搜索值不匹配且不是 搜索值的前綴,則索引失敗也可能出現(xiàn),且處理可從塊2022繼續(xù)。在一 些實例中,這種情況可出現(xiàn)在選定節(jié)點210不是索引200的根節(jié)點時。相 應(yīng)地,在一個實施方式中,響應(yīng)于此失敗情況將新節(jié)點210添加到索引200 可包括創(chuàng)建具有標記212的新的根節(jié)點210 ,該標記212是搜索值和現(xiàn)有 根節(jié)點210 (在這種情況下為選定節(jié)點210 )的標記212的共同前綴。(在 一些實例中,新根節(jié)點210的共同前綴可為零,這可解釋為用于任何值的 有效前綴。)新的根節(jié)點210可接著配置為將選定節(jié)點210稱為子孫。如 果必要,額外的節(jié)點210可產(chǎn)生以相應(yīng)于搜索值并配置為新的根節(jié)點210 的額外子孫。
注意,在一些實施方式中,當(dāng)遍歷分層的不平衡索引200時,如果選 定節(jié)點210的標記212與搜索值不匹配且不是搜索值的前綴,則索引失敗 可能不立即出現(xiàn)。在一個實施方式中,如果遇到這種情況,則如果選定節(jié) 點210有父親,則選擇父節(jié)點210。如果父節(jié)點210是參考另一索引200 的非內(nèi)部節(jié)點,則可選擇參考索引200的根節(jié)點210 ,且處理可從塊2004 繼續(xù)。否則,可能出現(xiàn)索引失敗。(然而,注意,這種情況可能不出現(xiàn)在 沒有索引其它索引200的不分層的自含式索引200中。)作為這種情況的 例子,考慮圖19的分層索引,其中搜索值為"alice'纟索引200a的遍歷可繼續(xù)進行到具有標記"ali"的節(jié)點210w。因為節(jié)點210w具有包含相關(guān)聯(lián)的標 記信息"c"的指向子節(jié)點210x的指針,因此可選擇節(jié)點210x。然而,節(jié)點 210x的標記是"alicia",該標記與搜索值不匹配并且不是搜索值的前綴。因 此,遍歷可返回到節(jié)點210w (節(jié)點210x的父親),其可為參考索引200c 的非內(nèi)部節(jié)點。相應(yīng)地,遍歷可繼續(xù)到節(jié)點210k并最終到節(jié)點210m ,節(jié) 點210m具有與搜索值匹配的標記212。
在不同實施方式中,不平衡索引200或分層的不平衡索引220可用于 索引鍵映射實例140內(nèi)的鍵映射項目144。例如,分層的索引220可用于 實現(xiàn)一個或更多分區(qū)索引410、塊索引420或項目索引430 ,或可在鍵映 射實例140內(nèi)實現(xiàn)的任何其它層的索引。如上討論的,當(dāng)使用不嚴格的同 步協(xié)議時,不同的鍵映射實例140可在操作的一般過程中不同或不一致。 在一些實施方式中,鍵映射實例140可使用窮舉協(xié)議來被同步,該協(xié)議以 一致的順序(例如,深度優(yōu)先或橫向優(yōu)先的搜索順序)遍歷相應(yīng)的索引數(shù) 據(jù)結(jié)構(gòu)中的每個節(jié)點以識別在索引結(jié)構(gòu)或被索引的內(nèi)容中的差異。然而, 上述不平衡索引的各種特征,例如根據(jù)鍵信息而不是鍵的數(shù)量的數(shù)據(jù)的分 布以及在索引數(shù)據(jù)結(jié)構(gòu)內(nèi)包含計數(shù)和/或累積散列信息可便于計算上更有 效的同步算法的實現(xiàn)。
前面描述的反熵設(shè)定調(diào)整協(xié)議的很多可能的版本可設(shè)想成用在由鍵映 射實例140實現(xiàn)的不平衡的、可能分層的索引上。接著是這樣的協(xié)議的一 個實施方式的描述,雖然應(yīng)理解,對一般協(xié)議所設(shè)想的變形可展示不同的 實現(xiàn)優(yōu)先級,例如在選擇最佳化某些情況而優(yōu)先于其它情況或使用一種或 另一特定類型或類的算法來執(zhí)行協(xié)議的一般步驟中。因此,意圖是所述實 施方式被視為說明性的而不是限制性的。
在一個實施方式中,配置成調(diào)整不平衡索引200或分層的不平衡索引 220的不同實例的反熵協(xié)議可包括在不同類型的消息的實例之間的交換。 反熵協(xié)議的一個實施方式可基于的示例性的一組消息可包括DATA消息、 REQUEST消息、HASH消息、FILTER消息和FINGERPRINT消息。下面 描述了這些消息中的每個的相應(yīng)的實施方式的一般功能,接著是消息可如 何用于實現(xiàn)反熵協(xié)議的實施方式的討論。在下列討論中,可參考鍵映射實例140中間數(shù)據(jù)的交換,雖然應(yīng)理解,這樣的鍵映射實例可實現(xiàn)包括上述 特征中的任何一個的不平衡索引200或分層的不平衡索引220的一個或更 多實例。
DATA消息可用于將關(guān)于一個或更多索引節(jié)點210的數(shù)據(jù)從一個鍵映 射實例140傳送到另一個。在一個實施方式中,DATA消息可配置成只傳 送與給定節(jié)點210關(guān)聯(lián)的標記212 ,而在其它實施方式中,DATA消息可 傳送與給定節(jié)點210關(guān)聯(lián)的其它字段。在一些實施方式中,如果給定節(jié)點 210是非內(nèi)部節(jié)點,則DATA消息還可包括與給定節(jié)點210關(guān)聯(lián)的數(shù)據(jù)項 的所有或一些部分(例如,項目144或關(guān)于另一索引200的根節(jié)點210的
j曰 ,、 )b
HASH消息可用于將關(guān)于一個或更多索引節(jié)點210的信息從一個鍵映 射實例140傳送到另一個,而沒有明確傳送給定節(jié)點210的字段或與給定 節(jié)點210關(guān)聯(lián)的數(shù)據(jù)項。在一個實施方式中,HASH消息可配置成傳送與 給定節(jié)點210關(guān)聯(lián)的標記212以及根據(jù)適當(dāng)?shù)纳⒘兴惴ㄓ嬎愕慕o定節(jié)點 210的散列。在一些實施方式中,給定節(jié)點210的散列還可反映與給定節(jié) 點210關(guān)聯(lián)的數(shù)據(jù)項(例如,鍵映射項目144),但可排除給定節(jié)點210的 任何子孫。
REQUEST消息可用于傳送對與一個或更多節(jié)點210關(guān)聯(lián)的消息的請 求。在一個實施方式中,REQUEST消息可配置成傳送一個或更多標記前 綴值。在響應(yīng)中,請求的實例可能期望接收關(guān)于具有標記212的那些節(jié)點 210的信息,對該標記212來說,傳送的標記前綴值實際上是前綴。對于 給定的節(jié)點210 ,接收的信息可包括給定節(jié)點210的相應(yīng)字段的內(nèi)容和/或 相應(yīng)于給定節(jié)點210的數(shù)據(jù)項(例如,鍵映射項目144 )b在一些實施方式 中,REQUEST消息可支持被請求的標記前綴值的進一步的限定,例如通 過指定由特定的標記前綴值界定的結(jié)果空間內(nèi)的值或值的范圍應(yīng)從為該 標記前綴值返回的結(jié)果中排除。例如,REQUEST消息可指定關(guān)于與標記 前綴值"alex"匹配的所有節(jié)點210的信息應(yīng)被返回,除了與前綴"alexe"或 "alexj"匹配那些節(jié)點210之外。
剛剛描述的消息可通常在各個節(jié)點210的粒度層(level of granularity )操作。然而,如果鍵映射實例140之間的差異通常很小(例如,限制到大 多數(shù)節(jié)點210)則它可促進同步過程以立刻快速確定多個節(jié)點210的狀態(tài)。 在一個實施方式中,F(xiàn)INGERPRINT和FILTER消息可配置成傳遞關(guān)于節(jié) 點210的集合的消息。特別地,在一個實施方式中,F(xiàn)INGERPRINT消息 可配置成將節(jié)點210的指紋字段216連同其標記212 —起從一個鍵映射實 例140傳送到另一個。如上所述,給定節(jié)點210的指紋字段216可配置成 存儲被確定為給定節(jié)點210的子孫的函數(shù)的散列值。因此,如果在不同鍵 映射實例140中相應(yīng)節(jié)點210的指紋字段216相等,則相應(yīng)節(jié)點210的子 孫的布置和內(nèi)容相同可能是非??赡艿?取決于所使用的散列算法的特 征 >> 也就是說,從相應(yīng)的節(jié)點210傳下來的鍵映射實例140的部分被同 步是非常可能的。
指紋的使用可允許關(guān)于包括相當(dāng)數(shù)量的節(jié)點210的鍵映射實例140的 部分是否被同步的快速確定。然而,指示相應(yīng)的部分沒有同步的指紋通常 可能不提供關(guān)于這些部分如何不同的進一步的細節(jié)。在一個實施方式中, FILTER消息可配置成將編碼相應(yīng)于特定前綴值的很多節(jié)點210的過濾值 從第一鍵映射實例140傳送到第二鍵映射實例140。第二實例可接著使用 接收到的過濾值來檢測其自己的相應(yīng)于該前綴值的節(jié)點210 ,以確定第二 實例的哪些節(jié)點不存在于第一實例中,如果有的話。
在一個實施方式中,由FILTER消息傳送的過濾值可為Bloom過濾器, 雖然可以設(shè)想,可使用用于可恢復(fù)地將一組數(shù)據(jù)值編碼成過濾值的任何適 當(dāng)?shù)倪^濾技術(shù)。 一般而言, 一組值(例如,節(jié)點210 )的Bloom過濾器可 相應(yīng)于M位二進制值,其中M為整數(shù)。在任何值編碼到Bloom過濾器中 之前,它的初始值可為零。也就是說,過濾器的所有位可處于復(fù)位無效的 狀態(tài)中??赏ㄟ^借助于一組k個獨立的散列函數(shù)中的每個來傳遞將在過濾 器內(nèi)被編碼的每個值可填充(populate )Blo謹過濾器,其中每個函數(shù)將待 編碼的值映射到范圍
內(nèi)的值上。對于k個最終的散列值中的每個, Bloom過濾器內(nèi)的相應(yīng)位被置位有效(例如,設(shè)定為邏輯1值)b根據(jù)將在 Bloom過濾器內(nèi)編碼的值的數(shù)量和類型以及期望的假陽性(false positives ) 的概率,M和k可選擇為設(shè)計參數(shù)(下面討論)b例如,在使用八個散列函數(shù)的1,024位Bloom過濾器中,每個散列函數(shù)可產(chǎn)生將過濾器的1,024 位的特定一位指定為置位有效的相應(yīng)的IO位散列值。
為了測試給定的值是否被編碼到Bloom過濾器中,該值被傳遞通過用 于編碼過濾器的同一組k個獨立的散列函數(shù),且最終的過濾值的k個位被 檢查。如果最終的過濾值的k個位中的任何一個不是被置位有效的,則測 試值確定地不能在過濾器內(nèi)編碼。也就是說,測試值可能最初在過濾器內(nèi) 被編碼,或它可為假陽性的。在一些實施方式中,在產(chǎn)生Bloom過濾器的 每個獨立的時機,可用隨機或自動產(chǎn)生的鹽值(salt value )或種子值(例 如,作為當(dāng)前系統(tǒng)時間的函數(shù))確定散列函數(shù)的參數(shù),以減小當(dāng)給定的一 組值被相繼地編碼到過濾器中時將產(chǎn)生相同的假陽性值的概率。
因此,例如,第一鍵映射實例140可將相應(yīng)于前綴P的一組節(jié)點(A , B , C , D , E)編碼到Bloom過濾器中,并可使用FILTER消息將過濾器傳 送到第二鍵映射實例140。在第二鍵映射實例140中,一組節(jié)點(A ,B ,X , Y , Z)可相應(yīng)于前綴P。第二鍵映射實例140可對照過濾器測試每個節(jié)點, 并可確定節(jié)點A、 B和X可在過濾器中編碼,而節(jié)點Y和Z確定地不能在 過濾器中編碼。因此,第二鍵映射實例140可正確地斷定節(jié)點Y和Z不存 在于第一鍵映射實例140中,并可斷定節(jié)點A、 B和X可能存在于第一鍵 映射實例140中,其中X是假陽性。作為結(jié)果,第二鍵映射實例140可采 取行動來將關(guān)于節(jié)點Y和Z的信息傳送到第一鍵映射實例140。
可以設(shè)想,DATA、 HASH、 REQUEST、 FINGERPRINT和FILTER消 息可根據(jù)任何適當(dāng)?shù)膮f(xié)議或API來實現(xiàn)和傳送,并可包括各種類型的字段 或參數(shù),這些字段或參數(shù)配置成傳送上述信息以及解碼并正確地處理消息 所必需的任何額外的信息。在一個實施方式中,消息可包括額外的參數(shù), 所述額外的參數(shù)指示對于包括在該消息中的給定標記值來說,發(fā)送鍵映射 實例是具有相應(yīng)的數(shù)據(jù)還是需要相應(yīng)的數(shù)據(jù),其分別稱為獲取數(shù)據(jù)和需要
數(shù)據(jù)參數(shù)。例如,如果鍵映射實例140為具有標記"al"和某個數(shù)量的子孫的 節(jié)點210發(fā)送FINGERPRINT消息,則實例可包括指示該實例在由"al"界定 的前綴空間內(nèi)有一些節(jié)點210的獲取數(shù)據(jù)參數(shù)。實例還可包括需要數(shù)據(jù)參 數(shù),例如如果它的由"al"界定的前綴空間的拷貝被認為是不完整的情況下。在一些實施方式中,獲取數(shù)據(jù)參數(shù)可能在DATA和HASH消息中是隱含的, 而需要數(shù)據(jù)參數(shù)可能在FILTER和REQUEST消息中是隱含的屋然DATA 或HASH消息可明確指定需要數(shù)據(jù)參數(shù),而FILTER或REQUEST消息可 明確指定獲取數(shù)據(jù)參數(shù)。在一個實施方式中,可能需要FILTER消息來指 定需要數(shù)據(jù)或獲取數(shù)據(jù)參數(shù)中的至少一個。
在一個實施方式中,由兩個鍵映射實例140管理的反熵協(xié)議可在兩個 實例建立彼此的聯(lián)系時開始。每個實例可假定它具有某些數(shù)據(jù)和缺少某些 數(shù)據(jù)。相應(yīng)地,每個實例可向其它實例發(fā)送FUNGERPRINT消息,其指定 實例的根節(jié)點210的標記212和指紋216并包括獲取數(shù)據(jù)和需要數(shù)據(jù)參數(shù)。 例如,在使用分層的不平衡索引220的鍵映射實例140的實施方式中,根 節(jié)點210可相應(yīng)于在索引200內(nèi)沒有父節(jié)點的節(jié)點210 ,該索引200沒有 父索引或上級索引200。
在圖21中示出了處理FINGERPRINT消息的方法的一個實施方式。在 所示實施方式中,操作在塊2100中開始,其中FINGERPRINT消息從消 息發(fā)送器接收。例如,第一鍵映射實例140可將包括標記值、指紋和一個 或更多獲取數(shù)據(jù)或需要數(shù)據(jù)參數(shù)的FINGERPRINT消息傳送到第二鍵映射 實例140。在收到FUNGERPRINT消息之后,接著遍歷消息接收器的索引 以識別這種節(jié)點210是否存在,即對節(jié)點210來說接收的標記值是相應(yīng)的 標記字段212的前綴(或確切地匹配)(塊2102 )b例如,使用圖20的方 法或其適當(dāng)?shù)淖冃螐母?jié)點210開始可遍歷鍵映射實例140的索引。
如果接收的標記值不是任何節(jié)點210的標記字段212的前綴或確切匹 配,則相應(yīng)于由FINGERPRINT消息參考的節(jié)點的節(jié)點210可能不存在于 消息接收器。相應(yīng)地,通過將REQUEST消息傳送到消息發(fā)送器,指定包 括在最初接收的FINGERPRINT消息內(nèi)的標記值,可響應(yīng)接收靜塊2104 )b 在一個實施方式中,REQUEST消息的處理可繼續(xù)進行,如下面更詳細描 述的。在一些實施方式中,只有當(dāng)接收的REQUEST消息指示獲取數(shù)據(jù)參 數(shù)時才可傳送REQUEST消息。
注意,在一些實施方式中,在反熵協(xié)議的操作期間交換的各個消息的 完成可能不依賴于額外的消息是否響應(yīng)于給定的消息成功地完成而產(chǎn)生的。也就是說,在一些實施方式中,各個消息的處理可相對于其它消息以 無狀態(tài)和異步的方式出現(xiàn)。在這里描述的示例性實施方式的討論中,采用
此無狀態(tài)的異步模型。因此,在REQUEST消息產(chǎn)生之后,F(xiàn)INGERPRINT 消息本身的處理可被考慮為完成的(塊2106 )b然而,該模型對反熵協(xié)議 的一般操作不是必須的,且可以設(shè)想,在可選的實施方式中,任何給定的 消息可阻止、等待或另外地維持與從屬地或響應(yīng)于給定消息而產(chǎn)生的消息 的同步。例如,在一些實施方式中可使用顯式信號交換、確認、重試或其 它類型的協(xié)議,以將一個消息的完成的狀態(tài)傳送到另一相關(guān)的消息。
如果接收的標記值確實相應(yīng)于在消息接收器的特定節(jié)點210的標記 212的前綴或匹配,則可對照特定節(jié)點210的指紋字段216比較接收的指 紋值以確定兩個指紋是否匹配(塊2108 )b如果是這樣,則消息發(fā)送器和 消息接收器相對于接收的標記值同步是非??赡艿?例如,服從使用的指 紋算法產(chǎn)生沖突的或具有相同的值的兩個指紋的的概率,盡管指紋是從不 同的數(shù)據(jù)產(chǎn)生)。例如,使接收的標記值作為前綴的任何節(jié)點210在 FINGERPRINT消息被發(fā)送的鍵映射實例140和該消息被接收的鍵映射實 例140內(nèi)處于相同的狀態(tài)是非??赡艿摹R虼?,沒有額外的消息可響應(yīng)于 FINGERPRINT消息而產(chǎn)生,且消息可被考慮為完成的(塊2106 )o
如果指紋不匹配,則消息發(fā)送器和消息接收器相對于接收的標記值不 同步,可能需要額外的工作來使發(fā)送器和接收器一起在狀態(tài)上較接近。如 上所述,F(xiàn)ILTER消息在允許發(fā)送器將關(guān)于某些節(jié)點210的特定信息傳遞 到接收器方面可能是有用的。然而,在一些實施方式中,可編碼到FILTER 消息中同時保持合理的假陽性率的節(jié)點210的數(shù)量可被限制到某個閾值。 如果后繼節(jié)點210的數(shù)量超過在消息接收器與接收的標記值匹配的節(jié)點 210的此閾值,則在發(fā)送FILTER消息之前執(zhí)行額外的FINGERPRINT消 息處理可能是更有效的。
因此,在所示實施方式中,如果指紋不匹配,則可檢查在消息接收器 的特定節(jié)點210的計數(shù)字段以確定它是否超過用于FILTER消息處理的閾 值(塊2110 )b如果是這樣,則消息接收器可配置成根據(jù)特定節(jié)點210的 子節(jié)點細分其相應(yīng)于接收的標記值的索引范圍的部分,其中對于所述特定節(jié)點210 ,接收的標記值是前綴(塊2112 )b對于每個子節(jié)點210 ,消息接 收器可配置成將相應(yīng)的FINGERPRINT消息發(fā)送回原始的消息發(fā)送器,指 定相應(yīng)的子節(jié)點210的標記212和指紋字段216(塊2114 )b此外,如果在 相應(yīng)于接收的標記值的索引范圍的部分內(nèi)有間隔,例如由特定節(jié)點210的 子節(jié)點所示的,則消息接收器可配置成為為相應(yīng)于該間隔的標記值發(fā)送一 個或更多REQUEST消息(塊2116 )b接收的FINGERPRINT消息的處理 可接著被考慮為完成的(塊2118 )b在一個實施方式中,除了上面的行動 以外,如果接收的標記前綴值是特定節(jié)點210的準確匹配,則相應(yīng)于特定 節(jié)點210的HASH消息可返回到消息發(fā)送器。
例如,如圖17所示,消息接收器的索引200的特定節(jié)點210a可具有 標記"ar以及具有相應(yīng)的標記"alanralexralfrecT'ali"和"alz"的子節(jié)點。這暗 示著消息接收器具有關(guān)于以"alan"和"alex"開始的節(jié)點210的但是不關(guān)于可 能以"alb'ralc"或"ald"開始的節(jié)點210的一些信息。相應(yīng)地,消息接收器可 為節(jié)點210a的每個子節(jié)點傳送FINGERPRINT消息,以及用于這些子節(jié)點 的標記中間的間隔的REQUEST消息。在支持負的REQUEST語法的實施 方式中,消息接收器可傳送用于除了相應(yīng)于特定節(jié)點的子節(jié)點的那些標記 以外的標記傳送REQUEST消息。例如,消息接收器可傳送用于除了以 "alan "、" alex "、" alfred "、" ali"和"alz"為前綴的那些標記以外的標記傳送 REQUEST消息。
如果特定節(jié)點210的計數(shù)值不超過用于FILTER消息處理的閾值,則 如果接收的FINGERPRINT消息包括獲取數(shù)據(jù)參數(shù),則消息發(fā)送器可具有 關(guān)于不存在于消息接收器中的節(jié)點210的特定信息。相應(yīng)地,消息接收器 可配置成發(fā)送FILTER消息,其中FILTER消息將作為特定節(jié)點210的子 孫的每個節(jié)點210編碼到過濾器(例如,如上所述的Bloom過濾器)中(塊 2120-2122 )b例如,參考圖17 ,如果特定的節(jié)點相應(yīng)于節(jié)點2101 ,則通過 FILTER消息可產(chǎn)生并返回編碼每個節(jié)點210m-q的Bloom過濾器。在所示 實施方式中,如果獲取數(shù)據(jù)參數(shù)不包括在原始的FINGERPRINT消息中, 則代替FILTER消息,對于特定節(jié)點210的每個子節(jié)點,相應(yīng)的 FINGERPRINT消息可產(chǎn)生并返回到消息發(fā)送器。這些FINGERPRINT消息可包括獲取數(shù)據(jù)參數(shù)。在這種情況下,在FILTER或FINGERPRINT消 息產(chǎn)生之后,可完成接收的FINGERPRINT消息的處理(塊2118 )b
在圖22中示出了處理FILTER消息的方法的一個實施方式。在所示實 施方式中操作在塊2200開始其中例如響應(yīng)于如上所述的FINGERPRINT 消息,包括標記值和過濾值的FILTER消息被從消息發(fā)送器接收。 一旦接 收到FILTER消息,就遍歷消息接收器的索引以識別相應(yīng)于接收的標記值 的特定節(jié)點210 (例如,對該特定節(jié)點來說接收的標記值是前綴或匹配), 以類似于上面關(guān)于圖21描述的方式(塊2202 )b在一些實施方式中,如果 FILTER消息響應(yīng)于另一消息而產(chǎn)生,則通常存在相應(yīng)于接收的標記值的 節(jié)點210。
消息接收器可接著對照FILTER消息中提供的過濾值檢測特定節(jié)點 210的每個子孫,以識別不以過濾值編碼的那些節(jié)點210 ,如果有的話(塊 2204 >對于在消息接收器的沒有以過濾值編碼的每個節(jié)點210 ,相應(yīng)的 DATA消息可返回到消息發(fā)送器(塊2206 )b FILTER消息的處理可接著被 考慮為完成的(塊2208 )b如上所述,根據(jù)用于FILTER消息的過濾算法 的類型和配置,可能出現(xiàn)假陽性。也就是說,消息接收器可能錯誤地斷定 其節(jié)點210中的某些被以過濾值編碼,因而在消息發(fā)送器以相同的狀態(tài)出 現(xiàn),然而實際上它們并不是這樣。因此,反熵協(xié)議的單次循環(huán)不能使得兩 個鍵映射實例140相對于每個節(jié)點210變得同步是可能的。然而,可能期 望,在很多實施方式中,反熵協(xié)議的單次循環(huán)不能使實例變得更加不同, 且可期望協(xié)議在某個數(shù)量的循環(huán)內(nèi)的重復(fù)應(yīng)用以某種程度的概率收斂,取 決于實例不同的程度和所使用的過濾算法的特征(例如,給定用于過濾器 編碼的閾值的假陽性的概率)b
在一些實施方式中,HASH、 REQUEST和DATA消息的處理可能比 FILTER和FINGERPRINT消息相當(dāng)簡單。在一個實施方式中,HASH消 息接收器可試圖識別相應(yīng)于包括在消息中的標記值的節(jié)點210 ,并可接著 計算所識別的節(jié)點210的相應(yīng)的散列值。如果接收的散列值與計算的散列 值匹配則識別的節(jié)點210可能已經(jīng)與消息發(fā)送器中相應(yīng)的節(jié)點210同步。 否則,包括接收的標記值的REQUEST消息返回到消息發(fā)送器以獲得更新的數(shù)據(jù)版本。
在一個實施方式中,REQUEST消息的處理可例如使用上述不平衡的索引導(dǎo)航技術(shù),來簡單地包括識別每個節(jié)點210的消息接收器,對于該節(jié)點210 ,包括在消息中的接收的標記值與相應(yīng)的標記字段212匹配或是其前綴。對于每個識別的節(jié)點210 ,如上所述配置的相應(yīng)DATA消息返回到消息發(fā)送器。在一個實施方式中,接收的DATA消息的處理可包括識別相應(yīng)于在消息內(nèi)指示的標記值的節(jié)點210是否存在于消息接收器中。如果不存在,則相應(yīng)的節(jié)點210可被產(chǎn)生并以從消息提取的數(shù)據(jù)填充(p叩nlate》如果存在,則與現(xiàn)有的節(jié)點210關(guān)聯(lián)的數(shù)據(jù)和/或其相應(yīng)的數(shù)據(jù)值可用從消息中提取的數(shù)據(jù)代替。在一些實施方式中,只有當(dāng)接收的數(shù)據(jù)更新時,才可代替現(xiàn)有節(jié)點210的數(shù)據(jù)。例如,DATA消息可包括相應(yīng)于在消息發(fā)送器的節(jié)點210的項目144的內(nèi)容,且項目144可包括可與消息接收器中相應(yīng)的時間戳信息比較的時間戳信息,以確定接收的項目144是否比現(xiàn)有的項目144更新。如果是這樣,則接收的項目144可代替現(xiàn)有的項目144。
圖21的一般同步協(xié)議的變形是可能的和預(yù)期的。例如,在使用具有固定長度的分組(packet )來執(zhí)行鍵映射實例之間的通信的實施方式中,通過在單個分組內(nèi)傳送用于多個節(jié)點210的多個FINGERPRINT消息而不是相應(yīng)于特定節(jié)點210的單個FINGERPRINT消息可提高帶寬利用。接收這樣的分組的實例可接著能夠快速辨別其索引200中的哪個特定索引與發(fā)送器失配,而不需要與發(fā)送器交換進一步的消息。例如,如果第一個FINGERPRINT消息不匹配,則接收器可在給分組發(fā)送器發(fā)布REQUEST、FILTER或其它消息之前考慮分組內(nèi)的其它FINGERPRINT消息。在這么做時,接收器可以能夠?qū)⒉町惪s小到數(shù)據(jù)結(jié)構(gòu)的特定部分,這可減少交換關(guān)于已經(jīng)被同步的數(shù)據(jù)結(jié)構(gòu)的其它部分的消息的不必要的網(wǎng)絡(luò)業(yè)務(wù)。
通常,可以設(shè)想,上面描述的用于使用反熵協(xié)議和/或更新傳播協(xié)議來執(zhí)行鍵映射實例調(diào)整的任何方法或技術(shù),可通過配置成鍵映射實例140的層上或在實例內(nèi)的各個主機400操作的鍵映射協(xié)調(diào)器過程來實現(xiàn)。注意,用于實現(xiàn)用于不平衡數(shù)據(jù)結(jié)構(gòu)的反熵協(xié)議的上述方法和技術(shù)的很多變形是可能的和預(yù)期的,且上面的討論旨在是說明性的而不是限制性的。例如,一些項目頻繁地與其它、隨機選擇的項目通信以便在整個網(wǎng)絡(luò)中分布信息所使用的一般類型的協(xié)議可稱為基于閑聊的協(xié)議,且可使用基于閑聊的協(xié)
議的其它技術(shù)或方面來用在鍵映射實例140中間的反熵協(xié)議中。在不同實施方式中,上述示例性同步消息(或其它適當(dāng)?shù)南?可以不同的方法合并以產(chǎn)生具有不同特征的同步協(xié)議。
此外,雖然上面關(guān)于圖17-22描述的分層的索引數(shù)據(jù)結(jié)構(gòu)和同步技術(shù)是在實現(xiàn)用在鍵映射實例140內(nèi)的有效數(shù)據(jù)結(jié)構(gòu)的環(huán)境中討論的,但是可以設(shè)想,這樣的數(shù)據(jù)結(jié)構(gòu)和同步技術(shù)可用在為快速訪問而被索引的大量數(shù)據(jù)的任何應(yīng)用中。這樣的應(yīng)用不必包括例如圖2的系統(tǒng)的對象存儲系統(tǒng),但可包括數(shù)據(jù)庫系統(tǒng)、搜索系統(tǒng)或可應(yīng)用數(shù)據(jù)索引的任何其它應(yīng)用。
注意,在不同實施方式中,這里描述的事件的任何類型的隨機產(chǎn)生或選擇的實現(xiàn)可對隨機數(shù)或事件產(chǎn)生使用任何適當(dāng)?shù)乃惴ɑ蚣夹g(shù)。在很多情況下,用于實現(xiàn)隨機方法的計算技術(shù)可不產(chǎn)生完全隨機的結(jié)果,而更確切地為偽隨機結(jié)果。例如,偽隨機算法可指定配置成統(tǒng)計地產(chǎn)生隨機結(jié)果的確定性過程。如這里使用的,"隨機"或"實質(zhì)上隨機"的數(shù)據(jù)的產(chǎn)生旨在包括任何適當(dāng)?shù)膫坞S機計算技術(shù)以及完全隨機的數(shù)據(jù)源。
存儲服務(wù)組件檢測和管理
在存儲服務(wù)系統(tǒng)的大規(guī)模高度分布的實現(xiàn)中,可能有分布在整個系統(tǒng)中的圖2中所示的大量不同的系統(tǒng)組件。例如,可能有成百或成千的位存儲節(jié)點160的實例、協(xié)調(diào)器120和鍵映射實例140。管理這樣規(guī)模的分布式系統(tǒng)的狀態(tài)提出了實際的挑戰(zhàn)。例如,由于計劃的維護、被組件依賴的計算資源的失效、隔離另外功能的組件的通信故障或其它原因,特定系統(tǒng)組件的不同實例可能在任何給定的時間不能使用。此外,在任意或不可預(yù)測的時間在一些情況下,部件的新的或以前不能使用的實例可恢復(fù)使用。
在一個實施方式中,發(fā)現(xiàn)、故障和檢測監(jiān)控進程(DFDD ) 110的實例可配置成相應(yīng)地監(jiān)控存儲服務(wù)系統(tǒng)的不同相關(guān)聯(lián)組件的狀態(tài),以關(guān)于這樣的狀態(tài)彼此通信,并用接口提供DFDD客戶應(yīng)用程序,這樣的客戶可通過該接口識別可用于執(zhí)行系統(tǒng)操作例如鍵映射或位存儲操作的可利用的系統(tǒng)組件。通常,DFDD 110可配置成代表其它部件提供存儲服務(wù)系統(tǒng)組件的當(dāng)前狀態(tài)的統(tǒng)一可訪問的視圖。也就是說,不是以多個不同的接口配置存儲服務(wù)系統(tǒng)的不同部組,其中所述接口配置與其它、不同組件直接傳輸狀態(tài)信息,而是提供或依賴于這樣的信息的每個組件可配置成通過標準
DFDD接口來與DFDD的110的實例通信。在一些實施方式中,DFDD 110可實現(xiàn)為配置成在由操作系統(tǒng)管理的環(huán)境內(nèi)操作的監(jiān)控進程。然而,在其它實施方式中,DFDD 110可實現(xiàn)為配置成實現(xiàn)這里描述的功能的獨立或自主的硬件或軟件,而沒有依賴于或從屬于操作系統(tǒng)或其它組件的任何必要。
一般而言,配置成被DFDD 110的實例發(fā)現(xiàn)和監(jiān)控的存儲服務(wù)系統(tǒng)組件的每個實例可稱為應(yīng)用程序?qū)嵗?。例如,給定位存儲節(jié)點160的操作狀態(tài)或狀況可被配置成由給定位存儲節(jié)點160執(zhí)行的SNM控制器161的實例指示。因此,SNM控制器161可相應(yīng)于位存儲應(yīng)用程序?qū)嵗?。類似地,鍵映射實例140的操作狀態(tài)可被配置成執(zhí)行鍵映射實例內(nèi)的一個或更多主機400的鍵映射管理器的實例指示。每個鍵映射管理器實例可相應(yīng)于鍵映射應(yīng)用程序?qū)嵗?。其它類型的?yīng)用程序?qū)嵗强赡艿暮皖A(yù)期的。例如,在一個實施方式中,每個計算機系統(tǒng)可包括配置成檢測和報告專用系統(tǒng)的操作狀態(tài)細節(jié),例如處理器、存儲器、磁盤、輸入/輸出(I/O )或其它系統(tǒng)資源的利用的主機監(jiān)控器應(yīng)用程序?qū)嵗渲幸粋€或更多存儲服務(wù)組件通過所述計算機系統(tǒng)來部署。在一些實施方式中,DFDD 110的每個實例本身可配置為應(yīng)用程序?qū)嵗R簿褪钦f,DFDD實例可配置成監(jiān)控除了其它應(yīng)用程序?qū)嵗臓顟B(tài)外的其自己的操作狀態(tài)。
在存儲服務(wù)系統(tǒng)內(nèi),應(yīng)用程序?qū)嵗梢话阌蓱?yīng)用程序名稱識別并唯一地由相應(yīng)的應(yīng)用程序?qū)嵗龢俗R符(ID )識別。例如,特定的應(yīng)用程序名稱
可包括識別應(yīng)用程序?qū)嵗囊话泐愋偷淖址?,例?鍵映射管理器r位存
儲管理器';"主機管理器"或另一適當(dāng)?shù)拿Q,同時應(yīng)用程序?qū)嵗齀D可包括唯一地識別應(yīng)用程序命名空間內(nèi)的特定實例的字符串。在一些實施方式中,應(yīng)用程序?qū)嵗齀D可明確地包括應(yīng)用程序名稱,例如"鍵映射-管理器-4AB8D945';也可使用應(yīng)用程序?qū)嵗齀D的其它適當(dāng)?shù)母袷?。在一個實施方式中,DFDD 110的給定實例可配置成將多個應(yīng)用程序?qū)嵗c相應(yīng)的狀態(tài)信息相關(guān)聯(lián)(例如,通過名稱和實例ID )b例如,在圖23所示的實施方式中,DFDD110包括多個項目111 ,其中每個都可將應(yīng)用程序名稱112和實例ID U3與實例狀態(tài)信息114相關(guān)聯(lián)。在一些實施方式中,DFDD 110可使用一個或更多表格來反映不同類型的狀態(tài)信息114與給定的應(yīng)用程序名稱112和實例ID113的關(guān)聯(lián),而在其它實施方式中,DFDD 110可使用樹、如上所述的不平衡索引、或指示在給定應(yīng)用程序?qū)嵗推湎鄳?yīng)的狀態(tài)信息之間的關(guān)聯(lián)的任何其它適當(dāng)類型的數(shù)據(jù)結(jié)構(gòu)。
注意,在一些實施方式中,應(yīng)用程序?qū)嵗齀D可包括其自己的任意級別的粒度層的命名空間。例如,在一個實施方式中,給定的鍵映射應(yīng)用成實例ID可具有開多式〈mapname〉/〈instance〉/〈endpoint〉。術(shù)語〈mapname〉可識別鍵項目關(guān)聯(lián)的特定的鍵映射字典,該鍵項目關(guān)聯(lián)可通常相應(yīng)于給定的鍵映射部署。(不同鍵映射部署的鍵映射應(yīng)用程序?qū)嵗贒FDD 110的相同實例內(nèi)被管理是可能的。)術(shù)語〈instance〉可例如通過唯一的字符串來識別鍵映射示例140內(nèi)的指定的主機400。術(shù)語〈endpoint〉可識別在所識別的主機400上操作的多個獨立的、在功能上相同的鍵映射應(yīng)用程序?qū)嵗?(例如,作為不同的過程)b在應(yīng)用程序?qū)嵗齀D內(nèi)的其它復(fù)雜的命名空間是可能的和預(yù)期的。
通過DFDD 110而與應(yīng)用程序?qū)嵗P(guān)聯(lián)的狀態(tài)信息114可包括各種不同類型的信息。在一個實施方式中,DFDD 110可配置成將對DFDD 110管理的所有類型的應(yīng)用程序?qū)嵗齺碚f可共有的全局操作狀態(tài)信息存儲在狀態(tài)信息114內(nèi)。例如,如下面更詳細描述的,在一些實施方式中,DFDD110可實現(xiàn)全局操作狀態(tài)機,其定義應(yīng)用程序?qū)嵗囊唤M全局操作狀態(tài)(或簡單地,全局狀態(tài))以及在該組狀態(tài)中間可能的轉(zhuǎn)換。在這樣的實施方式中,由DFDD 110管理的每個應(yīng)用程序?qū)嵗稍谌魏谓o定的時間與該組全局狀態(tài)中特定的一個關(guān)聯(lián),且給定應(yīng)用程序?qū)嵗娜譅顟B(tài)可根據(jù)狀態(tài)機器和應(yīng)用程序?qū)嵗男袨殡S著時間而變化。
在一些實施方式中,除了對大不相同類型的應(yīng)用程序?qū)嵗晒灿械娜譅顟B(tài)信息以外,狀態(tài)信息114也可反映對特定的應(yīng)用程序?qū)嵗蛱囟愋偷膶嵗蔀樘囟ǖ幕蚨ㄖ频牟僮鳡顟B(tài)信息。例如,如果應(yīng)用程序?qū)嵗鄳?yīng)于特定的位存儲節(jié)點160的位存儲管理器,則其狀態(tài)信息114可包括關(guān)于在該特定節(jié)點上可利用的存儲資源的數(shù)量、那些資源的類型的信息(例如,高性能、低性能等),或可能對位存儲節(jié)點的環(huán)境特定的任何其它相關(guān)的狀態(tài)信息。類似地,對于相應(yīng)于特定鍵映射實例140的鍵映射管理器的應(yīng)用程序?qū)嵗錉顟B(tài)信息可包括關(guān)于由特定鍵映射實例管理的項目144的數(shù)量、所使用的或可利用的鍵映射存儲資源的信息,或其它相關(guān)的鍵映射狀態(tài)信息。在一些實施方式中,選擇何種應(yīng)用程序?qū)嵗囟ǖ臓顟B(tài)信息來包括在相應(yīng)的DFDD項目111內(nèi)可根據(jù)DFDD客戶的要求確定。例如,在幫助協(xié)調(diào)器120或節(jié)點揀取器130從幾個選項中選擇特定的位存儲或鍵映射應(yīng)用程序?qū)嵗?,可能有用的狀態(tài)信息可包括在那些應(yīng)用程序?qū)嵗腄FDD項目111內(nèi)。
在一些實施方式中,應(yīng)用程序?qū)嵗臓顟B(tài)信息114還可包括關(guān)于DFDD客戶可如何訪問實例的信息。例如,狀態(tài)信息114可包括互聯(lián)網(wǎng)協(xié)議(IP )地址和端口號,DFDD客戶可通過該互聯(lián)網(wǎng)協(xié)議(IP )地址和端口號可建立與應(yīng)用程序?qū)嵗倪B接。 一些應(yīng)用程序?qū)嵗芍С制渌愋偷慕涌?,例如網(wǎng)絡(luò)服務(wù)接口、公布/預(yù)訂接口或其它適當(dāng)?shù)慕涌凇T谶@樣的實施方式中,狀態(tài)信息114可包括URL或DFDD客戶執(zhí)行網(wǎng)絡(luò)服務(wù)請求所必需的其它信息,以預(yù)訂公布/預(yù)訂通道,或執(zhí)行建立與應(yīng)用程序?qū)嵗耐ㄐ潘匦璧牧硪环N類型的行動。在一些實施方式中,除了或代替應(yīng)用程序?qū)嵗L問信息,狀態(tài)信息114可包括關(guān)于實例物理地定位在存儲服務(wù)系統(tǒng)中的位置的信息。例如,狀態(tài)信息114可包括與特定的應(yīng)用程序?qū)嵗鄳?yīng)的數(shù)據(jù)中心300或區(qū)域310的標識符。
如上所述,在一些實施方式中,DFDD 100可為各個應(yīng)用程序?qū)嵗S持全局狀態(tài)信息,該信息可一般指示給定的應(yīng)用程序?qū)嵗欠裾5夭僮鳎⒁蚨衫?,或處于異常狀態(tài)中。在一個實施方式中,配置成通過DFDD 110的實例監(jiān)控的每個應(yīng)用程序?qū)嵗膳渲贸赏ǔ?但不是必需的)以定期的間隔例如某個數(shù)量的秒或分鐘向DFDD IIO報告其狀態(tài)。這樣的報告可稱為"心跳'i心跳報告可根據(jù)任何適當(dāng)?shù)膮f(xié)議而被傳輸(例如,作為TCP/IP消息、作為網(wǎng)絡(luò)服務(wù)請求、或根據(jù)其它標準的或?qū)S玫陌l(fā)送消息協(xié)議),并可在信息內(nèi)容中變化。作為最低限度的例子,給定應(yīng)用程序?qū)嵗?br> 可向僅僅包括應(yīng)用程序名稱和相應(yīng)于給定實例的應(yīng)用程序?qū)嵗齀D的DFDD 110提交心跳。在其它情況下,給定的應(yīng)用程序?qū)嵗砂ㄐ奶械念~外狀態(tài),例如本地資源利用的特定狀態(tài)。在一些實施方式中,應(yīng)用程序?qū)嵗膳渲贸蓤?zhí)行某個級別的自我診斷或自我驗證以在發(fā)送心跳之前確定其自己的功能狀態(tài),而在其它實施方式中,應(yīng)用程序?qū)嵗砂l(fā)送心跳而不依賴于任何自我評估。
一般而言,如預(yù)期的,如果應(yīng)用程序?qū)嵗駾FDD 110發(fā)送心跳,則有正常操作的合理預(yù)期。如果心跳應(yīng)被中斷某個長度的時間,則有應(yīng)用程序?qū)嵗霈F(xiàn)問題的合理預(yù)期。圖24示出全局狀態(tài)機的一個實施方式,對于作為心跳活動和/或其它參數(shù)的函數(shù)的每個應(yīng)用程序?qū)嵗?,該全局狀態(tài)機可由DFDD 110維持。在所示實施方式中,新的應(yīng)用程序?qū)嵗訬EW狀態(tài)在線出現(xiàn)在例如,在它開始操作和向DFDD 110的實例通知其存在并提供應(yīng)用程序名稱、應(yīng)用程序?qū)嵗齀D和DFDD IIO初始化相應(yīng)的項目111所必需的任何其它信息之后不久。 一旦新的應(yīng)用程序?qū)嵗欠€(wěn)定的并準備開始正常操作,它就進入OK狀態(tài)。在不同實施方式中,從NEW到OK狀態(tài)的轉(zhuǎn)換可為時間(例如,基于應(yīng)用程序?qū)嵗念愋偷哪J設(shè)置時間、應(yīng)用程序?qū)嵗詧蟾?、管理員干涉或這些或其它因素的組合的函數(shù)。
在所示實施方式中,應(yīng)用程序?qū)嵗杀3衷贠K狀態(tài)中,只要自從實例到DFDD 110的最后心跳以來經(jīng)過的時間小于故障閾值7)^。例如PFDD110可為每個應(yīng)用程序?qū)嵗S持當(dāng)每次心跳從相應(yīng)的實例接收時遞增的計數(shù)器,并可監(jiān)控每個計數(shù)器(例如,用倒數(shù)的計時器)以確定其值在經(jīng)過7>。"之前是否改變。在一些實施方式中,除了 OK (以及可能NEW )以外的全局狀態(tài)可一般稱為異常操作狀態(tài)或故障狀態(tài),雖然在這樣的狀態(tài)中間可能有區(qū)別,如下所述。
如果自從用于應(yīng)用程序?qū)嵗淖詈笮奶詠斫?jīng)過了時間7>。,7 ,則其全局狀態(tài)可轉(zhuǎn)換為 INCOMMUNICADO 。在所示實施方式中,INCOMMUNICADO可用作應(yīng)用程序?qū)嵗赡苡袉栴}的瞬變狀態(tài)指示,但它沒有被最后地確定為永久失效。例如,應(yīng)用程序?qū)嵗蓵簳r停止或掛起,到DFDD的110的心跳消息可被延時或丟失,或如下面更詳細描述的,相對于應(yīng)用程序?qū)嵗漠?dāng)前狀態(tài),DFDD 110的一個實例可能與DFDD 110的另一實例不同步。如果在INCOMMUNICADO狀態(tài)中心跳被從應(yīng)用程序?qū)嵗邮?,則該實例可轉(zhuǎn)換回OK狀態(tài)。在一些實施方式中,DFDD客戶可自擔(dān)風(fēng)險地選擇使用處于INCOMMUNICADO狀態(tài)的應(yīng)用程序?qū)嵗?br> 如果應(yīng)用程序?qū)嵗荒茏詣拥貜腎NCOMMUNICADO狀態(tài)恢復(fù),則可能有影響實例的更嚴重的問題。在所示實施方式中,可能出現(xiàn)兩個可能的故障情況。如FAIL狀態(tài)所示的,單獨的應(yīng)用程序?qū)嵗赡芾缬捎诨居嬎阗Y源不能支持(host )該單獨的實例而失效處于隔離中。可選地,應(yīng)用程序?qū)嵗赡苡捎谑嵗虳FDD 110之間網(wǎng)絡(luò)通信而失效,如NETWORK SPLIT狀態(tài)所示的。例如,由于使存儲服務(wù)系統(tǒng)的部分彼此隔離的通信故障,應(yīng)用程序?qū)嵗龑FDD IIO的一些實例可能是可操作和可訪問的,但是對于DFDD 110的其它實例不是可操作和可訪問的。
毫無疑問地確定給定的應(yīng)用程序?qū)嵗收鲜欠癖桓綦x或由于網(wǎng)絡(luò)分離可能很難。在一些實施方式中,DFDD 110可使用相應(yīng)的啟發(fā)式標準和,,其考慮不同類型的可用信息來進行關(guān)于應(yīng)用程序?qū)嵗欠駪?yīng)從
定。例如,該標準可要求給定應(yīng)用程序?qū)嵰?在轉(zhuǎn)換到另一故障狀態(tài)之前處于INCOMMUNICADO狀態(tài)達到至少閾值數(shù)量的時間7^ *。此外,該標準可考慮其它應(yīng)用程序?qū)嵗欠褚蔡幱贗NCOMMUNICADO、 FAIL或NETWORK SPLIT狀態(tài)中,所述其它應(yīng)用程序?qū)嵗c和給定應(yīng)用程序?qū)嵗嗤膮^(qū)域310或字符300共享資源或?qū)儆趨^(qū)域310或字符300。例如,如果位于與給定應(yīng)用程序?qū)嵗嗤腎P地址或位于相同的區(qū)域310或數(shù)據(jù)中心300內(nèi)的其它地址的其它應(yīng)用程序?qū)嵗荗K ,則可能給定應(yīng)用程序示例的故障是隔離的。相反,如果多個應(yīng)用程序示例不是OK ,則網(wǎng)絡(luò)分離情況可能是更可能的,特別是如果應(yīng)用程序?qū)嵗隣顟B(tài)被根據(jù)地理或網(wǎng)絡(luò)拓撲分組。在一些實施方式中,DFDD 110可配置成除了使用被動地接收的狀態(tài)信息以便確定故障的性質(zhì)以外還詢問被懷疑發(fā)生故障的應(yīng)用程序?qū)嵗T谝恍嵤┓绞街?,啟發(fā)式標準可配置成根據(jù)概率的一些閾值(例
92如,大于50%的概率、大于90%的概率,等等)來確定應(yīng)用程序?qū)嵗诟怕噬鲜欠窨赡苁А?br> 根據(jù)啟發(fā)式標準,失效的應(yīng)用程序?qū)嵗赊D(zhuǎn)換到FAIL狀態(tài)或NETWORK SPLIT狀態(tài)。在一個實施方式中,如果心跳被接收到,則實例可從這些狀態(tài)中的任一種轉(zhuǎn)換回到OK狀態(tài),而在其它實施方式中,這些狀態(tài)中的任一個或兩個可為不能恢復(fù)的。雖然處于INCOMMUNICADO狀態(tài)中的應(yīng)用程序?qū)嵗杀患俣榫哂泄收细怕实墓δ苄缘幕蚩苫謴?fù)的,但是處于FAIL或NETWORK SPLIT狀態(tài)中的應(yīng)用程序?qū)嵗杀患俣橐呀?jīng)失效了(在一些實施方式中有恢復(fù)的可能性)b通常,DFDD客戶可避免選擇處于這些失效狀態(tài)的任一個中的那些應(yīng)用程序?qū)嵗?。在一些實施方式中,DFDD 110可配置成對客戶隱藏關(guān)于處于這些失效狀態(tài)的任一個中的應(yīng)用程序?qū)嵗男畔ⅰ?br> 在所示實施方式中,應(yīng)用程序?qū)嵗稍谵D(zhuǎn)到FORGOTTEN狀態(tài)之前保持在FAIL或NETWORK SPLIT狀態(tài)中達到相應(yīng)的時間段Tc和rree。ver。例如,在FAIL狀態(tài)的一些情況下,與失效的應(yīng)用程序?qū)嵗嚓P(guān)聯(lián)的資源可為了恢復(fù)或分析的目的而保存一段時間。如果可能,這樣的資源(例如,位存儲節(jié)點160的存儲資源)可接著被初始化,用于重新部署為新的應(yīng)用程序?qū)嵗?。在NETWORK SPLIT狀態(tài)的一些情況下,可能需要做出關(guān)于是否在沒有失效的應(yīng)用程序?qū)嵗那闆r下繼續(xù)進行系統(tǒng)操作的決定,且如果這么做,應(yīng)采取什么類別的恢復(fù)行動(例如,在剩余的應(yīng)用程序?qū)嵗虚g重新產(chǎn)生對象復(fù)本,等等 > 在一些實施方式中,失效的應(yīng)用程序?qū)嵗荒懿晦D(zhuǎn)到FORGOTTEN狀態(tài),直到這樣的恢復(fù)行動完成為止。
應(yīng)用程序?qū)嵗腇ORGOTTEN狀態(tài)可以不明確地表現(xiàn)在DFDD 110內(nèi)。更確切地,在一些實施方式中,它可通過從DFDD IIO刪除應(yīng)用程序?qū)嵗默F(xiàn)有狀態(tài)信息,例如其DFDD項目111而被標記。一般而言,應(yīng)用程序?qū)嵗荒軓腇ORGOTTEN狀態(tài)恢復(fù),雖然在一些實例中,可使用通過新狀態(tài)分配給被忽略的實例的相同資源來初始化新的應(yīng)用程序?qū)嵗?。在一些實施方式中,如果?dāng)處于FORGOTTEN狀態(tài)中時,應(yīng)用程序?qū)嵗詣拥刂匦麻_始發(fā)送心跳,則DFDD 110可認識到實例被忽略(例如,不再相應(yīng)于有效的項目111 )并可指示實例停止操作或重新設(shè)置或重新初始化本身。
注意,在一些實施方式中,將全局狀態(tài)轉(zhuǎn)換分解的啟發(fā)式算法和轉(zhuǎn)換 時間參數(shù)對不同類型的應(yīng)用程序?qū)嵗赡懿煌疫@些參數(shù)中的一些或全
部可由DFDD客戶調(diào)節(jié)。此外,雖然DFDD客戶通常可詢問DFDD 110 的實例以確定給定應(yīng)用程序?qū)嵗漠?dāng)前的全局狀態(tài),但是在一些實施方式 中,DFDD 110可支持公布/預(yù)訂狀態(tài)變化通知模型。例如,DFDD客戶可 通過預(yù)訂過程告知DFDD 110 ,客戶希望被通知特定應(yīng)用程序?qū)嵗驅(qū)嵗?組的所有或某些類型的全局狀態(tài)變化。當(dāng)檢測到這樣的狀態(tài)變化時,DFDD 110可接著向預(yù)訂的DFDD客戶傳送指示該變化的消息。
應(yīng)用程序?qū)嵗3?膳渲贸上蜃罱咏谠搼?yīng)用程序?qū)嵗腄FDD 110 的實例發(fā)送心跳信息。例如,在一些實施方式中,DFDD 110的實例可在 配置成支持一個或更多其它應(yīng)用程序?qū)嵗拿總€計算機系統(tǒng)上提供,以便 應(yīng)用程序?qū)嵗蓛H僅通過參考其主機的本地IP地址并使用為應(yīng)用程序?qū)?例-DFDD通信保留的公知IP端口 ,來容易地訪問DFDD 110的本地實例。 然而,如果應(yīng)用程序?qū)嵗駾FDD 110的一些實例而不是其它實例報告其 狀態(tài),則當(dāng)沒有努力同步其狀態(tài)時,部署的DFDD 110的實例可變得不同。
在一些實施方式中,DFDD 110的實例中間的不同可使用類似于上面 關(guān)于鍵映射實例140描述的那些同步協(xié)議,例如基于閑聊的協(xié)議來解決。 然而,在很多情況下,由DFDD 110的實例共同管理的DFDD項目111的 數(shù)量可能實質(zhì)上小于由鍵映射實例140管理的鍵映射項目144的數(shù)量。當(dāng) 是這種情況時,較簡單的調(diào)整協(xié)議可用于同步DFDD 110的實例。在圖25 中示出了這樣的基于閑聊的協(xié)議的一個實施方式的操作的方法。在所示實 施方式中,操作在塊2500開始,其中稱為初始實例的DFDD 110的一個實 例隨機地選擇DFDD 110的另一對等的實例用于同步。在一些實施方式中, 初始DFDD實例有時可根據(jù)初始DFDD實例的狀態(tài)信息來從目前處于失效 狀態(tài)(例如,NETWORK SPLIT )中的那些DFDD實例中間慎重地選擇對 等的DFDD實例。如果初始DFDD實例成功地與明顯失效的對等實例聯(lián)系 和同步,則可有助于從明顯的故障中恢復(fù)。
初始實例可接著計算在其項目111內(nèi)反映的應(yīng)用程序?qū)嵗淖R別信息的散列值(例如,通過散列應(yīng)用程序?qū)嵗Q和ID ,以及可能地端點或其 它識別信息M塊2502 )b散列值可根據(jù)任何適當(dāng)?shù)纳⒘兴惴ɡ鏜D5算 法來確定。初始實例接著將計算的散列值連同當(dāng)前應(yīng)用程序?qū)嵗隣顟B(tài)信息 (例如,心跳計數(shù)、全局狀態(tài)信息和/或包括在狀態(tài)信息114內(nèi)的任何其它 信息)的分類列表一起傳送到對等的實例(塊2504 )b狀態(tài)信息的列表可 根據(jù)在初始和對等實例產(chǎn)生一致的列表的任何標準來分類。例如,列表可 根據(jù)應(yīng)用程序?qū)嵗Q和/或ID來分類。
注意,如上所述,在一些實施方式中,與應(yīng)用程序?qū)嵗嚓P(guān)的狀態(tài)信 息可從包括在心跳消息內(nèi)的心跳計數(shù)信息得到。相應(yīng)地,在一些實施方式 中,DFDD實例可交換用于應(yīng)用程序?qū)嵗男奶嫈?shù)信息,并可從接收的 心跳計數(shù)信息得到應(yīng)用程序?qū)嵗隣顟B(tài)信息,而不是直接從其它DFDD實例 接收狀態(tài)信息。因此,在一個實施方式中,給定DFDD實例可配置成在接 收的心跳計數(shù)信息的基礎(chǔ)上更新特定應(yīng)用程序?qū)嵗臓顟B(tài)(例如,根據(jù)圖 24的狀態(tài)機),而不管該信息是直接從特定的應(yīng)用程序?qū)嵗邮者€是通過 同步協(xié)議間接地從另一 DFDD實例接收。在這樣的實施方式中,在DFDD 實例中間應(yīng)用程序?qū)嵗僮鳡顟B(tài)信息的同步可包括心跳信息的同步,而沒 有直接交換應(yīng)用程序?qū)嵗奶囟ㄈ植僮鳡顟B(tài)(例如,OK、 INCOMMUNICADO ,等等),這可簡化同步協(xié)議的操作。
響應(yīng)于接收狀態(tài)信息的散列值和列表,對等實例以與由初始實例執(zhí)行 的方式一致的方式來計算其自己的應(yīng)用程序?qū)嵗淖R別信息的散列值(塊 2506 ),并比較最終的散列值與從初始實例接收的散列值(塊2508 )b如果 兩個值一致,則存在初始和對等實例都具有相應(yīng)于相同組的應(yīng)用程序?qū)嵗?的項目lll的高度可能性。對等實例可接著掃描接收的狀態(tài)信息的列表并 根據(jù)接收的列表適當(dāng)?shù)馗缕漤椖縧ll(塊2510)6例如,如果接收的列表 中的心跳計數(shù)或時間戳比存儲在一個對等的項目111中的更大或更新,則 對等實例可根據(jù)接收的列表中的狀態(tài)信息更新項目111。在一些實施方式 中,對等實例可與從初始實例接收列表并行地或之后將其自己的狀態(tài)信息 的列表發(fā)送回初始實例用于類似的處理。
如果散列值不一致,則有可能對等和初始實例所知的應(yīng)用程序?qū)嵗慕M在至少一個項目111上不同。相應(yīng)地,對等實例可請求初始實例所知的
項目111的完整的信息轉(zhuǎn)儲(dump )(恰好與那些項目111的狀態(tài)信息114 相反M塊2512 )b對等實例可接著添加它缺少的任何項目111 ,并同步剩 余的項目111的狀態(tài)(塊2514 )b如上面的,在一些實施方式中,對等實 例可與從初始實例接收信息轉(zhuǎn)儲并行地或之后將其項目111的完整的信息
轉(zhuǎn)儲發(fā)送回初始實例。
可以設(shè)想,在一些實施方式中,存在于系統(tǒng)內(nèi)的DFDD 110的每個實 例可配置成每隔一段時間重復(fù)地執(zhí)行剛剛描述的同步協(xié)議,或其適當(dāng)?shù)淖?形。例如,協(xié)議可大致周期性地以一秒的周期或任何其它適當(dāng)?shù)闹芷诒?DFDD 110的實例執(zhí)行。進一步可以設(shè)想,在一些實施方式中,DFDD 110 的實例可以大致相同的周期但相對于彼此不同的相移執(zhí)行同步協(xié)議,以便 在任何給定的時間,只有DFDD 110的實例的一部分可開始該協(xié)議。
注意,在一些實施方式中,DFDD 110的實例可甩于為任何分布式系 統(tǒng)內(nèi)的任何類型的應(yīng)用程序?qū)嵗?,而不僅僅是存儲服務(wù)系統(tǒng)內(nèi)限定的那些 應(yīng)用程序?qū)嵗齾f(xié)調(diào)和傳遞狀態(tài)信息。此外,在一些實施方式中,DFDD實 例的不同組可管理不同的應(yīng)用程序?qū)嵗隣顟B(tài)信息。在一些這樣的實施方式 中,通過給作為相同組的成員的DFDD 110的實例分配共同的標識符并要 求標識符匹配作為DFDD同步的條件可將組彼此區(qū)別開。例如,管理存儲 服務(wù)系統(tǒng)應(yīng)用程序?qū)嵗腄FDD實例可具有標識符,該標識符不同于配置 成管理與存儲服務(wù)系統(tǒng)無關(guān)的其它應(yīng)用程序?qū)嵗臓顟B(tài)的DFDD實例,且 只有具有相同標識符的那些DFDD實例可根據(jù)圖25的同步協(xié)議彼此交換
i曰'息o
在一些實施方式中,DFDD組標識符可用于區(qū)別存在于相同的系統(tǒng)中 的應(yīng)用程序?qū)嵗牟煌渲?。例如,相?yīng)于"生產(chǎn)"標識符的DFDD 110的 一組實例可用來管理存儲服務(wù)系統(tǒng)或另一分布式系統(tǒng)的生產(chǎn)版本,并可反 映相應(yīng)于生產(chǎn)系統(tǒng)的一組應(yīng)用程序?qū)嵗?,而相?yīng)于"測試"標識符的DFDD 110的另一組實例可部屬為管理相應(yīng)于不同的應(yīng)用程序?qū)嵗M和狀態(tài)的系 統(tǒng)的測試版本。注意,在一些情況下,相應(yīng)于任一系統(tǒng)版本的應(yīng)用程序?qū)?例和/或DFDD實例可在相同的基本系統(tǒng)資源(例如,在相同的計算機系統(tǒng))上執(zhí)行,但可由于其不同的DFDD組標識符而對彼此變得透明。例如, 當(dāng)執(zhí)行例如圖25中所示的協(xié)議的同步協(xié)議時JDFDD實例可首先確定它們 是否是相同組的成員(例如,通過交換組標識符)并視此確定的情況而執(zhí) 行隨后的同步步驟,從而便于組之間應(yīng)用程序?qū)嵗隣顟B(tài)信息的分離。
注意,前述用于同步DFDD 110的實例的基于閑聊的協(xié)議可不僅幫助 在整個存儲服務(wù)系統(tǒng)中分布現(xiàn)有的應(yīng)用程序?qū)嵗牟僮鳡顟B(tài),而且也可通 過其它系統(tǒng)組件便于新應(yīng)用程序?qū)嵗陌l(fā)現(xiàn)。例如, 一旦新應(yīng)用程序?qū)嵗?被初始化并與DFDD 110的實例(例如,在新應(yīng)用程序?qū)嵗怀跏蓟南?統(tǒng)上在本地操作的實例)接觸,就可產(chǎn)生相應(yīng)于新實例的新項目111。由 于在其上創(chuàng)建新實例111的DFDD 110的實例使其狀態(tài)與DFDD 110的不 同的其它實例同步,因此新項目111可在整個系統(tǒng)中傳播。為了各種目的 而詢問DFDD 110以識別應(yīng)用程序?qū)嵗?例如,以存儲新對象30或更新鍵 映射實例140 )的DFDD客戶可接著被提供關(guān)于新應(yīng)用程序?qū)嵗约叭魏?現(xiàn)有的實例的狀態(tài)信息。
還注意到,在上述實施方式中,與故障檢測和發(fā)現(xiàn)有關(guān)的應(yīng)用程序?qū)?例狀態(tài)信息變化可在整個系統(tǒng)中傳播,而不干涉參考那些實例的應(yīng)用程序 實例或DFDD客戶的部分。也就是說,給定的應(yīng)用程序?qū)嵗恍枰廊?何將心跳信息傳送到DFDD 110的一個實例。不需要知道系統(tǒng)內(nèi)DFDD 110 的所有實例、其它應(yīng)用程序?qū)嵗蚩烧{(diào)用給定應(yīng)用程序?qū)嵗牟煌蛻簟?類似地,DFDD客戶不需要單獨地知道其他客戶或系統(tǒng)內(nèi)所有應(yīng)用程序或 DFDD實例;客戶可依賴于DFDD 110的實例,他們與其通信以合理地獲 得關(guān)于系統(tǒng)內(nèi)可利用的資源的狀態(tài)的當(dāng)前信息。通過允許應(yīng)用程序?qū)嵗?狀態(tài)改變而不需要立即通知其它應(yīng)用程序?qū)嵗蚩蛻暨@樣的變化,DFDD 110可有助于存儲服務(wù)系統(tǒng)的可縮放性。
存儲類
在一些存儲服務(wù)系統(tǒng)實施方式中,對象30可相對于其復(fù)制的程度、 復(fù)本在區(qū)字段310中間的分布、復(fù)本被存儲到的存儲資源的類型和/或其它 系統(tǒng)特征或策略被統(tǒng)一處理。例如,系統(tǒng)可試圖將每個對象30復(fù)制相同 數(shù)量的次數(shù)到相同數(shù)量的不同區(qū)域310。然而,不同的客戶50對不同的對象30可有不同的存儲要求。例如, 一個客戶50可能希望以比默認的存儲 策略可提供的更高的可靠度(例如,根據(jù)復(fù)本的數(shù)量和分布)存儲特定的 對象30 ,而另一客戶50可能甚至不需要默認級別的可靠性。可選地,客 戶50可希望通過限制對象復(fù)本被分布到的區(qū)域310的數(shù)量來增加對象寫 入性能,可能以可靠性為代價。
相應(yīng)地,在一個實施方式中,存儲服務(wù)系統(tǒng)例如圖2的系統(tǒng)可配置成 支持對象30的存儲類。 一般而言,給定對象30的存儲類可指定相對于給 定對象30影響服務(wù)等級協(xié)議(SLA )的存儲服務(wù)系統(tǒng)特征或特性的任何集 合。服務(wù)等級協(xié)議可通常反映保證或期望的集合,在這些保證或期望下服 務(wù)供應(yīng)商向客戶提供服務(wù),以換取從客戶接收的一些考慮因素(例如,費 用或任何其它適當(dāng)類型的考慮因素)6例如,由存儲服務(wù)系統(tǒng)管理的對象 30的SLA可為服務(wù)指定對象可靠性、有效性、訪問性能(例如,等待時 間、帶寬》費用或速率的不同級別,或客戶與對象30的交互作用的任何 其它可測量的方面。在一些實施方式中,存儲類可只指定SLA特性的特定 子集合(例如,如下所述對象復(fù)本的數(shù)量和分布),而在其它實施方式中, 存儲類可直接相應(yīng)于包括關(guān)于給定對象30的SLA協(xié)議的所有定義的方面 的綜合SLA。
在一個實施方式中,存儲服務(wù)系統(tǒng)可定義存儲類的固定集合,每個存 儲類都具有特別定義的SLA特性,且客戶50可選擇使特定的對象30與特 定的存儲類關(guān)聯(lián)起來。例如,默認的存儲類可指定對象30復(fù)制至少三次 到至少兩個不同的區(qū)域310。高度可靠性的存儲類可指定對象30復(fù)制至少 五次到至少三個不同的區(qū)域310。預(yù)算存儲類可指定對象30的單個復(fù)本存 儲在單個區(qū)域310內(nèi)。局部存儲類可指定對象30復(fù)制至少三次到單個區(qū) 域310。在其它實施方式中,存儲服務(wù)系統(tǒng)可定義具有其它特性的存儲類, 或可允許客戶50通過指定將應(yīng)用到給定對象30的存儲策略的組魚例如, 如上關(guān)于節(jié)點揀取器130描述的)來為給定的對象30定制存儲類。
如上所述,SLA特性可擴展而超出復(fù)本的數(shù)量和區(qū)域的數(shù)量,復(fù)本應(yīng) 分布到該區(qū)域。在一個實施方式中,特定存儲類的SLA特性可包括相應(yīng)于 與特定存儲類關(guān)聯(lián)的對象30的預(yù)期的處理等待時間的指示。例如, 一個
98存儲類可對給定的成本規(guī)定低的預(yù)期的處理等待時間,而另一個可為較低 的成本指定較高的預(yù)期的處理等待時間。不同水平的預(yù)期的處理等待時間
可以不同方法實現(xiàn)。例如,從給定協(xié)調(diào)器120的觀點來看,由于這種因素, 例如節(jié)點160到給定協(xié)調(diào)器120的接近度、在節(jié)點160可得到的資源的級 別和類型、節(jié)點160的處理負載或其它相關(guān)的因素, 一些節(jié)點160可展示 比其它節(jié)點低的訪問等待時間。因此,受由給定存儲類指定的其它SLA特 性實現(xiàn)的限制的影響,在一些實施方式中,協(xié)調(diào)器120和/或節(jié)點揀取器 130可配置成選擇為在存儲類中的對象30展示較低的訪問等待時間的節(jié)點 160 ,該存儲類規(guī)定較低的預(yù)期處理的等待時間。在其它實施方式中,協(xié) 調(diào)器120可配置成根據(jù)與對象30關(guān)聯(lián)的存儲類的預(yù)期處理的等待時間來 為優(yōu)先考慮對對象30的客戶訪問請求的處理。例如,協(xié)調(diào)器120可實現(xiàn) 配置成使處理偏向于有利于具有較低的預(yù)期處理等待時間的存儲類的不 同隊列或其它處理控制或數(shù)據(jù)結(jié)構(gòu),同時確保對具有較高的預(yù)期處理等待 時間的存儲類的請求最終完成。
存儲類可由客戶50在對象30最初存儲在存儲服務(wù)系統(tǒng)內(nèi)時指定???選地,在一些實施方式中,客戶50可在對象30存在于存儲服務(wù)系統(tǒng)內(nèi)的 任何時間改變與對象30關(guān)聯(lián)的存儲類。如果當(dāng)對象30被最初存儲時客戶 50沒有指定存儲類,則可使用默認的存儲類例如上面描述的存儲類。如上 所述,在一些實施方式中,對象30的存儲類可存儲在與對象30的鍵關(guān)聯(lián) 的鍵映射記錄148中。在這樣的實施方式中,協(xié)調(diào)器120和/或復(fù)制器180 可配置成當(dāng)存儲、復(fù)制和維持對象30的現(xiàn)有復(fù)本時考慮對象30的存儲類。 可以設(shè)想,客戶50可被要求為與不同存儲類關(guān)聯(lián)的對象30支付不同使用 費用。例如,高度可靠性存儲類可通常使用較多的系統(tǒng)資源,而預(yù)算存儲 類可使用較少的資源。相應(yīng)地,對于給定大小的對象30 ,為了使用前面的 存儲類來儲存對象30 ,客戶50可被要求支付得較多,而對后者較少。
在圖26中示出了存儲類在存儲服務(wù)系統(tǒng)內(nèi)的操作的方法的一個實施 方式。在所示實施方式中,操作在塊2600開始,其中客戶50指定將與特 定的對象30相關(guān)聯(lián)的存儲類。隨后,存儲類持久地與存儲服務(wù)系統(tǒng)內(nèi)的 特定對象30關(guān)聯(lián)(塊2602 >例如,存儲類的指示可通過代表客戶50的協(xié)調(diào)器120存儲在與特定對象30關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)中,例如鍵映射記錄148。 接著根據(jù)指定的存儲類的特性來配置與對象30關(guān)聯(lián)的對象數(shù)據(jù)的狀顆塊 2604 )b例如,如果存儲類指定對在區(qū)域310中間的對象復(fù)本的數(shù)量和/或 分布的某些要求,則協(xié)調(diào)器120和/或復(fù)制器180可操作來產(chǎn)生并分布必要 的復(fù)本,以便存儲系統(tǒng)相對于特定對象30的最終的狀態(tài)滿足存儲類的要 求。在一些實施方式中,復(fù)制器180可配置成確保隨著時間的過去而為對 象30維持存儲類要求。例如,如果復(fù)本失效,則復(fù)制器180可配置成檢 測故障并產(chǎn)生額外的復(fù)本。
可以設(shè)想,在一些實施方式中,由給定存儲類指定的存儲特性可包括 通過位存儲節(jié)點160區(qū)分不同類型的存儲資源。例如,在一些實施方式中, 一些位存儲節(jié)點160可包括比其它節(jié)點更高性能的存儲設(shè)備,或單獨的位 存儲節(jié)點160可包括較高和較低性能設(shè)備的組合。在這樣的實施方式中, 存儲類可指定一種或另一類型的設(shè)備應(yīng)用于與該類相關(guān)聯(lián)的對象30。
動態(tài)復(fù)制
如上所討論的,在一些實施方式中,節(jié)點揀取器130可配置成產(chǎn)生識 別特定對象30的復(fù)本應(yīng)寫入的特定位存儲節(jié)點160的寫入計劃。這樣的 寫入計劃可以這樣的方式產(chǎn)生,使得一旦寫入計劃例如通過協(xié)調(diào)器120實 現(xiàn),不同的寫入策略相對于特定的對象30就被滿足。例如,由寫入計劃 規(guī)定的節(jié)點160的數(shù)量可根據(jù)特定對象30的復(fù)本的最小需要的數(shù)量、在 其上應(yīng)分布復(fù)本的不同區(qū)域310的最小數(shù)量,或任何其它存儲策略考慮因 素來確定。
在一些實施方式中,節(jié)點揀取器130可配置成以靜態(tài)的方式產(chǎn)生寫入 計劃,其中節(jié)點160根據(jù)可預(yù)測的程序被一致地選擇,而不考慮節(jié)點160 的當(dāng)前狀態(tài)。例如,節(jié)點揀取器130可一致地選擇相同組的節(jié)點160用于 存儲復(fù)本,或可通過很多節(jié)點160以循環(huán)的方式旋轉(zhuǎn)。然而,在大規(guī)模實 現(xiàn)中,存儲服務(wù)系統(tǒng)可包括可在不同的時間在相當(dāng)不同的狀態(tài)中操作的節(jié) 點160。例如, 一些節(jié)點160可為無效的,另一些節(jié)點可為有效的但充滿 請求行為或具有少量的自由資源,以及還有另一些可相對空閑或具有相當(dāng) 多的自由資源。此外,從給定協(xié)調(diào)器120或節(jié)點揀取器130的觀點來看,節(jié)點160可 呈現(xiàn)不同級別的通信費用。例如,位于相同區(qū)域310或數(shù)據(jù)中心300內(nèi)作 為協(xié)調(diào)器120的節(jié)點160可通過本地低等待時間網(wǎng)絡(luò)連通性被訪問。相反, 位于與協(xié)調(diào)器120不同的區(qū)域310或數(shù)據(jù)中心300內(nèi)的節(jié)點160可呈現(xiàn)比 本地節(jié)點160實質(zhì)上更高的訪問等待時間。而且,在一些實施方式中,區(qū) 域310或數(shù)據(jù)中心300之間的通信可發(fā)生在具有與本地通信不同的經(jīng)濟費 用模型的通信網(wǎng)絡(luò)上。例如,區(qū)域310內(nèi)的通信可發(fā)生在具有大量帶寬的 專用局域網(wǎng)(LAN )上,對于該帶寬沒有用于數(shù)據(jù)傳輸?shù)幕谑褂玫馁M用。 相反,數(shù)據(jù)中心300之間的通信可發(fā)生在設(shè)備上,例如租用的電信設(shè)備、 公共互聯(lián)網(wǎng)、專用廣域網(wǎng)(WAN)設(shè)備或其它遠程電信網(wǎng)絡(luò)。這些設(shè)備可 一般比LAN設(shè)備更具有帶寬限制,且在一些實例中可呈現(xiàn)由第三方要求 支付的利用費用(例如,基于峰值或合計的帶寬利用),該費用可能不適 用于LAN通信。
不同節(jié)點160的操作狀態(tài)以及對那些節(jié)點的通信的費用都可隨著時間 的過去而變化。例如,曾經(jīng)有效或空閑的節(jié)點160可能在稍后的時間變得 無效或繁忙,反之亦然。類似地,通信費用例如等待時間和/或經(jīng)濟費用可 能在一些時期期間較高而在另一些時期期間較低(例如,在峰值對非峰值 利用的時期期間 > 由于這個變化性,曾經(jīng)有效和費用低的寫入計劃可能 相當(dāng)不有效、費用較高、或甚至在另一時間不可行(例如,如果在寫入計 劃中指定的節(jié)點160變得繁忙、通信起來緩慢或無效)b
因此,在一些實施方式中,節(jié)點揀取器130可配置成根據(jù)與節(jié)點160 關(guān)聯(lián)的當(dāng)前狀態(tài)信息來動態(tài)地確定給定的寫入計劃,用于寫入給定對象30 的復(fù)本。 一般而言,動態(tài)確定的寫入計劃可考慮關(guān)于節(jié)點160的可觀察的 動態(tài)狀態(tài)信息。也就是說,動態(tài)確定的寫入計劃可作為可隨著時間的過去 而變化的節(jié)點狀態(tài)信息的函數(shù)而產(chǎn)生。因此,對給定對象30的動態(tài)確定 的寫入計劃本身可根據(jù)節(jié)點160的基本狀態(tài)信息隨著時間的過去而變化, 與可獨立于節(jié)點160的狀態(tài)而確定的靜態(tài)產(chǎn)生的寫入計劃相反。
如上所述,在寫入計劃的動態(tài)產(chǎn)生中可考慮很多不同類型的狀態(tài)信 息。 一般來說,節(jié)點160的狀態(tài)信息可包括關(guān)于給定節(jié)點160的狀態(tài)信息以及關(guān)于通信資源(例如,網(wǎng)絡(luò)資源)的狀態(tài)信息,通過該資源可訪問給
定的節(jié)點160。在不同實施方式中,關(guān)于給定節(jié)點160的狀態(tài)信息可包括 給定節(jié)點160的操作狀態(tài),例如給定節(jié)點160 (或與該節(jié)點關(guān)聯(lián)的應(yīng)用程 序?qū)嵗?是否處于由DFDD 110指示的0K、 INCOMMUNICADO或其它 操作狀態(tài)中,如上所述。關(guān)于給定節(jié)點160的狀態(tài)信息還可包括負載狀態(tài) 信息,其可比操作狀態(tài)信息更詳細地指示給定節(jié)點160的行為。例如,在 不同實施方式中,負載狀態(tài)信息可指示處理器利用、存儲器利用、存儲設(shè) 備容量利用、存儲設(shè)備輸入/輸出帶寬利用或相應(yīng)于給定節(jié)點160的網(wǎng)絡(luò)接 口帶寬利用的級別,或節(jié)點行為的任何其它可測量的方面。如上所述,在 一些實施方式中,除了操作狀態(tài)信息以外,負載狀態(tài)信息也可通過DFDD 110得到。
可稱為網(wǎng)絡(luò)費用信息的通信資源狀態(tài)信息可包括與到給定節(jié)點160的 一個或更短通信路徑的狀態(tài)有關(guān)的任何適當(dāng)?shù)男畔?。在不同實施方式中?網(wǎng)絡(luò)費用信息可指示與將消息傳送到給定節(jié)點160和/或從給定節(jié)點160傳 送出來相關(guān)的網(wǎng)絡(luò)通信等待時間,這可根據(jù)時間(例如,秒、毫秒等、 網(wǎng)絡(luò)跳數(shù)(例如,傳送消息的路由步驟的數(shù)量)或另一適當(dāng)?shù)亩攘縼肀磉_。 在一個實施方式中,網(wǎng)絡(luò)費用信息可包括可用于與給定節(jié)點160通信的有 效帶寬的指示(例如,數(shù)據(jù)傳輸?shù)乃俾?o在另一實施方式中,網(wǎng)絡(luò)費用 信息可包括與和給定節(jié)點160的網(wǎng)絡(luò)通信相關(guān)的經(jīng)濟費用。例如,這樣的 費用可表達為用于傳輸或接收一定數(shù)量的數(shù)據(jù)的付費率或網(wǎng)絡(luò)通信的任 何其它適當(dāng)?shù)馁M用或費率模型。
節(jié)點揀取器130在動態(tài)地確定對象30的寫入計劃中可通常使用節(jié)點 160的狀態(tài)信息的任何適當(dāng)?shù)暮瘮?shù)。在一些實施方式中,由節(jié)點揀取器130 實現(xiàn)的存儲策略(其可以是除了或代替前面所述的那些存儲策略)可為狀 態(tài)信息指定準則或要求,該狀態(tài)信息限制可能有資格包括在特定對象30 的寫入計劃中的節(jié)點160。在不同的實施方式中,這些策略可全局地(例如, 對于所有的對象30 )應(yīng)用于對象30的特定組(例如,包括在特定存儲類 或存儲桶中的、具有共同的鍵前綴,或另外地表示為組的成員的對象、 或應(yīng)用于各個對象30 (例如,相應(yīng)于規(guī)定將與對象30關(guān)聯(lián)的特定策略的客戶X或這些的任何適當(dāng)組合。作為例子,特定的存儲類可規(guī)定存儲策 略,該存儲策略要求某個最小數(shù)量的復(fù)本展示不多于某個最大的通信等待
時間。相應(yīng)地,在為該存儲類中的對象30開發(fā)寫入計劃中,節(jié)點揀取器 130可配置成根據(jù)節(jié)點160是否滿足指定的最大通信等待時間來選擇至少 一些節(jié)點160。
在一些實施方式種,節(jié)點揀取器130還可配置成根據(jù)對節(jié)點狀態(tài)信息 的最佳化的不同類型來產(chǎn)生寫入計劃。例如,作為指定與寫入計劃相關(guān)的 特定的最大網(wǎng)絡(luò)費用或其它費用的可選方案,存儲策略可指定費用應(yīng)在可 在特定的時間得到的資源中間被最小化。相應(yīng)地,節(jié)點揀取器130可配置 成例如通過選擇具有較低的網(wǎng)絡(luò)通信或其它相關(guān)費用的節(jié)點160來最小化 與寫入計劃相關(guān)的一個或更多費用。在一些實施方式中,這樣的最小化可 出現(xiàn)在存在其它限制時,例如指定其它節(jié)點狀態(tài)信息要求的其它存儲策 略。
此外,注意,在一些實施方式中, 一些節(jié)點狀態(tài)信息可以可預(yù)測的方 式隨著時間的過去而變化。例如,與數(shù)據(jù)中心300之間的網(wǎng)絡(luò)通信相關(guān)的 帶寬費用可根據(jù)定義明確的費率計劃來變化。在一些這樣的實施方式中, 最小化與寫入計劃相關(guān)的費用可包括識別一段時間,在該段時間期間應(yīng)執(zhí) 行寫入計劃的全部或一些,取決于與特定的時間段相關(guān)的費用。例如,節(jié) 點揀取器130可確定用于與遠程數(shù)據(jù)中心300通信的帶寬在某個未來的時 間比在當(dāng)前的時間更廉價,且可進一步確定,包括在遠程數(shù)據(jù)中心300的 節(jié)點160的寫入計劃的費用可通過在被確定的未來時間至少執(zhí)行指向遠程 數(shù)據(jù)中心的那些存儲操作來被最小化。該過程的一個可能的結(jié)果是,由節(jié) 點揀取器130產(chǎn)生的寫入計劃可指示應(yīng)延遲給定對象30的一些(或可能 全部)復(fù)本的產(chǎn)生直到被確定的未來時間。
很多不同的存儲策略可應(yīng)用于特定的對象30是可能的。進一步地, 在一些實例中,產(chǎn)生滿足與特定對象30關(guān)聯(lián)的每個存儲策略的單個寫入 計劃可能是不可能的。例如,與特定對象30關(guān)聯(lián)的存儲策略可指定,最 小數(shù)量的復(fù)本應(yīng)存儲和分布在最小數(shù)量的不同區(qū)域310內(nèi)。然而,在寫入 計劃為特定的對象30產(chǎn)生時,節(jié)點揀取器130正在其中執(zhí)行的區(qū)域310
103可由于瞬時通信故障而與其它區(qū)域310暫時隔離。結(jié)果,將復(fù)本成功地分 布到其它區(qū)域310以滿足相應(yīng)的存儲策略可能是至少暫時不可能的。
在一個實施方式中,節(jié)點揀取器130可配置成在最小化可由寫入計劃 滿足的存儲策略的數(shù)量的基礎(chǔ)上動態(tài)地確定對象30的寫入計劃。在存在 不是最佳的條件時,這可能導(dǎo)致表示滿足存儲策略的"盡力服務(wù)"的寫入計 劃。例如,在剛剛描述的特定情況中,區(qū)域多樣性策略可能由于通信故障 不是可以滿足的,但最少復(fù)制策略可通過將特定對象310的所要求的最小 數(shù)量的復(fù)本存儲在本地區(qū)域310內(nèi)是可以滿足的。在一些實施方式中,存 儲策略的最大化可發(fā)生在各種限制下。例如, 一些存儲策略可被識別為強 制性的,以便如果它們不是可以滿足的,則寫入計劃不能被確定,且存儲 對象的相應(yīng)客戶請求可能失敗。其它存儲策略可具有優(yōu)先等級或權(quán)重,以 便較高優(yōu)先級的存儲策略可優(yōu)先于較低優(yōu)先級的策略在最大化過程期間 被選擇。在另一實施方式中,通過最大化最終的存儲計劃的總的權(quán)重(在 所滿足的存儲策略的重要性的基礎(chǔ)上確定),而不是或除了被最終的存儲 計劃滿足的存儲策略的數(shù)量,可執(zhí)行存儲策略的選擇。
注意,用于動態(tài)地確定對象30的寫入計劃的各種技術(shù)不需要只出現(xiàn) 在對象30被最初存儲時。如上所述,在一些實施方式中,復(fù)制器180可 配置成檢查相應(yīng)于對象30的鍵映射項目144以確定對象30的復(fù)本是否是 可訪問的。如果特定對象30的任何復(fù)本是不可訪問的,則復(fù)制器180可 配置成從節(jié)點揀取器130請求可用于產(chǎn)生額外的復(fù)本的新的寫入計劃。新 的寫入計劃可由節(jié)點揀取器130使用上述技術(shù)的任何適當(dāng)?shù)慕M合動態(tài)地確 定。此外,在一些實施方式中,復(fù)制器180可配置成相對于各種存儲策略 更一般地監(jiān)控對象30的適應(yīng)性。例如,復(fù)制器180可配置成確定除了最 少復(fù)制策略或策略的任何其它適當(dāng)集合以外,對象30的現(xiàn)有的復(fù)本組是 否還滿足區(qū)域多樣性策略。在一個這樣的實施方式中,如果復(fù)制器180確 定被特定對象30的現(xiàn)有的復(fù)本滿足的策略的數(shù)量小于某個閾值,則復(fù)制 器180可從節(jié)點揀取器130請求可被動態(tài)地確定以最大化如上所述的被滿 足的存儲策略的數(shù)量的新存儲計劃。在可選的實施方式中,復(fù)制器180在 確定特定的強制性存儲策略不再被滿足時或當(dāng)確定被滿足的存儲策略的
1總權(quán)重落到閾值權(quán)重之下時可請求新的存儲方案。
圖27示出根據(jù)位存儲節(jié)點160的當(dāng)前狀態(tài)信息動態(tài)地確定用于存儲 數(shù)據(jù)對象的一個或更多復(fù)本的寫入計劃的方法的一個實施方式。在所示實 施方式中,操作在塊2700中開始,其中存儲給定對象30的客戶請求被接 收。在一個實施方式中,根據(jù)網(wǎng)絡(luò)服務(wù)協(xié)議通過網(wǎng)絡(luò)服務(wù)接口 100可接收 這樣的請求,如上詳細描述的。
隨后,根據(jù)位存儲節(jié)點160的當(dāng)前狀態(tài)信息來動態(tài)地確定用于存儲給 定對象30的復(fù)本的寫入計劃(塊2702 )b例如,節(jié)點揀取器130可配置成 根據(jù)可應(yīng)用于給定對象30的各種存儲策略來確定寫入計劃,其中這些策 略考慮任何適當(dāng)?shù)漠?dāng)前狀態(tài)信息,例如節(jié)點操作狀態(tài)、節(jié)點負載狀態(tài)信息、 網(wǎng)絡(luò)通信費用或如上面詳細描述的任何其它適當(dāng)?shù)臓顟B(tài)信息。此外,如上 所述,在一些實施方式中,動態(tài)地確定寫入計劃可包括對于狀態(tài)信息或存 儲策略的最佳化,例如通過最小化與寫入計劃相關(guān)的費用或最大化被寫入 計劃滿足的存儲策略的數(shù)量或權(quán)重。
給定對象30的復(fù)本可接著根據(jù)動態(tài)確定的寫入計劃存儲到一個或更 多位存儲節(jié)點160 (塊2704 )b例如,協(xié)調(diào)器120可配置成產(chǎn)生指向在寫 入計劃中指定的各個位存儲節(jié)點160的位存儲對象放置操作,如上所述。 在一些實施方式中,寫入計劃的一些存儲操作可在與其它操作不同的時間 執(zhí)行,如上所述。
如前面提到的,在一些實施方式中,寫入計劃可相對于對象30被動 態(tài)地確定,該對象30的一個或更多復(fù)本已經(jīng)被存儲在位節(jié)點160中間。 圖28示出這樣的方法的一個實施方式。在所示實施方式中,操作在塊2800 中開始,其中給定對象30的一個或更多現(xiàn)有復(fù)本被檢查。例如,如上所 述,復(fù)制器180的一個實施方式可配置成確定給定對象30的現(xiàn)有復(fù)本是 否是可訪問的,和/或給定對象30的現(xiàn)有復(fù)本滿足與該對象關(guān)聯(lián)的存儲策 略的程度。
響應(yīng)于檢査給定對象30的復(fù)本,可確定需要產(chǎn)生一個或更多額外的 復(fù)本(塊2802 )b例如,現(xiàn)有的復(fù)本可能失效或另外地變得不可訪問,導(dǎo) 致少于最小數(shù)量的復(fù)本??蛇x地,現(xiàn)有復(fù)本的狀態(tài)可能相對于一個或更多存儲策略是不足的。隨后,根據(jù)位存儲節(jié)點160的當(dāng)前狀態(tài)信息來動態(tài)地 確定用于存儲給定對象30的額外復(fù)本的寫入計劃(塊2804 )b以類似于前 面描述的方式或根據(jù)其任何適當(dāng)變形可確定這樣的寫入計劃。注意,在一 些實施方式中,如果確定對給定的對象30不需要產(chǎn)生額外的復(fù)本,則可 不確定寫入計劃。
給定對象30的復(fù)本接著根據(jù)動態(tài)確定的寫入計劃被存儲到一個或更 多位存儲節(jié)點160 (塊2806 )b例如,復(fù)制器180可配置成產(chǎn)生指向在寫 入計劃中指定的各個位存儲節(jié)點160的位存儲對象放置操作,如上所述, 或可簡單地指引存儲給定對象30的現(xiàn)有復(fù)本的一個或更多節(jié)點160來將 其復(fù)本拷貝到在寫入計劃中指定的一個或更多節(jié)點160。
示例性計算機系統(tǒng)實施方式
可以設(shè)想,在一些實施方式中,上述任何方法或技術(shù)可實現(xiàn)為能夠通 過計算機可訪問的介質(zhì)存儲或傳送的程序指令和數(shù)據(jù)。這樣的方法或技術(shù) 可包括例如且沒有限制地存儲客戶50、網(wǎng)絡(luò)服務(wù)平臺100、 DFDD 110、協(xié) 調(diào)器120、節(jié)點揀取器130、鍵映射實例140、位存儲節(jié)點160、復(fù)制器180 和/或復(fù)制符鍵映射190的功能。這樣的方法或技術(shù)可進一步包括在圖6-9、 13-15、 20-22和25-8中示出來的任何方法及其任何適當(dāng)?shù)淖冃???蓤?zhí)行這 樣的程序指令以履行特定的計算功能,例如特定的方法或上述方法的部
分,以及提供更一般的操作系統(tǒng)功能、應(yīng)用程序功能和/或任何其它適當(dāng)?shù)?功能。注意,在一些實施方式中,在上面被描述為獨立的組件或方法在其 它實施方式中可合并到比所示的那些更少的實體中,或功能可與從上述的 劃分不同地在組件和方法中劃分。
圖29中示出了包括計算機可訪問的介質(zhì)的計算機系統(tǒng)的一個示例性 實施方式。這樣的系統(tǒng)也可稱為節(jié)點。如前面所討論的,在一個實施方式 中,上述各種存儲系統(tǒng)組件的任何一個的功能可分布在很多節(jié)點中,以便 給定組件可由一個或更多節(jié)點實現(xiàn)或在一些節(jié)點中劃分。雖然在一些實施 方式中,節(jié)點可專門實現(xiàn)單個存儲服務(wù)系統(tǒng)組件的功能,但是在其它實施 方式中,節(jié)點可實現(xiàn)一些不同的系統(tǒng)組件的所有或部分的功能。在所示實 施方式中,計算機系統(tǒng)2900包括通過輸入/輸出(I/O )接口 2903耦合到系統(tǒng)存儲器2920的一個或更多處理器2910。計算機系統(tǒng)2900迸一步包括 耦合到1/0接口 2930的網(wǎng)絡(luò)接口 2940。
在不同實施方式中,計算機系統(tǒng)2900可為包括一個處理器2910的單 一處理器系統(tǒng),或包括一些處理器2910(例如,兩個、四個、八個或其它 適當(dāng)?shù)臄?shù)量)的多處理器系統(tǒng)。處理器2910可為能夠執(zhí)行指令的任何適 當(dāng)?shù)奶幚砥?。例如,在不同實施方式中,處理?910可為實現(xiàn)各種指令 集結(jié)構(gòu)(ISA )中的任一種,例如x86、 PowerPC、 SPARC或MIPS ISA或 任何其它適當(dāng)?shù)腎SA的通用或嵌入式處理器。在多處理器系統(tǒng)中,每個處 理器2910可通常但不是必要地實現(xiàn)相同的ISA。
系統(tǒng)存儲器2920可配置成存儲處理器2910可訪問的指令和數(shù)據(jù)。在 不同實施方式中,系統(tǒng)存儲器2920可使用任何適當(dāng)?shù)拇鎯ζ骷夹g(shù)來實現(xiàn), 例如靜態(tài)隨機存取存儲器(SRAM 、同步動態(tài)RAM ( SDRAM X非易失 性/閃型存儲器或任何其它類型的存儲器。在所示實施方式中,實現(xiàn)期望功 能的程序指令和數(shù)據(jù),例如上面詳細描述的那些存儲服務(wù)系統(tǒng)部件中的任 何一個和其它功能顯示為存儲在系統(tǒng)存儲器2920內(nèi)作為代碼2925。
在一個實施方式中,I/O接口 2930可配置成協(xié)調(diào)處理器2910、系統(tǒng)存 儲器2920和設(shè)備中任何外圍設(shè)備之間的I/O業(yè)務(wù),其中的外圍設(shè)備包括網(wǎng) 絡(luò)接口 2940或其它外圍接口。在一些實施方式中,I/O接口 2930可執(zhí)行 任何必要的協(xié)議、計時或其它數(shù)據(jù)轉(zhuǎn)換,以將數(shù)據(jù)信號從一個組件(例如, 系統(tǒng)存儲器2920 )轉(zhuǎn)換成適合于由另一組件(例如,處理器2910 )使用 的格式。在一些實施方式中,I/O接口 2930可包括對通過不同類型的外圍 總線連接的設(shè)備的支持,例如外圍部件互聯(lián)(PCI )總線標準或通用串行 總線(USB )標準的變型。在一些實施方式中,I/O接口 2930的功能可分 成兩個或更多分離的組件,例如北橋和南橋。此外,在一些實施方式中, 1/0接口 2930 ,例如系統(tǒng)存儲器2920的接口的一些或所有功能可直接合并 到處理器2910中。
網(wǎng)絡(luò)接口 2940可配置成允許數(shù)據(jù)在計算機系統(tǒng)2900和連接到網(wǎng)絡(luò)的 其它設(shè)備例如其它計算機系統(tǒng)之間交換。在不同實施方式中,網(wǎng)絡(luò)接口 2940可通過有線或無線一般數(shù)據(jù)網(wǎng)絡(luò)例如任何適當(dāng)類型的以太網(wǎng)絡(luò)、通過電信/電話網(wǎng)絡(luò)例如模擬語音網(wǎng)絡(luò)或數(shù)字光纖通信網(wǎng)絡(luò)、通過存儲局域網(wǎng)例
如光纖通道SAN或通過任何其它適當(dāng)類型的網(wǎng)絡(luò)和/或協(xié)議來支持通信。
在一些實施方式中,系統(tǒng)存儲器2920可為配置成存儲如上所述的程 序指令和數(shù)據(jù)的計算機可訪問的介質(zhì)的一個實施方式。然而,在其它實施 方式中,對不同類型的計算機可訪問的介質(zhì)可接收、發(fā)送或存儲程序指令 和/或數(shù)據(jù)。一般而言,計算機可訪問的介質(zhì)可包括存儲介質(zhì)或存儲器介質(zhì), 例如磁或光介質(zhì),例如通過I/O接口 2930耦合到計算機系統(tǒng)2900的磁盤 或CD/DVD-ROM。計算機可訪問的介質(zhì)還可包括任何易失性或非易失性 介質(zhì)例如RAM (例如,SDRAM、 DDRSDRAM、 RDRAM、 SRAM等、 ROM等,其可包括在計算機系統(tǒng)2900的一些實施方式中作為系統(tǒng)存儲器 2920或另一類型的存儲器。通過計算機可訪問的介質(zhì)存儲的程序指令和數(shù) 據(jù)可通過傳輸介質(zhì)或信號例如電、電磁或數(shù)字信號來傳輸,這些信號可通 過通信介質(zhì)例如可通過網(wǎng)絡(luò)接口 2940來實現(xiàn)的網(wǎng)絡(luò)和/或無線鏈接來傳 送。
雖然以相當(dāng)多的細節(jié)描述了上面的實施方式,當(dāng)上面的公開被充分認 識到時很多變形和更改對本領(lǐng)域的技術(shù)人員將變得明顯。意圖是下列的權(quán) 利要求被解釋為包括所有這樣的變形和更改。
權(quán)利要求
1.一種系統(tǒng),包括多個計算節(jié)點,所述計算節(jié)點被配置成實現(xiàn)網(wǎng)絡(luò)服務(wù)接口,其配置成根據(jù)網(wǎng)絡(luò)服務(wù)協(xié)議來接收對訪問數(shù)據(jù)對象的客戶請求,其中對訪問所述數(shù)據(jù)對象中給定的一個數(shù)據(jù)對象的所述客戶請求中給定的一個客戶請求包括相應(yīng)于所述給定的數(shù)據(jù)對象的鍵值;多個存儲節(jié)點,其配置成存儲所述數(shù)據(jù)對象的復(fù)本,其中所述復(fù)本中的每一個都是通過各自的定位器值可訪問的,且其中所述定位器值中的每一個在所述系統(tǒng)內(nèi)都是唯一的;鍵映射實例,其配置成為所述數(shù)據(jù)對象中的每一個存儲各自的鍵映射項目,其中對于所述給定的數(shù)據(jù)對象,所述各自的鍵映射項目包括所述鍵值和相應(yīng)于所述給定數(shù)據(jù)對象的每個存儲的復(fù)本的每個定位器值;以及協(xié)調(diào)器,其配置成從所述網(wǎng)絡(luò)服務(wù)接口接收對訪問所述數(shù)據(jù)對象的所述客戶請求,其中響應(yīng)于所述給定的客戶請求,所述協(xié)調(diào)器配置成訪問所述鍵映射實例以識別相應(yīng)于所述鍵值的一個或更多定位器值,并且對于所述一個或更多定位器值中特定的一個定位器值,訪問相應(yīng)的存儲節(jié)點以取回相應(yīng)的復(fù)本。
2 .如權(quán)利要求1所述的系統(tǒng),其中在取回所述相應(yīng)的復(fù)本之后,所 述協(xié)調(diào)器進一步配置成根據(jù)所述給定的客戶請求通過所述網(wǎng)絡(luò)服務(wù)接口 來將所述相應(yīng)的復(fù)本傳送到客戶。
3 .如權(quán)利要求1所述的系統(tǒng),其中所述網(wǎng)絡(luò)服務(wù)接口進一步配置成 在取回所述相應(yīng)的復(fù)本之前,確定所述給定的客戶請求是否被充分地給予 特權(quán)來訪問所述給定的數(shù)據(jù)對象,且如果所述給定的客戶請求沒有被充分 地給予特權(quán),則拒絕所述給定的客戶請求。
4 .如權(quán)利要求1所述的系統(tǒng),其中所述網(wǎng)絡(luò)服務(wù)接口進一步配置成根據(jù)所述網(wǎng)絡(luò)服務(wù)協(xié)議來接收存儲數(shù)據(jù)對象的客戶請求,其中存儲所述數(shù) 據(jù)對象中特定的一個數(shù)據(jù)對象的所述客戶請求中特定的一個客戶請求包 括相應(yīng)于所述特定的數(shù)據(jù)對象的鍵值。
5 .如權(quán)利要求4所述的系統(tǒng),其中所述網(wǎng)絡(luò)服務(wù)接口進一步配置成 確定用于存儲所述特定的數(shù)據(jù)對象的費用。
6 .如權(quán)利要求4所述的系統(tǒng),其中所述協(xié)調(diào)器進一步配置成從所述 網(wǎng)絡(luò)服務(wù)接口接收存儲數(shù)據(jù)對象的所述客戶請求,其中響應(yīng)于所述特定的 客戶請求,所述協(xié)調(diào)器配置成將所述特定的數(shù)據(jù)對象的一個或更多復(fù)本存 儲到一個或更多相應(yīng)的存儲節(jié)點,其中響應(yīng)于存儲所述特定的數(shù)據(jù)對象的 給定復(fù)本,所述存儲節(jié)點中給定的一個存儲節(jié)點配置成將相應(yīng)于所述給定 復(fù)本的定位器值返回到所述協(xié)調(diào)器。
7 .如權(quán)利要求5所述的系統(tǒng),其中所述協(xié)調(diào)器進一步配置成指導(dǎo)所 述鍵映射實例更新相應(yīng)于所述特定的數(shù)據(jù)對象的所述各自的鍵映射項目, 以包括相應(yīng)于所述給定的復(fù)本的所述定位器值。
8 .如權(quán)利要求5所述的系統(tǒng),其中根據(jù)存儲策略來選擇所述特定的 數(shù)據(jù)對象中的所述一個或更多復(fù)本被存儲到的所述一個或更多相應(yīng)的存儲節(jié)點o
9 .如權(quán)利要求8所述的系統(tǒng),其中所述存儲策略指定在所述協(xié)調(diào)器 指示存儲所述特定的數(shù)據(jù)對象的所述特定的客戶請求被完成之前,需要被 指示為持久地存儲到相應(yīng)的存儲節(jié)點的復(fù)本的數(shù)量。
10 .如權(quán)利要求9所述的系統(tǒng),其中所述存儲策略額外地指定將產(chǎn)生 的所述特定的數(shù)據(jù)對象的復(fù)本的期望的數(shù)量。
11 .如權(quán)利要求IO所述的系統(tǒng),其中所述復(fù)本的期望的數(shù)量超過所述 復(fù)本的數(shù)量。
12 .如權(quán)利要求10所述的系統(tǒng),其中所述多個計算節(jié)點進一步配置 成實現(xiàn)復(fù)制器,所述復(fù)制器配置成檢查所述鍵映射實例的所述各自的鍵映 射項目,以確定對于所述鍵映射項目的給定的一個鍵映射項目,相應(yīng)于所 述給定鍵映射項目中的各自的定位器值的每個復(fù)本是否是可訪問的。
13 .如權(quán)利要求12所述的系統(tǒng),其中對于所述給定的鍵映射項目, 如果相應(yīng)于所述給定鍵映射項目中的各自定位器值的可訪問的復(fù)本的數(shù) 量小于所述復(fù)本的期望的數(shù)量,則所述復(fù)制器進一步配置成產(chǎn)生足以滿足 新述復(fù)本的期望的數(shù)量的額外的復(fù)本。
14 .如權(quán)利要求8所述的系統(tǒng),其中所述多個存儲節(jié)點分布在多個區(qū) 域中間,且其中所述存儲策略指定在所述協(xié)調(diào)器指示存儲所述特定的數(shù)據(jù) 對象的所述特定的客戶請求被完成之前,所述一個或更多復(fù)本需要被指示 為持久地存儲到的區(qū)域的最小數(shù)量。
15 .如權(quán)利要求14所述的系統(tǒng),其中存儲節(jié)點故障的可能性在所述 多個區(qū)域的中任何兩個區(qū)域之間的相關(guān)性小于閾值數(shù)量。
16 .如權(quán)利要求14所述的系統(tǒng),其中如果可能,則所述存儲策略額 外地指定所述一個或更多復(fù)本中的至少一個將被寫到位于所述區(qū)域中的 給定的一個區(qū)域中的存儲節(jié)點,其中所述協(xié)調(diào)器也位于所述給定的區(qū)域 內(nèi)。
17 .如權(quán)利要求8所述的系統(tǒng),其中所述多個存儲節(jié)點分布在多個區(qū) 域中間,且其中如果可能,則所述存儲策略指定所述一個或更多復(fù)本中的 至少一個將被寫到位于所述區(qū)域中的給定的一個區(qū)域中的存儲節(jié)點。
18 .如權(quán)利要求17所述的系統(tǒng),其中所述給定的區(qū)域是根據(jù)所述存 儲策略來選擇的,以最小化所述給定的區(qū)域和與所述特定的客戶請求相關(guān) 聯(lián)的客戶之間的通信等待時間。
19 .如權(quán)利要求1所述的系統(tǒng),其中相應(yīng)于所述給定的數(shù)據(jù)對象的所 述鍵值是由客戶通過所述網(wǎng)絡(luò)服務(wù)接口指定的。
20 .如權(quán)利要求1所述的系統(tǒng),其中通過所述網(wǎng)絡(luò)服務(wù)接口接收的對 訪問所述給定的數(shù)據(jù)對象的所述客戶請求中的特定的一個客戶請求包括 相應(yīng)于所述給定的數(shù)據(jù)對象的特定復(fù)本的特定的定位器值。
21 .如權(quán)利要求20所述的系統(tǒng),其中響應(yīng)于從所述網(wǎng)絡(luò)服務(wù)接口接 收對訪問的所述特定的客戶請求,所述協(xié)調(diào)器進一步配置成借助于所述特 定的定位器值從相應(yīng)的存儲節(jié)點取回所述特定的復(fù)本,而不訪問所述鍵映射實例。
22 .如權(quán)利要求1所述的系統(tǒng),其中所述網(wǎng)絡(luò)服務(wù)協(xié)議實現(xiàn)具象狀態(tài) 傳輸(REST)網(wǎng)絡(luò)服務(wù)模型。
23 .如權(quán)利要求22所述的系統(tǒng),其中為了根據(jù)所述網(wǎng)絡(luò)服務(wù)協(xié)議接 收所述給定的客戶請求,所述網(wǎng)絡(luò)服務(wù)接口進一步配置成接收根據(jù)超文本 傳輸協(xié)議(HTTP )的版本格式化的請求。
24 .如權(quán)利要求23所述的系統(tǒng),其中所述給定的客戶請求的內(nèi)容作 為根據(jù)可擴展標記語言(XML )的版本格式化的參數(shù)而被包括在所述請求 中。
25 .如權(quán)利要求1所述的系統(tǒng),其中所述網(wǎng)絡(luò)服務(wù)協(xié)議實現(xiàn)基于文檔 的網(wǎng)絡(luò)服務(wù)模型。
26 .如權(quán)利要求25所述的系統(tǒng),其中為了根據(jù)所述網(wǎng)絡(luò)服務(wù)協(xié)議接 收所述給定的客戶請求,所述網(wǎng)絡(luò)服務(wù)接口進一步配置成接收根據(jù)簡單對 象訪問協(xié)議(SOAP )的版本封裝的文檔,其中所述給定的客戶請求的內(nèi) 容被包括在所述文檔內(nèi)并根據(jù)XML的版本被格式化。
27 .如權(quán)利要求1所述的系統(tǒng),其中所述鍵映射實例進一步配置成在 索引數(shù)據(jù)結(jié)構(gòu)內(nèi)索引所述鍵映射實例存儲的鍵映射項目,所述索引數(shù)據(jù)結(jié) 構(gòu)包括分等級布置的多個索引節(jié)點且每個索引節(jié)點都具有相關(guān)聯(lián)的標記 值,其中每個所述存儲的鍵映射項目相應(yīng)于所述索引節(jié)點中的各自的一個 索引節(jié)點,且其中對于具有給定的相應(yīng)索引節(jié)點的所述給定的鍵映射項 目,與所述給定的相應(yīng)索引節(jié)點的每個先輩關(guān)聯(lián)的每個標記值是所述給定 的鍵值的前綴。
28 . —種方法,包括以下步驟根據(jù)網(wǎng)絡(luò)服務(wù)協(xié)議通過網(wǎng)絡(luò)服務(wù)接口接收對訪問數(shù)據(jù)對象的客戶請 求,其中對訪問所述數(shù)據(jù)對象中的給定的一個數(shù)據(jù)對象的所述客戶請求中 的給定的一個客戶請求包括相應(yīng)于所述給定的數(shù)據(jù)對象的鍵值;將所述數(shù)據(jù)對象的復(fù)本存儲在多個存儲節(jié)點上,其中所述復(fù)本中的每 —個都是通過各自的定位器值可訪問的,且其中所述定位器值中的每一個在所述系統(tǒng)內(nèi)都是唯一的;為所述數(shù)據(jù)對象中的每一個數(shù)據(jù)對象存儲各自的鍵映射項目,其中對 于所述給定的數(shù)據(jù)對象,所述各自的鍵映射項目包括所述客戶指定的鍵值 和相應(yīng)于所述給定的數(shù)據(jù)對象的每個存儲的復(fù)本的每個定位器值;以及響應(yīng)于所述給定的客戶請求,訪問所述各自的鍵映射項目以識別相應(yīng) 于所述鍵值的一個或更多定位器值,并且對于所述一個或更多定位器值中 特定的一個定位器值,訪問相應(yīng)的存儲節(jié)點并取回相應(yīng)的復(fù)本。
29 .如權(quán)利要求28所述的方法,進一步包括根據(jù)所述給定的客戶請 求通過所述網(wǎng)絡(luò)服務(wù)接口來將所述取回的相應(yīng)復(fù)本傳送到客戶。
30 .如權(quán)利要求28所述的方法,進一步包括在取回所述相應(yīng)的復(fù)本 之前,確定所述給定的客戶請求是否被充分地給予特權(quán)來訪問所述給定的 數(shù)據(jù)對象,且如果所述給定的客戶請求沒有被充分地給予特權(quán),則拒絕所 述給定的客戶請求。
31 .如權(quán)利要求28所述的方法,進一步包括根據(jù)所述網(wǎng)絡(luò)服務(wù)協(xié)議通過所述網(wǎng)絡(luò)服務(wù)接口接收存儲數(shù)據(jù)對象的 客戶請求,其中存儲所述數(shù)據(jù)對象中所述特定的一個數(shù)據(jù)對象的所述客戶 請求中的特定的一個客戶請求包括相應(yīng)于所述特定的數(shù)據(jù)對象的鍵值。
32 .如權(quán)利要求31所述的方法,進一步包括確定用于存儲所述特定 的數(shù)據(jù)對象的費用。
33 .如權(quán)利要求31所述的方法,進一步包括響應(yīng)于所述特定的客戶請求,將所述特定的數(shù)據(jù)對象的一個或更多復(fù) 本存儲到一個或更多相應(yīng)的存儲節(jié)點;以及響應(yīng)于將所述特定的數(shù)據(jù)對象的給定的復(fù)本存儲到所述存儲節(jié)點中 給定的一個存儲節(jié)點,來接收相應(yīng)于所述給定復(fù)本的定位器值。
34 .如權(quán)利要求33所述的方法,進一步包括更新相應(yīng)于所述特定的 數(shù)據(jù)對象的所述各自的鍵映射項目,以包括相應(yīng)于所述給定的復(fù)本的所述 定位器值。
35 .如權(quán)利要求33所述的方法,進一步包括根據(jù)存儲策略來選擇所 述特定的數(shù)據(jù)對象的所述一個或更多復(fù)本被存儲到的所述一個或更多相 應(yīng)的存儲節(jié)點。
36 .如權(quán)利要求35所述的方法,其中所述存儲策略指定在所述協(xié)調(diào) 器指示存儲所述特定的數(shù)據(jù)對象的所述特定的客戶請求完成之前,需要被 指示為持久地存儲到相應(yīng)的存儲節(jié)點的復(fù)本的數(shù)量。
37 .如權(quán)利要求36所述的方法,其中所述存儲策略額外地指定待被 產(chǎn)生的所述特定的數(shù)據(jù)對象的復(fù)本的期望的數(shù)量。
38 .如權(quán)利要求37所述的方法,其中所述復(fù)本的期望的數(shù)量超過所 述復(fù)本的數(shù)量。
39 .如權(quán)利要求37所述的方法,進一步包括檢查所述各自的鍵映射 項目,以確定對于所述鍵映射項目的給定的一個鍵映射項目,相應(yīng)于所述 給定的鍵映射項目中的各自的定位器值的每個復(fù)本是否是可訪問的。
40 .如權(quán)利要求39所述的方法,進一步包括對于所述給定的鍵映射項目,如果相應(yīng)于所述給定鍵映射項目中的各 自的定位器值的可訪問的復(fù)本的數(shù)量小于所述復(fù)本的期望的數(shù)量,則產(chǎn)生 足以滿足所述復(fù)本的期望的數(shù)量的額外的復(fù)本。
41 .如權(quán)利要求35所述的方法,其中所述多個存儲節(jié)點被分布在多 個區(qū)域中間,且其中所述存儲策略指定在所述協(xié)調(diào)器指示存儲所述特定的 數(shù)據(jù)對象的所述特定的客戶請求完成之前,所述一個或更多復(fù)本需要被指 示為持久地存儲到的區(qū)域的最小數(shù)量。
42 .如權(quán)利要求41所述的方法,其中存儲節(jié)點故障的可能性在所述 多個區(qū)域的任何兩個區(qū)域之間的相關(guān)性小于閾值數(shù)量。
43 .如權(quán)利要求41所述的方法,其中如果可能,則所述存儲策略額 外地指定所述一個或更多復(fù)本中的至少一個復(fù)本將被寫到位于所述區(qū)域 中的給定的一個區(qū)域中的存儲節(jié)點,其中所述協(xié)調(diào)器也位于所述給定的區(qū) 域內(nèi)。
44 .如權(quán)利要求35所述的方法,其中所述多個存儲節(jié)點分布在多個 區(qū)域中間,且其中如果可能,則所述存儲策略指定所述一個或更多復(fù)本中 的至少一個復(fù)本將被寫到位于所述區(qū)域中的給定的一個區(qū)域中的存儲節(jié)
45 .如權(quán)利要求44所述的方法,其中所述給定的區(qū)域是根據(jù)所述存 儲策略來選擇的,以最小化所述給定的區(qū)域和與所述特定的客戶請求相關(guān) 聯(lián)的客戶之間的通信等待時間。
46 .如權(quán)利要求28所述的方法,其中相應(yīng)于所述給定的數(shù)據(jù)對象的 所述鍵值是由客戶通過所述網(wǎng)絡(luò)服務(wù)接口指定的。
47 .如權(quán)利要求28所述的方法,其中對由所述網(wǎng)絡(luò)服務(wù)接口接收的 訪問所述給定數(shù)據(jù)對象的所述客戶請求中特定的一個客戶請求包括相應(yīng) 于所述給定的數(shù)據(jù)對象的特定復(fù)本的特定的定位器值。
48 .如權(quán)利要求47所述的方法,進一步包括響應(yīng)于從所述網(wǎng)絡(luò)服務(wù)接口接收對訪問的所述特定的客戶請求,借助 于所述特定的定位器值從相應(yīng)的存儲節(jié)點取回所述特定的復(fù)本,而不訪問 所述各自的鍵映射項目中的任何一個。
49 .如權(quán)利要求28所述的方法,其中所述網(wǎng)絡(luò)服務(wù)協(xié)議實現(xiàn)具象狀 態(tài)傳輸(REST )網(wǎng)絡(luò)服務(wù)模型。
50 .如權(quán)利要求49所述的方法,其中根據(jù)所述網(wǎng)絡(luò)服務(wù)協(xié)議接收所 述給定的客戶請求的所述步驟包括接收根據(jù)超文本傳輸協(xié)議(HTTP )的 版本格式化的請求。
51 .如權(quán)利要求49所述的方法,其中所述給定客戶請求的內(nèi)容作為 根據(jù)可擴展標記語言(XML )的版本格式化的參數(shù)被包括在所述請求中。
52 .如權(quán)利要求28所述的方法,其中所述網(wǎng)絡(luò)服務(wù)協(xié)議實現(xiàn)基于文 檔的網(wǎng)絡(luò)服務(wù)模型。
53 .如權(quán)利要求52所述的方法,其中根據(jù)所述網(wǎng)絡(luò)服務(wù)協(xié)議接收所 述給定的客戶請求的所述步驟包括接收根據(jù)簡單對象訪問協(xié)議(SOAP )的版本封裝的文檔,其中所述給定的客戶請求的內(nèi)容被包括在所述文檔內(nèi)并根據(jù)XML的版本被格式化。
54 .如權(quán)利要求28所述的方法,其中為所述數(shù)據(jù)對象中的每一個存 儲所述各自的鍵映射項目的所述步驟包括在索引數(shù)據(jù)結(jié)構(gòu)內(nèi)索引所述鍵 映射項目,所述索引數(shù)據(jù)結(jié)構(gòu)包括分等級布置的多個索引節(jié)點且每個索引 節(jié)點都具有相關(guān)聯(lián)的標記值,其中每個所述鍵映射項目相應(yīng)于所述索引節(jié) 點中各自的一個,且其中對于具有給定的相應(yīng)索引節(jié)點的所述鍵映射項目 中的給定的一個鍵映射項目,與所述給定的相應(yīng)索引節(jié)點的每個先輩關(guān)聯(lián) 的每個標記值是所述給定的鍵值的前綴。
55 . —種包括指令的計算機可訪問的介質(zhì),其中所述指令可執(zhí)行來處理對訪問數(shù)據(jù)對象的客戶請求,其中對訪問所述數(shù)據(jù)對象的所述客 戶請求是根據(jù)網(wǎng)絡(luò)服務(wù)協(xié)議通過網(wǎng)絡(luò)服務(wù)接口而被接收的,且其中對訪問 所述數(shù)據(jù)對象中的給定的一個數(shù)據(jù)對象的所述客戶請求中給定的一個客 戶請求包括相應(yīng)于所述給定數(shù)據(jù)對象的鍵值;指導(dǎo)所述數(shù)據(jù)對象的復(fù)本被存儲在多個存儲節(jié)點上,其中所述復(fù)本中 的每一個都是通過各自的定位器值可訪問的,且其中所述定位器值中的每 一個在所述系統(tǒng)內(nèi)都是唯一的;以及指導(dǎo)為所述數(shù)據(jù)對象中的每一個存儲各自的鍵映射項目,其中對于所 述給定的數(shù)據(jù)對象,所述各自的鍵映射項目包括所述客戶指定的鍵值和相 應(yīng)于所述給定數(shù)據(jù)對象的每個存儲的復(fù)本的每個定位器值;其中處理所述給定的客戶請求的所述步驟包括,訪問所述各自的鍵映 射項目以識別相應(yīng)于所述鍵值的一個或更多定位器值,并且對于所述一個 或更多定位器值中特定的一個,訪問相應(yīng)的存儲節(jié)點并取回相應(yīng)的復(fù)本。
56 .如權(quán)利要求55所述的計算機可訪問的介質(zhì),其中所述指令進一 步可執(zhí)行來處理存儲數(shù)據(jù)對象的客戶請求,其中存儲數(shù)據(jù)對象的所述客戶請求是 根據(jù)所述網(wǎng)絡(luò)服務(wù)協(xié)議通過所述網(wǎng)絡(luò)服務(wù)接口而被接收的,且其中存儲所 述數(shù)據(jù)對象中所述特定的一個數(shù)據(jù)對象的所述客戶請求中特定的一個客戶請求包括相應(yīng)于所述特定的數(shù)據(jù)對象的鍵值。
57 .如權(quán)利要求56所述的計算機可訪問的介質(zhì),其中所述指令進一 步可執(zhí)行來確定用于存儲所述特定的數(shù)據(jù)對象的費用。
58 .如權(quán)利要求56所述的計算機可訪問的介質(zhì),其中所述指令進一 步可執(zhí)行來響應(yīng)于所述特定的客戶請求,將所述特定的數(shù)據(jù)對象的一個或更多復(fù) 本存儲到一個或更多相應(yīng)的存儲節(jié)點;以及響應(yīng)于將所述特定的數(shù)據(jù)對象的給定復(fù)本存儲到所述存儲節(jié)點中給 定的一個存儲節(jié)點,接收相應(yīng)于所述給定的復(fù)本的定位器值。
59 .如權(quán)利要求57所述的計算機可訪問的介質(zhì),其中所述指令進一 步可執(zhí)行來指導(dǎo)相應(yīng)于所述特定的數(shù)據(jù)對象的所述各自的鍵映射項目被 更新,以包括相應(yīng)于所述給定復(fù)本的所述定位器值。
60 .如權(quán)利要求58所述的計算機可訪問的介質(zhì),其中所述指令進一 步可執(zhí)行來指導(dǎo)根據(jù)存儲策略來選擇所述特定的數(shù)據(jù)對象的所述一個或 更多復(fù)本被存儲到的所述一個或更多相應(yīng)的存儲節(jié)點。
61 .如權(quán)利要求60所述的計算機可訪問的介質(zhì),其中所述存儲策略 指定在所述協(xié)調(diào)器指示存儲所述特定的數(shù)據(jù)對象的所述特定的客戶請求 完成之前,需要被指示為持久地存儲到相應(yīng)的存儲節(jié)點的復(fù)本的數(shù)量。
62 .如權(quán)利要求61所述的計算機可訪問的介質(zhì),其中所述存儲策略 額外地指定待被產(chǎn)生的所述特定的數(shù)據(jù)對象的復(fù)本的期望的數(shù)量。
63 .如權(quán)利要求62所述的計算機可訪問的介質(zhì),其中所述復(fù)本的期 望的數(shù)量超過所述復(fù)本的數(shù)量。
64 .如權(quán)利要求60所述的計算機可訪問的介質(zhì),其中所述多個存儲 節(jié)點分布在多個區(qū)域中間,且其中所述存儲策略指定在所述協(xié)調(diào)器指示存 儲所述特定的數(shù)據(jù)對象的所述特定的客戶請求完成之前,所述一個或更多 復(fù)本需要被指示為持久地存儲到的區(qū)域的最小數(shù)量。
65 .如權(quán)利要求64所述的計算機可訪問的介質(zhì),其中存儲節(jié)點故障的可能性在所述多個區(qū)域的任何兩個之間的相關(guān)性小于閾值數(shù)量。
66 .如權(quán)利要求64所述的計算機可訪問的介質(zhì),其中如果可能,則 所述存儲策略額外地指定所述一個或更多復(fù)本中的至少一個復(fù)本將被寫 到位于所述區(qū)域的給定的一個區(qū)域中的存儲節(jié)點,其中所述協(xié)調(diào)器也位于 所述給定區(qū)域內(nèi)。
67 .如權(quán)利要求60所述的計算機可訪問的介質(zhì),其中所述多個存儲 節(jié)點分布在多個區(qū)域中間,且其中如果可能,則所述存儲策略指定所述一 個或更多復(fù)本中的至少一個復(fù)本將被寫到位于所述區(qū)域的給定的一個區(qū) 域中的存儲節(jié)點。
68 .如權(quán)利要求67所述的計算機可訪問的介質(zhì),其中所述給定的區(qū) 域是根據(jù)所述存儲策略來選擇的,以最小化所述給定區(qū)域和與所述特定的 客戶請求相關(guān)聯(lián)的客戶之間的通信等待時間。
69 .如權(quán)利要求55所述的計算機可訪問的介質(zhì),其中對訪問所述給 定數(shù)據(jù)對象的所述客戶請求中特定的一個客戶請求包括相應(yīng)于所述給定 數(shù)據(jù)對象的特定復(fù)本的特定的定位器值。
70 .如權(quán)利要求69所述的計算機可訪問的介質(zhì),其中所述指令進一 步可執(zhí)行來響應(yīng)于對訪問的所述特定的客戶請求,通過所述特定的定位器值從相 應(yīng)的存儲節(jié)點取回所述特定的復(fù)本,而不訪問所述各自的鍵映射項目中的 任何一個。
71 .如權(quán)利要求55所述的計算機可訪問的介質(zhì),其中所述網(wǎng)絡(luò)服務(wù) 協(xié)議實現(xiàn)具象狀態(tài)傳輸(REST )網(wǎng)絡(luò)服務(wù)模型。
72 .如權(quán)利要求71所述的計算機可訪問的介質(zhì),其中根據(jù)所述網(wǎng)絡(luò) 服務(wù)協(xié)議接收所述給定的客戶請求的所述步驟包括接收根據(jù)超文本傳輸 協(xié)議(HTTP )的版本格式化的請求。
73 .如權(quán)利要求72所述的計算機可訪問的介質(zhì),其中所述給定客戶 請求的內(nèi)容作為根據(jù)可擴展標記語言(XML )的版本格式化的參數(shù)被包括 在所述請求中。
74 .如權(quán)利要求55所述的計算機可訪問的介質(zhì),其中所述網(wǎng)絡(luò)服務(wù) 協(xié)議實現(xiàn)基于文檔的網(wǎng)絡(luò)服務(wù)模型。
75 .如權(quán)利要求74所述的計算機可訪問的介質(zhì),其中根據(jù)所述網(wǎng)絡(luò) 服務(wù)協(xié)議接收所述給定的客戶請求的所述步驟包括接收根據(jù)簡單對象訪 問協(xié)議(SOAP )的版本封裝的文檔,其中所述給定的客戶請求的內(nèi)容被 包括在所述文檔內(nèi)并根據(jù)XML的版本被格式化。
全文摘要
一種分布式的基于網(wǎng)絡(luò)服務(wù)的存儲系統(tǒng)。系統(tǒng)可包括配置成根據(jù)網(wǎng)絡(luò)服務(wù)協(xié)議接收對給定的數(shù)據(jù)對象的訪問的給定客戶請求的網(wǎng)絡(luò)服務(wù)接口,該請求包括相應(yīng)于對象的鍵值。系統(tǒng)還可包括配置成存儲對象的復(fù)本的存儲節(jié)點,和配置成為每個對象存儲相應(yīng)的鍵映射項目的鍵映射實例,其中通過相應(yīng)的唯一定位器值可訪問每個復(fù)本。對于給定的對象,相應(yīng)的鍵映射項目包括鍵值和相應(yīng)于對象的復(fù)本的每個定位器值。協(xié)調(diào)器可從網(wǎng)絡(luò)服務(wù)接口接收給定的客戶請求,響應(yīng)性地訪問鍵映射實例以識別相應(yīng)于鍵值的定位器值,且對于特定的定位器值,從相應(yīng)的存儲節(jié)點取回相應(yīng)的復(fù)本。
文檔編號G06F17/30GK101496005SQ200680053577
公開日2009年7月29日 申請日期2006年11月30日 優(yōu)先權(quán)日2005年12月29日
發(fā)明者A·B·阿特拉斯, A·H·弗穆倫, A·K·弗西曼, D·M·巴斯, E·M·瓦格納, J·C·索倫森三世, J·D·科米 申請人:亞馬遜科技公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1