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

從分布式存儲(chǔ)系統(tǒng)的高效數(shù)據(jù)讀取的制作方法

文檔序號(hào):11851495閱讀:318來(lái)源:國(guó)知局
從分布式存儲(chǔ)系統(tǒng)的高效數(shù)據(jù)讀取的制作方法與工藝

本公開(kāi)內(nèi)容涉及從分布式存儲(chǔ)系統(tǒng)的高效數(shù)據(jù)讀取。



背景技術(shù):

分布式系統(tǒng)通常包括許多松散耦合的計(jì)算機(jī),這些計(jì)算機(jī)中的每個(gè)計(jì)算機(jī)通常包括計(jì)算資源(例如,一個(gè)或多個(gè)處理器)和/或存儲(chǔ)資源(例如存儲(chǔ)器、閃速存儲(chǔ)器和/或盤(pán))。分布式系統(tǒng)將存儲(chǔ)抽象(例如,鍵/值存儲(chǔ)或文件系統(tǒng))疊加在分布式系統(tǒng)的存儲(chǔ)資源上。在分布式存儲(chǔ)系統(tǒng)中,運(yùn)行在計(jì)算機(jī)上的服務(wù)器進(jìn)程能夠?qū)⒃撚?jì)算機(jī)的存儲(chǔ)資源導(dǎo)出到運(yùn)行在其他計(jì)算機(jī)上的客戶(hù)端進(jìn)程。遠(yuǎn)程過(guò)程調(diào)用(RPC)可以將數(shù)據(jù)從服務(wù)器進(jìn)程轉(zhuǎn)移到客戶(hù)端進(jìn)程。備選地,遠(yuǎn)程直接存儲(chǔ)器訪(fǎng)問(wèn)(RDMA)基元(primitive)可以用于將數(shù)據(jù)從服務(wù)器硬件轉(zhuǎn)移到客戶(hù)端進(jìn)程。



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

本公開(kāi)內(nèi)容的一個(gè)方面提供一種在分布式存儲(chǔ)系統(tǒng)中分發(fā)數(shù)據(jù)的方法。該方法包括將文件接收到非瞬態(tài)存儲(chǔ)器中并使用與非瞬態(tài)存儲(chǔ)器進(jìn)行通信的計(jì)算機(jī)處理器來(lái)將接收到的文件劃分成塊。該方法還包括將數(shù)據(jù)塊中的一個(gè)或多個(gè)數(shù)據(jù)塊和非數(shù)據(jù)塊中的一個(gè)或多個(gè)非數(shù)據(jù)塊分組到組中。該組中的一個(gè)或多個(gè)塊能夠根據(jù)該組中的其他塊來(lái)被重構(gòu)。該方法可選地還包括基于分布式存儲(chǔ)系統(tǒng)的層次結(jié)構(gòu)來(lái)將該組中的各塊分發(fā)到分布式存儲(chǔ)系統(tǒng)的各存儲(chǔ)設(shè)備。該層次結(jié)構(gòu)包括具有活躍狀態(tài)和不活躍狀態(tài)的維護(hù)域。此外,每個(gè)存儲(chǔ)設(shè)備與維護(hù)域相關(guān)聯(lián)。組中的各塊跨多個(gè)維護(hù)域被分發(fā)以在維護(hù)域處于不活躍狀態(tài)時(shí)維持重構(gòu)該組中的各塊的能力。

本公開(kāi)內(nèi)容的實(shí)現(xiàn)方式可以包括以下任選特征中的一個(gè)或多個(gè)。在一些實(shí)現(xiàn)方式中,該方法還包括限制組中分發(fā)到任一維護(hù)域的存儲(chǔ)設(shè)備的塊的數(shù)量。

在一些實(shí)現(xiàn)方式中,該方法包括通過(guò)確定與組中的塊的數(shù)量相匹配的對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇并確定對(duì)存儲(chǔ)設(shè)備的選擇是否能夠在一個(gè)或多個(gè)單元處于不活躍狀態(tài)時(shí)維持該組的可訪(fǎng)問(wèn)性來(lái)確定該組中的各塊在各存儲(chǔ)設(shè)備之中的分發(fā)。在一些示例中,當(dāng)對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇不能夠在一個(gè)或多個(gè)維護(hù)域處于不活躍狀態(tài)時(shí)維持該組的可訪(fǎng)問(wèn)性時(shí),該方法還包括確定與該組中的塊的數(shù)量相匹配的對(duì)存儲(chǔ)設(shè)備的第二隨機(jī)選擇或者通過(guò)添加或去除一個(gè)或多個(gè)隨機(jī)選擇的存儲(chǔ)設(shè)備來(lái)修改對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇。該方法還可以包括使用簡(jiǎn)單采樣、概率采樣、分層采樣或聚類(lèi)采樣來(lái)確定對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇。

在一些實(shí)現(xiàn)方式中,該方法包括通過(guò)從分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)設(shè)備的有序循環(huán)列表選擇與該組中的塊的數(shù)量相等的連續(xù)數(shù)量的存儲(chǔ)設(shè)備來(lái)確定該組中的各塊在各存儲(chǔ)設(shè)備之中的分發(fā)。當(dāng)所選擇的存儲(chǔ)設(shè)備全體都不能夠在一個(gè)或多個(gè)維護(hù)域處于不活躍狀態(tài)時(shí)維持該組的可訪(fǎng)問(wèn)性時(shí),該方法還包括從有序循環(huán)列表選擇與該組中的塊的數(shù)量相等的另一連續(xù)數(shù)量的存儲(chǔ)設(shè)備。該方法可以包括確定分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)設(shè)備的有序循環(huán)列表。有序循環(huán)列表上的相鄰存儲(chǔ)設(shè)備與不同的維護(hù)域相關(guān)聯(lián)。在一些示例中,有序循環(huán)列表上的閾值數(shù)量的連續(xù)存儲(chǔ)設(shè)備各自可以與不同的維護(hù)域相關(guān)聯(lián)或者每個(gè)存儲(chǔ)設(shè)備可以處于不同的地理位置。

在一些實(shí)現(xiàn)方式中,該方法包括(例如,使用計(jì)算機(jī)處理器)確定維護(hù)域的維護(hù)層次結(jié)構(gòu),其中維護(hù)層次結(jié)構(gòu)具有維護(hù)級(jí)別并且每個(gè)維護(hù)級(jí)別包括一個(gè)或多個(gè)維護(hù)域。該方法還包括將每個(gè)維護(hù)域映射到至少一個(gè)存儲(chǔ)設(shè)備。在一些示例中,每個(gè)維護(hù)域可以包括由單個(gè)功率分布單元或單個(gè)功率母線(xiàn)槽供電的存儲(chǔ)設(shè)備。

該方法可以包括將接收到的文件劃分成條帶。每個(gè)文件包括錯(cuò)誤校正編碼。錯(cuò)誤校正編碼是嵌套編碼或分層編碼中的一種。非數(shù)據(jù)塊包括編碼檢查塊、字檢查塊以及編碼檢查字檢查塊。

本公開(kāi)內(nèi)容的另一方面提供一種用于在分布式存儲(chǔ)系統(tǒng)中分發(fā)數(shù)據(jù)的系統(tǒng)。該系統(tǒng)包括非瞬態(tài)存儲(chǔ)器、計(jì)算機(jī)處理器和存儲(chǔ)設(shè)備。非瞬態(tài)存儲(chǔ)器接收文件。計(jì)算機(jī)處理器與非瞬態(tài)存儲(chǔ)器進(jìn)行通信并將接收到的文件劃分成塊。塊為數(shù)據(jù)塊和非數(shù)據(jù)塊。計(jì)算機(jī)處理器還將數(shù)據(jù)塊中的一個(gè)或多個(gè)數(shù)據(jù)塊和非數(shù)據(jù)塊中的一個(gè)或多個(gè)非數(shù)據(jù)塊分組到組中。該組中的一個(gè)或多個(gè)塊能夠根據(jù)該組中的其他塊來(lái)被重構(gòu)。存儲(chǔ)設(shè)備計(jì)算機(jī)處理器和非瞬態(tài)存儲(chǔ)器進(jìn)行通信。計(jì)算機(jī)處理器基于分布式存儲(chǔ)系統(tǒng)的維護(hù)層次結(jié)構(gòu)來(lái)將該組中的各塊存儲(chǔ)到各存儲(chǔ)設(shè)備上。該維護(hù)層次結(jié)構(gòu)包括具有活躍狀態(tài)和不活躍狀態(tài)的維護(hù)域。每個(gè)存儲(chǔ)設(shè)備與維護(hù)域相關(guān)聯(lián)。計(jì)算機(jī)處理器將組中的各塊跨多個(gè)維護(hù)域被分發(fā)以在維護(hù)域處于不活躍狀態(tài)時(shí)維持該組的可訪(fǎng)問(wèn)性。

該方面的實(shí)現(xiàn)方式可以包括以下可選特征中的一個(gè)或多個(gè)可選特征。在一些示例中,計(jì)算機(jī)處理器限制該組中分發(fā)到任一維護(hù)域的存儲(chǔ)設(shè)備的塊的數(shù)量。計(jì)算機(jī)處理器可以通過(guò)確定與該組中的塊的數(shù)量相匹配的對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇并通過(guò)確定對(duì)存儲(chǔ)設(shè)備的選擇是否能夠在一個(gè)或多個(gè)單元處于不活躍狀態(tài)時(shí)維持該組的可訪(fǎng)問(wèn)性來(lái)確定該組中的各塊在各存儲(chǔ)設(shè)備之中的分發(fā)。當(dāng)對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇不能夠在一個(gè)或多個(gè)維護(hù)域處于不活躍狀態(tài)時(shí)維持該組的可訪(fǎng)問(wèn)性時(shí),計(jì)算機(jī)處理器可以確定與該組中的塊的數(shù)量相匹配的對(duì)存儲(chǔ)設(shè)備的第二隨機(jī)選擇。

在一些實(shí)現(xiàn)方式中,當(dāng)對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇不能夠在一個(gè)或多個(gè)維護(hù)域處于不活躍狀態(tài)時(shí)維持文件的可訪(fǎng)問(wèn)性時(shí),計(jì)算機(jī)處理器通過(guò)添加或去除一個(gè)或多個(gè)隨機(jī)選擇的存儲(chǔ)設(shè)備來(lái)修改對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇。計(jì)算機(jī)處理器可以使用簡(jiǎn)單采樣、概率采樣、分層采樣或聚類(lèi)采樣來(lái)確定對(duì)存儲(chǔ)設(shè)備的第一隨機(jī)選擇。

在一些示例中,計(jì)算機(jī)處理器通過(guò)從分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)設(shè)備的有序循環(huán)列表選擇與該組中的塊的數(shù)量相等的連續(xù)數(shù)量的存儲(chǔ)設(shè)備來(lái)確定各塊在各存儲(chǔ)設(shè)備之中的分發(fā)。此外,當(dāng)所選擇的存儲(chǔ)設(shè)備全體都不能夠在一個(gè)或多個(gè)維護(hù)域處于不活躍狀態(tài)時(shí),計(jì)算機(jī)處理器可以維持該組的可訪(fǎng)問(wèn)性時(shí)從有序循環(huán)列表選擇與該組中的塊的數(shù)量相等的另一連續(xù)數(shù)量的存儲(chǔ)設(shè)備。

在一些實(shí)現(xiàn)方式中,計(jì)算機(jī)處理器確定分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)設(shè)備的有序循環(huán)列表,其中有序循環(huán)列表上的相鄰存儲(chǔ)設(shè)備與不同的維護(hù)域相關(guān)聯(lián)。額外地或備選地,有序循環(huán)列表上的閾值數(shù)量的連續(xù)存儲(chǔ)設(shè)備各自可以與不同的維護(hù)域相關(guān)聯(lián)。額外地或備選地,有序循環(huán)列表上的閾值數(shù)量的連續(xù)存儲(chǔ)設(shè)備中各自可以處于不同的地理位置。

在一些示例中,計(jì)算機(jī)處理器確定維護(hù)域的維護(hù)層次結(jié)構(gòu)并將每個(gè)維護(hù)域映射到至少一個(gè)存儲(chǔ)設(shè)備。維護(hù)層次結(jié)構(gòu)具有維護(hù)級(jí)別,其中每個(gè)維護(hù)級(jí)別包括一個(gè)或多個(gè)維護(hù)域。每個(gè)維護(hù)域可以包括由單個(gè)功率分布單元或單個(gè)功率母線(xiàn)槽供電的存儲(chǔ)設(shè)備。

在一些實(shí)現(xiàn)方式中,計(jì)算機(jī)處理器將接收到的文件劃分成條帶,其中每個(gè)文件包括錯(cuò)誤校正編碼。錯(cuò)誤校正編碼是嵌套編碼或分層編碼中的一種。非數(shù)據(jù)塊包括編碼檢查塊、字檢查塊以及編碼檢查字檢查塊。

在下面的附圖和描述中闡述本公開(kāi)內(nèi)容的一個(gè)或多個(gè)實(shí)現(xiàn)方式的細(xì)節(jié)。其他特征、方面和優(yōu)點(diǎn)將從說(shuō)明書(shū)、附圖和權(quán)利要求變得顯而易見(jiàn)。

附圖說(shuō)明

圖1A是示例性分布式存儲(chǔ)系統(tǒng)的示意圖。

圖1B是具有由管理者管理的存儲(chǔ)器主機(jī)的單元的示例性分布式存儲(chǔ)系統(tǒng)的示意圖。

圖2是針對(duì)分布式系統(tǒng)的示例性管理者的示意圖。

圖3A是拆分成條帶的示例性文件的示意圖。

圖3B是拆分成數(shù)據(jù)塊和編碼塊的示例性文件的示意圖。

圖3C是里德-所羅門(mén)編碼技術(shù)的示意圖。

圖3D-3F是示例性分層編碼技術(shù)的示意圖。

圖3G是用于使用分層編碼技術(shù)來(lái)存儲(chǔ)數(shù)據(jù)的操作的示例性布置。

圖3H-3J是示例性嵌套編碼技術(shù)的示意圖。

圖3K是用于使用嵌套編碼技術(shù)來(lái)存儲(chǔ)數(shù)據(jù)的操作的示例性布置。

圖4A-4C是示例性維護(hù)層次結(jié)構(gòu)的示意圖。

圖5A是用于隨機(jī)地選擇一組存儲(chǔ)資源的操作的示例性布置的流程圖。

圖5B是對(duì)存儲(chǔ)設(shè)備的示例性隨機(jī)選擇的示意圖。

圖6A是用于隨機(jī)地選擇一組存儲(chǔ)資源之后隨機(jī)地更新該組內(nèi)的存儲(chǔ)設(shè)備的操作的示例性布置的流程圖。

圖6B是對(duì)存儲(chǔ)設(shè)備的示例性隨機(jī)選擇的示意圖。

圖7A是用于從循環(huán)列表選擇一組存儲(chǔ)資源的操作的示例性布置的流程圖。

圖7B是從有序列表中對(duì)存儲(chǔ)設(shè)備的示例性選擇的示意圖。

圖8是用于在存儲(chǔ)系統(tǒng)中分發(fā)數(shù)據(jù)的操作的示例性布置的示意圖。

類(lèi)似的附圖標(biāo)記在各附圖中指示類(lèi)似的元件。

具體實(shí)施方式

存儲(chǔ)系統(tǒng)包括多層冗余,其中數(shù)據(jù)被復(fù)制并被存儲(chǔ)在多個(gè)數(shù)據(jù)中心中。數(shù)據(jù)中心容納計(jì)算機(jī)系統(tǒng)和它們相關(guān)聯(lián)的部件,例如電信和存儲(chǔ)系統(tǒng)100(圖1A和1B)。數(shù)據(jù)中心通常包括備用電源、冗余通信連接、環(huán)境控制(以維持恒定溫度)和安全設(shè)備。數(shù)據(jù)中心可以為使用大量電力(例如和小鎮(zhèn)一樣多)的大型工業(yè)級(jí)操作。數(shù)據(jù)中心可以被定位在不同地理位置(例如,不同城市、不同國(guó)家和不同洲)中。在一些示例中,數(shù)據(jù)中心或其部分要求維護(hù)(例如,由于功率中斷,或?qū)⑾到y(tǒng)的部分?jǐn)嚅_(kāi)連接以更換零件,或者系統(tǒng)故障,或者其組合)。存儲(chǔ)在這些數(shù)據(jù)中心的數(shù)據(jù)可能在維護(hù)時(shí)間段期間對(duì)用戶(hù)不可用,從而導(dǎo)致?lián)p害或停止用戶(hù)的操作。因此,期望提供一種分布式存儲(chǔ)系統(tǒng)100,用戶(hù)能夠在盡管存儲(chǔ)系統(tǒng)100或其部分正在經(jīng)歷維護(hù)或系統(tǒng)故障的情況下從其中取讀所存儲(chǔ)的數(shù)據(jù)或重構(gòu)不健康的或丟失的數(shù)據(jù)。

參考圖1A和1B,在一些實(shí)現(xiàn)方式中,分布式存儲(chǔ)系統(tǒng)100包括松散耦合的存儲(chǔ)器主機(jī)110、110a-n(例如,計(jì)算機(jī)或服務(wù)器),每個(gè)存儲(chǔ)器主機(jī)具有與可以用于對(duì)數(shù)據(jù)312進(jìn)行高速緩存的存儲(chǔ)資源114(例如,存儲(chǔ)器、閃速存儲(chǔ)器、動(dòng)態(tài)隨機(jī)訪(fǎng)問(wèn)存儲(chǔ)器(DRAM)、相變存儲(chǔ)器(PCM)和/或盤(pán))進(jìn)行通信的計(jì)算資源112(例如,一個(gè)或多個(gè)處理器或中央處理單元(CPU))。覆蓋在存儲(chǔ)資源114上的存儲(chǔ)抽象(例如,鍵/值存儲(chǔ)或文件系統(tǒng))允許由一個(gè)或多個(gè)客戶(hù)端120、120a-n對(duì)存儲(chǔ)資源114的可擴(kuò)展使用??蛻?hù)端120可以通過(guò)網(wǎng)絡(luò)130(例如,經(jīng)由RPC)與存儲(chǔ)器主機(jī)110進(jìn)行通信。

在一些實(shí)現(xiàn)方式中,分布式存儲(chǔ)系統(tǒng)100是“單邊”的,從而消除對(duì)用于對(duì)來(lái)自客戶(hù)端120的遠(yuǎn)程過(guò)程調(diào)用(RPC)做出響應(yīng)以存儲(chǔ)或取回在它們的對(duì)應(yīng)存儲(chǔ)器主機(jī)110上的數(shù)據(jù)312的任何服務(wù)器作業(yè)的需要,并且相反可以依靠專(zhuān)用硬件來(lái)處理遠(yuǎn)程請(qǐng)求122?!皢芜叀笔侵竿ㄟ^(guò)其可以在硬件中而非通過(guò)運(yùn)行在存儲(chǔ)器主機(jī)110的CPU 112上的軟件來(lái)完成在存儲(chǔ)器主機(jī)110上的大多數(shù)請(qǐng)求處理的方法。不是使存儲(chǔ)器主機(jī)110(例如,服務(wù)器)的處理器112運(yùn)行將對(duì)應(yīng)的存儲(chǔ)資源114(例如,非瞬態(tài)存儲(chǔ)器)的訪(fǎng)問(wèn)導(dǎo)出到運(yùn)行在客戶(hù)端120上的客戶(hù)端進(jìn)程128的服務(wù)器進(jìn)程118,相反,客戶(hù)端120可以通過(guò)存儲(chǔ)器主機(jī)110的網(wǎng)絡(luò)接口控制器(NIC)116直接訪(fǎng)問(wèn)存儲(chǔ)資源114。換言之,運(yùn)行在客戶(hù)端120上的客戶(hù)端進(jìn)程128可以直接地與一個(gè)或多個(gè)存儲(chǔ)資源114對(duì)接,而無(wú)需對(duì)運(yùn)行在計(jì)算資源112上的任何服務(wù)器進(jìn)程118的例程的運(yùn)行。該單邊分布式存儲(chǔ)架構(gòu)提供相對(duì)高的吞吐量和低延遲,這是因?yàn)榭蛻?hù)端120能夠訪(fǎng)問(wèn)存儲(chǔ)資源114,而不與存儲(chǔ)器主機(jī)110的計(jì)算資源112對(duì)接。這具有典型的雙邊分布式存儲(chǔ)系統(tǒng)100帶來(lái)的對(duì)針對(duì)存儲(chǔ)114和CPU周期的要求去耦合的影響。單邊分布式存儲(chǔ)系統(tǒng)100能夠利用遠(yuǎn)程存儲(chǔ)資源114,而無(wú)論在該存儲(chǔ)器主機(jī)110上是否存在空閑的CPU周期;另外,由于單邊操作不爭(zhēng)奪服務(wù)器CPU 112資源,所以單邊系統(tǒng)能夠以非??深A(yù)測(cè)的低延遲來(lái)服務(wù)高速緩存請(qǐng)求122,甚至當(dāng)存儲(chǔ)器主機(jī)以高CPU利用率運(yùn)行時(shí)。因此,單邊分布式存儲(chǔ)系統(tǒng)100允許比傳統(tǒng)雙邊系統(tǒng)更高的集群存儲(chǔ)114和CPU 112資源兩者的利用率,同時(shí)給出可預(yù)測(cè)的低延遲。

在一些實(shí)現(xiàn)方式中,分布式存儲(chǔ)系統(tǒng)100包括存儲(chǔ)邏輯部分102、數(shù)據(jù)控制部分104以及數(shù)據(jù)存儲(chǔ)部分106。存儲(chǔ)邏輯部分102可以包括事務(wù)應(yīng)用編程接口(API)350(例如,單邊事務(wù)系統(tǒng)客戶(hù)端庫(kù)),其負(fù)責(zé)例如經(jīng)由RPC或單邊操作訪(fǎng)問(wèn)底層數(shù)據(jù)312。數(shù)據(jù)控制部分104可以管理關(guān)于任務(wù)對(duì)存儲(chǔ)資源114的指派和訪(fǎng)問(wèn),例如指派存儲(chǔ)資源114,用對(duì)應(yīng)的網(wǎng)絡(luò)接口控制器116登記存儲(chǔ)資源114,建立在(一個(gè)或多個(gè))客戶(hù)端120與存儲(chǔ)器主機(jī)110之間的連接,處置在機(jī)器故障的情況下的錯(cuò)誤,等等。數(shù)據(jù)存儲(chǔ)部分106可以包括松散耦合的存儲(chǔ)器主機(jī)110、110a-n。

分布式存儲(chǔ)系統(tǒng)100可以將數(shù)據(jù)312存儲(chǔ)在動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)114中并經(jīng)由具有遠(yuǎn)程直接存儲(chǔ)器訪(fǎng)問(wèn)(RDMA)能力的網(wǎng)絡(luò)接口控制器116從遠(yuǎn)程主機(jī)110供應(yīng)數(shù)據(jù)312。網(wǎng)絡(luò)接口控制器116(還被稱(chēng)為網(wǎng)絡(luò)接口卡、網(wǎng)絡(luò)適配器、或LAN適配器)可以為計(jì)算機(jī)硬件部件,其將計(jì)算資源112連接到網(wǎng)絡(luò)130。存儲(chǔ)器主機(jī)110a-n和客戶(hù)端120兩者可以均具有用于網(wǎng)絡(luò)通信的網(wǎng)絡(luò)接口控制器116。運(yùn)行在存儲(chǔ)器主機(jī)110的計(jì)算處理器112上的主機(jī)進(jìn)程118用網(wǎng)絡(luò)接口控制器116登記存儲(chǔ)器114的遠(yuǎn)程直接存儲(chǔ)器可訪(fǎng)問(wèn)區(qū)115a-n的集合。主機(jī)進(jìn)程118可以將存儲(chǔ)器114的遠(yuǎn)程直接存儲(chǔ)器可訪(fǎng)問(wèn)區(qū)115a-n登記為具有只讀或讀/寫(xiě)權(quán)限。存儲(chǔ)器主機(jī)110的網(wǎng)絡(luò)接口控制器116創(chuàng)建針對(duì)每個(gè)所登記的存儲(chǔ)器區(qū)115a-n的客戶(hù)端密鑰302。

由網(wǎng)絡(luò)接口控制器116執(zhí)行的單邊操作可以限于簡(jiǎn)單的讀、寫(xiě)以及比較和交換操作,其中沒(méi)有一個(gè)操作可以足夠復(fù)雜以用作針對(duì)由用于執(zhí)行高速緩存請(qǐng)求并管理高速緩存策略的傳統(tǒng)高速緩存服務(wù)器作業(yè)實(shí)現(xiàn)的軟件邏輯的簡(jiǎn)易替代。事務(wù)API 350將諸如查找或插入數(shù)據(jù)命令的命令轉(zhuǎn)化成基元網(wǎng)絡(luò)接口控制器操作的序列。事務(wù)API 350與分布式存儲(chǔ)系統(tǒng)100的數(shù)據(jù)控制和數(shù)據(jù)存儲(chǔ)部分104、106對(duì)接。

分布式存儲(chǔ)系統(tǒng)100可以包括用于向網(wǎng)絡(luò)接口控制器116登記的供遠(yuǎn)程訪(fǎng)問(wèn)的存儲(chǔ)器114的共同定位的軟件并建立與客戶(hù)端進(jìn)程128的連接。一旦建立了連接,客戶(hù)端進(jìn)程128就能夠經(jīng)由網(wǎng)絡(luò)接口控制器116的硬件中的引擎訪(fǎng)問(wèn)所登記的存儲(chǔ)器114,而無(wú)需來(lái)自對(duì)應(yīng)的存儲(chǔ)器主機(jī)110的本地CPU 112上的軟件的任何參與。

參考圖1B,在一些實(shí)現(xiàn)方式中,分布式存儲(chǔ)系統(tǒng)100包括多個(gè)單元200(每個(gè)單元200包括存儲(chǔ)器主機(jī)110)以及與存儲(chǔ)器主機(jī)110進(jìn)行通信的管理者(curator)210。管理者210(例如,進(jìn)程)可以運(yùn)行在連接到網(wǎng)絡(luò)130的計(jì)算處理器202(例如具有非瞬態(tài)存儲(chǔ)器204的服務(wù)器)上并管理數(shù)據(jù)存儲(chǔ)(例如,管理存儲(chǔ)在存儲(chǔ)器主機(jī)110上的文件系統(tǒng)),控制數(shù)據(jù)放置和/或發(fā)起數(shù)據(jù)恢復(fù)。此外,管理者210可以跟蹤存儲(chǔ)器主機(jī)110上的數(shù)據(jù)312的存在和存儲(chǔ)位置。冗余管理者210是可能的。在一些實(shí)現(xiàn)方式中,(一個(gè)或多個(gè))管理者210跟蹤跨多個(gè)存儲(chǔ)器主機(jī)110的數(shù)據(jù)312的分條(striping)和用于冗余和/或執(zhí)行的給定條帶的多個(gè)副本的存在和/或位置。在計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)中,數(shù)據(jù)分條是以使對(duì)不同物理存儲(chǔ)器主機(jī)110(例如,單元(cell)200和/或存儲(chǔ)器主機(jī)110)做出順序分段的訪(fǎng)問(wèn)的方式將順序數(shù)據(jù)312(例如文件310(圖2))邏輯地分割成條帶的技術(shù)。在處理設(shè)備請(qǐng)求比存儲(chǔ)器主機(jī)110能夠提供訪(fǎng)問(wèn)更快地訪(fǎng)問(wèn)數(shù)據(jù)時(shí),分條是有用的。通過(guò)執(zhí)行在多個(gè)設(shè)備上的分段訪(fǎng)問(wèn),能夠并發(fā)地訪(fǎng)問(wèn)多個(gè)分段。這提供更多的數(shù)據(jù)訪(fǎng)問(wèn)吞吐量,其避免使處理器空閑地等待數(shù)據(jù)訪(fǎng)問(wèn)。在(下面更詳細(xì)地描述的)一些實(shí)現(xiàn)方式中,每個(gè)條帶可以進(jìn)一步被劃分成組G(例如,包括塊),其中使不同的物理存儲(chǔ)器主機(jī)110訪(fǎng)問(wèn)順序組G。對(duì)條帶內(nèi)的分段的分組還可以在處理設(shè)備請(qǐng)求比存儲(chǔ)器主機(jī)110能夠提供的訪(fǎng)問(wèn)更快地訪(fǎng)問(wèn)數(shù)據(jù)312時(shí)有用。通過(guò)在多個(gè)設(shè)備上提供對(duì)組G的分段訪(fǎng)問(wèn),能夠同時(shí)訪(fǎng)問(wèn)組G的多個(gè)分段。這還提供更多的數(shù)據(jù)訪(fǎng)問(wèn)吞吐量,其避免使得處理器空閑地等待數(shù)據(jù)訪(fǎng)問(wèn),因此提高系統(tǒng)100的性能。

在一些實(shí)現(xiàn)方式中,事務(wù)API 350在(例如,具有客戶(hù)端進(jìn)程128的)客戶(hù)端120與管理者210之間進(jìn)行對(duì)接。在一些示例中,客戶(hù)端120通過(guò)一個(gè)或多個(gè)遠(yuǎn)程過(guò)程調(diào)用(RPC)與管理者210進(jìn)行通信。響應(yīng)于客戶(hù)端請(qǐng)求122,事務(wù)API 350可以找到在(一個(gè)或多個(gè))存儲(chǔ)器主機(jī)110上的特定數(shù)據(jù)312的存儲(chǔ)位置并獲得允許訪(fǎng)問(wèn)數(shù)據(jù)312的密鑰302。事務(wù)API 350(經(jīng)由網(wǎng)絡(luò)接口控制器116)直接與適當(dāng)?shù)拇鎯?chǔ)器主機(jī)110進(jìn)行通信以(例如,使用遠(yuǎn)程直接存儲(chǔ)器訪(fǎng)問(wèn))讀或?qū)憯?shù)據(jù)312。在存儲(chǔ)器主機(jī)110是非操作性的或者數(shù)據(jù)312被移動(dòng)到不同存儲(chǔ)器主機(jī)110的情況下,客戶(hù)端請(qǐng)求122發(fā)生故障,從而提示客戶(hù)端120重新查詢(xún)管理者210。

參考圖2,在一些實(shí)現(xiàn)方式中,管理者210存儲(chǔ)并管理文件系統(tǒng)元數(shù)據(jù)212。元數(shù)據(jù)212可以包括將文件3101-n映射到文件描述符3001-n的文件映射214。管理者210可以檢查并修改其持久元數(shù)據(jù)212的表示。管理者210可以使用針對(duì)元數(shù)據(jù)212的三種不同的訪(fǎng)問(wèn)模式:只讀、文件事務(wù)以及條帶事務(wù)。例如,元數(shù)據(jù)212能夠指定文件310的哪些部分被存儲(chǔ)在哪些數(shù)據(jù)中心處,數(shù)據(jù)312的冗余副本被存儲(chǔ)在哪里,哪些數(shù)據(jù)塊330nD和編碼塊330nC形成編碼字,等等。

參考圖3A-3K,數(shù)據(jù)312可以為一個(gè)或多個(gè)文件310。管理者210可以將每個(gè)文件310劃分成條帶320a-n的集合,其中每個(gè)條帶320a-n與剩余條帶320a-n獨(dú)立地被編碼。每個(gè)條帶320可以被編碼并被存儲(chǔ)在不同的存儲(chǔ)器主機(jī)110上。如圖3A所示,每個(gè)條帶320基于編碼級(jí)別313而被劃分成數(shù)據(jù)塊330nD和非數(shù)據(jù)塊330nC,編碼級(jí)別313例如里德-所羅門(mén)(Reed-Solomon)編碼(圖3B)、分層編碼(圖3C-3G)或嵌套編碼(圖3H-3K)或其他層次結(jié)構(gòu)編碼。非數(shù)據(jù)塊330nC可以為編碼塊330nC(例如,對(duì)于里德-所羅門(mén)編碼)。在其他示例中,非數(shù)據(jù)塊330nC可以為編碼檢查塊330nCC、字檢查塊330nWC以及編碼檢查字檢查塊330nCCWC(對(duì)于分層編碼或嵌套編碼)。數(shù)據(jù)塊330nD是指定量的數(shù)據(jù)312。在一些實(shí)現(xiàn)方式中,數(shù)據(jù)塊330nD是來(lái)自文件310的連續(xù)部分的數(shù)據(jù)312。在其他實(shí)現(xiàn)方式中,數(shù)據(jù)塊330nD是來(lái)自文件310的一個(gè)或多個(gè)非連續(xù)部分的數(shù)據(jù)312。例如,數(shù)據(jù)塊330nD能夠?yàn)?56字節(jié)或其他單位的數(shù)據(jù)312。

損壞的塊330(例如,數(shù)據(jù)塊330nD或非數(shù)據(jù)塊330nC)是包含一個(gè)或多個(gè)錯(cuò)誤的塊330。通常,損壞的塊330使用錯(cuò)誤檢測(cè)編碼313來(lái)標(biāo)識(shí)。例如,損壞的塊330可以是被完全擦除的(例如,如果塊330被存儲(chǔ)于在颶風(fēng)中被破壞的硬盤(pán)驅(qū)動(dòng)器中),或者損壞的塊330能夠具有單個(gè)比特翻轉(zhuǎn)。健康塊330是未被損壞的塊330。損壞的塊330能夠被有意損壞,例如在特定存儲(chǔ)器主機(jī)110被關(guān)閉以進(jìn)行維護(hù)的情況下。損壞的塊可以是缺失的或不可用的塊。在這種情況下,損壞的塊330能夠通過(guò)標(biāo)識(shí)被存儲(chǔ)在被關(guān)機(jī)的存儲(chǔ)器主機(jī)110處的塊330來(lái)標(biāo)識(shí)。

文件310的非數(shù)據(jù)塊330nC包括錯(cuò)誤校正編碼塊313。錯(cuò)誤校正編碼塊313包括基于一個(gè)或多個(gè)數(shù)據(jù)塊330nD的數(shù)據(jù)312的塊330。在一些實(shí)現(xiàn)方式中,每個(gè)編碼塊330nC具有與數(shù)據(jù)塊330nD相同的指定大小(例如,256字節(jié))。編碼塊330nC是使用錯(cuò)誤校正編碼313(例如最大距離分割(MDS)編碼)來(lái)生成的。MDS編碼的示例包括里德-所羅門(mén)編碼。各種技術(shù)能夠被用于生成編碼塊330nC。例如,錯(cuò)誤校正編碼313能夠被使用,能夠從獨(dú)特的健康的塊330(數(shù)據(jù)塊330nD或編碼塊330nC)的任何集合重構(gòu)d個(gè)數(shù)據(jù)塊330nD。

編碼字是數(shù)據(jù)塊330nD和基于那些數(shù)據(jù)塊330nD的編碼塊330nC的集合。如果MDS編碼被用于生成包含d個(gè)數(shù)據(jù)塊330nD和c個(gè)編碼塊330nC的編碼字,則所有塊330(數(shù)據(jù)或編碼)都能夠被重構(gòu),只要能夠從編碼字獲得任何d個(gè)健康塊330(數(shù)據(jù)或編碼)。

圖3B示出里德-所羅門(mén)編碼作為錯(cuò)誤校正編碼塊313。每個(gè)條帶320被劃分成存儲(chǔ)在多個(gè)存儲(chǔ)資源114上的塊330。塊330可以為數(shù)據(jù)塊330nDk或編碼塊330nCm,其一起形成單個(gè)編碼字。數(shù)據(jù)塊330nDk包括實(shí)際數(shù)據(jù)312;而編碼塊330nCm是用于奇偶校驗(yàn)以確定文件310是否是完整無(wú)缺的。里德-所羅門(mén)編碼允許高達(dá)編碼塊330nCm的總數(shù)量的丟失,其中條帶312仍然可以根據(jù)數(shù)據(jù)塊330nDk來(lái)被重構(gòu)。因此,文件310的每個(gè)條帶320a-n包括多個(gè)數(shù)據(jù)塊330nDk和非數(shù)據(jù)塊330nCm(例如,編碼塊),管理者210將其放置在多個(gè)存儲(chǔ)資源114上,其中數(shù)據(jù)塊330nDk和非數(shù)據(jù)塊330nCm的集合形成單個(gè)編碼字??傮w上,管理者210可以將每個(gè)條帶320a-n放置在存儲(chǔ)資源114上,與文件310中的其他條帶320a-n如何被放置在存儲(chǔ)資源114上無(wú)關(guān)。里德-所羅門(mén)編碼313將冗余數(shù)據(jù)312或奇偶校驗(yàn)數(shù)據(jù)312添加到文件310,使得文件310能夠稍后被接收者恢復(fù),甚至當(dāng)引入了許多錯(cuò)誤(高達(dá)被使用的編碼的能力)時(shí)。里德-所羅門(mén)編碼313用于維持存儲(chǔ)器主機(jī)110中的數(shù)據(jù)完整性,用于重構(gòu)數(shù)據(jù)312以用于執(zhí)行(延遲),或者用于更快地消耗(drain)機(jī)器。

參考圖3C-3I,在分層編碼(圖3C-3G)和嵌套編碼(圖3H-3K)技術(shù)中,編碼數(shù)據(jù)分塊314包括數(shù)據(jù)分塊316(具有數(shù)據(jù)塊330nD)和錯(cuò)誤校正編碼塊313(即,非數(shù)據(jù)塊330nC),其被存儲(chǔ)被視為形成二維R x C數(shù)組。針對(duì)每列C存在能夠用于重構(gòu)每列C的X個(gè)或更少的損壞的塊330的X個(gè)編碼塊330nC(被稱(chēng)為“編碼檢查塊330nCC”)。針對(duì)整個(gè)2-D數(shù)組存在Y個(gè)編碼塊330nC(被稱(chēng)為“編碼檢查塊330nWC”)。當(dāng)在一行或多行C中存在超過(guò)X個(gè)損壞的塊330時(shí),除了其他健康塊330之外還使用編碼檢查塊330nWC來(lái)重構(gòu)損壞的塊330。盡管在本說(shuō)明書(shū)中描述的一些示例將編碼數(shù)據(jù)分塊314(即,數(shù)據(jù)分塊316和編碼塊330nC(即,非數(shù)據(jù)塊330nC))圖示為形成二維數(shù)組,但是能夠進(jìn)行創(chuàng)建不同地配置的編碼數(shù)據(jù)分塊314的編碼技術(shù)。例如,不同的列能夠具有不同數(shù)量的編碼檢查塊330nCC,并且包含編碼檢查塊330nCC的列能夠具有與包含編碼檢查塊330nD和編碼檢查塊330nC的列C不同的數(shù)量的行R。

編碼330nC能夠被用于通過(guò)將每列C的數(shù)據(jù)塊330nD分配到數(shù)據(jù)中心來(lái)將數(shù)據(jù)312跨存儲(chǔ)器主機(jī)110存儲(chǔ)。列C內(nèi)的每塊330能夠被分配到數(shù)據(jù)中心內(nèi)的存儲(chǔ)器主機(jī)110。之后,如果X個(gè)或更少的塊330在數(shù)據(jù)中心處丟失,則塊330能夠使用僅僅數(shù)據(jù)中心內(nèi)通信來(lái)被重構(gòu)(例如,因此沒(méi)有其他數(shù)據(jù)中心必須在執(zhí)行重構(gòu)中提供數(shù)據(jù)312)。如果超過(guò)X個(gè)塊330在一個(gè)或多個(gè)數(shù)據(jù)中心中丟失,則Y個(gè)字檢查塊330nWC用于嘗試重構(gòu)。因此,數(shù)據(jù)中心間通信(其可以是代價(jià)更高的,例如比數(shù)據(jù)中心內(nèi)通信更慢)僅僅當(dāng)在單個(gè)數(shù)據(jù)中心內(nèi)X個(gè)塊330被損壞時(shí)是需要的。

編碼還能夠在單個(gè)數(shù)據(jù)中心內(nèi)被使用。代替將不同的列C分配到不同的數(shù)據(jù)中心,編碼系統(tǒng)102將所有列C存儲(chǔ)在單個(gè)數(shù)據(jù)中心處。數(shù)據(jù)塊330nD和編碼塊330nC能夠被存儲(chǔ)在該數(shù)據(jù)中心內(nèi)的不同的存儲(chǔ)器主機(jī)110處。這例如在重構(gòu)期間從存儲(chǔ)器主機(jī)110讀取數(shù)據(jù)312是代價(jià)高的(例如,耗時(shí)的)情況下是有用的,使得編碼系統(tǒng)102能夠在重構(gòu)期間讀取比使用傳統(tǒng)編碼技術(shù)將需要的更少的塊330。少量損壞的塊330能夠通過(guò)讀取少量其他塊330(列C中的編碼檢查塊330nCC和其他數(shù)據(jù)塊330nD)來(lái)被重構(gòu),并且大量損壞的塊330能夠通過(guò)在需要時(shí)使用字檢查塊330nWC來(lái)被重構(gòu)。在一些示例中,管理者210以允許系統(tǒng)100根據(jù)組G的其他塊330來(lái)重構(gòu)缺失的塊330的方式將數(shù)據(jù)塊330nD和某些非數(shù)據(jù)塊330nC分組在該組G中。該組G可以包括一列或多列C或其部分。

參考圖3C-3G,在一些實(shí)現(xiàn)方式中,分層編碼技術(shù)示出形成編碼字的數(shù)據(jù)塊330nD和編碼塊330nC。如果得到的編碼字能夠被劃分成塊330的兩個(gè)集合,一個(gè)集合包括數(shù)據(jù)塊330nD并且一個(gè)集合包括編碼塊330nC,則錯(cuò)誤校正編碼313采用系統(tǒng)形式。采用系統(tǒng)形式的編碼在其具有N個(gè)編碼塊330nC并且其能夠校正任何N個(gè)損壞的塊330的情況下是可分開(kāi)最大距離(MDS)。分層編碼從采用系統(tǒng)形式的兩種MDS編碼來(lái)創(chuàng)建,兩種MDS編碼例如里德-所羅門(mén)編碼或奇偶校驗(yàn)編碼。一種編碼被用于創(chuàng)建編碼檢查塊330nCC,并且另一編碼被用于創(chuàng)建字檢查塊330nWC。

參考圖3D-3F中示出的示例,數(shù)據(jù)分塊316包括利用分層編碼而編碼的標(biāo)記為D0-D41的數(shù)據(jù)塊330nD。在圖3D中,示出了第一列數(shù)據(jù)塊330nD,D0-D5。針對(duì)列C0和C1示出了兩個(gè)編碼檢查塊330nCC。C0和C1基于D0-D5。因此D0-D5和C0-C1形成編碼字。在圖3E中,示出了具有數(shù)據(jù)分塊314(D0-D41)和六個(gè)編碼塊C0-C5的編碼數(shù)據(jù)分塊314。C0-C5基于D0-D41。因此,D0-D41和C0-C5形成編碼字。

圖3F圖示了得到的包括數(shù)據(jù)分塊314(D0-D41)和額外編碼塊330nC(編碼檢查塊330nCC和字檢查塊330nWC)的編碼數(shù)據(jù)分塊314。第j列中的第i個(gè)編碼檢查塊被標(biāo)示為Ci,j。因此C0,0和C1,0兩者都是針對(duì)D0-D5的編碼檢查塊330nCC。

D0-D5以及C0,0和C1,0一起形成編碼字。在最后一列到右邊示出了字檢查塊C0-C5。D0-D41和C0-C5一起形成編碼字。C0,7和C1,7能夠基于C0-C5來(lái)生成,使得C0,7和C1,7以及C0-C5形成編碼字。

在圖3F中示出的示例中,字檢查塊330nWC填充整列C。然而,分層編碼能夠利用任意數(shù)量的全列C的字檢查塊330nWC加可選的部分列的字檢查塊330nWC來(lái)創(chuàng)建。如果數(shù)據(jù)塊330nD和字檢查塊330nWC沒(méi)有填充整數(shù)的列C,則空白零值的塊330能夠被添加到2D數(shù)組。那些塊330不必須實(shí)際上被存儲(chǔ)并且它們將決不會(huì)出錯(cuò)。

總體上,具有每列C有X個(gè)編碼檢查塊330nCCk和N個(gè)字檢查塊330nWC的分層編碼能夠在執(zhí)行僅僅列C內(nèi)通信的同時(shí)重建高達(dá)每列X個(gè)損壞的塊330。如果在重構(gòu)那些損壞的塊330之后,在2D數(shù)組中(在2D數(shù)組的數(shù)據(jù)加字檢查塊330nWC部分內(nèi))仍然存在N個(gè)或更少的損壞的塊330,則損壞的塊330能夠使用字檢查塊330nWC和編碼檢查塊330nCC來(lái)被重構(gòu)。這是真的,因?yàn)閿?shù)據(jù)塊330nD中的N個(gè)或更少的損壞的塊330加字檢查塊330nWC能夠使用僅僅字檢查塊330nWC來(lái)被重構(gòu)。之后,如果任何編碼檢查塊330nCCk被損壞,則它們能夠根據(jù)其相應(yīng)列C的數(shù)據(jù)塊330nD來(lái)被重構(gòu)。

參考圖3G,在一些實(shí)現(xiàn)方式中,管理者210使用分層編碼來(lái)分發(fā)數(shù)據(jù)312。管理者210接收包括數(shù)據(jù)塊330nD的數(shù)據(jù)分塊316(步驟362)。例如,數(shù)據(jù)分塊316能夠來(lái)自其被存儲(chǔ)的文件310。數(shù)據(jù)分塊316能夠包括md*nd個(gè)數(shù)據(jù)塊330nC,md是數(shù)據(jù)行的數(shù)量,并且nd是數(shù)據(jù)列的數(shù)量,并且md和nd大于或等于一。編碼分塊包括m*n個(gè)塊330,其包括md*nd,其中m是數(shù)據(jù)塊330nD和非數(shù)據(jù)塊330nC的行R的總數(shù)量,并且n是數(shù)據(jù)塊330nD和非數(shù)據(jù)塊330nC的列C的數(shù)量;m和n大于或等于一。管理者210使用采用系統(tǒng)形式的第一錯(cuò)誤校正編碼313和數(shù)據(jù)塊330nD來(lái)生成字檢查塊330nWC的一列或多列C(步驟364)。字檢查塊330nWC的列C能夠在列C中具有不同數(shù)量的字檢查塊330nWC。數(shù)據(jù)塊330nD和字檢查塊330nWC一起形成編碼字。

對(duì)于數(shù)據(jù)塊330nD的一列或多列C的每列C,管理者210使用采用系統(tǒng)形式的第二錯(cuò)誤校正編碼313和列C的數(shù)據(jù)塊330nD來(lái)生成針對(duì)列C的一個(gè)或多個(gè)編碼檢查塊330nCC(步驟366)。第一錯(cuò)誤校正編碼和第二錯(cuò)誤校正編碼313能夠是不同的。列C能夠具有不同數(shù)量的編碼檢查塊330nCC。系統(tǒng)100還能夠生成針對(duì)字檢查塊330nWC的列C的編碼檢查塊330nCC。系統(tǒng)100存儲(chǔ)數(shù)據(jù)塊330nD、編碼檢查塊330nCC和字檢查塊330nWC(步驟368)。在一些實(shí)現(xiàn)方式中,系統(tǒng)100將每列C和/或列C內(nèi)的編碼檢查塊330nCC分配到存儲(chǔ)器主機(jī)110的不同組。在其他實(shí)現(xiàn)方式中,系統(tǒng)100將數(shù)據(jù)塊330nD和編碼塊330nC存儲(chǔ)在存儲(chǔ)器主機(jī)110的相同組(例如單個(gè)數(shù)據(jù)中心)處。系統(tǒng)100可以將數(shù)據(jù)塊330nD和某些編碼檢查塊330nCC以及字檢查塊330nWC存儲(chǔ)在組G中,其中不健康塊330能夠從組G的一個(gè)或多個(gè)其他塊330恢復(fù)。因此,系統(tǒng)100將組G的塊G存儲(chǔ)在不同的存儲(chǔ)器主機(jī)110處。

當(dāng)系統(tǒng)將列C的塊330分配到一組存儲(chǔ)器主機(jī)110時(shí),編碼檢查塊330nCC能夠在不同的位置處被生成。例如,編碼檢查塊330nCC能夠由執(zhí)行該分配的中央編碼系統(tǒng)(例如,圖1B的服務(wù)器202)或者由該組存儲(chǔ)器主機(jī)110在接收到列C的數(shù)據(jù)塊330nD之后生成。在每組存儲(chǔ)器主機(jī)110處,所分配的數(shù)據(jù)塊330nD、編碼檢查塊330nCC和字檢查塊330nWC中的每個(gè)能夠被存儲(chǔ)在不同的存儲(chǔ)器主機(jī)110處。

當(dāng)系統(tǒng)100標(biāo)識(shí)第一組存儲(chǔ)器主機(jī)110處的損壞的數(shù)據(jù)塊330nD時(shí),系統(tǒng)100嘗試在不與塊330的組G的其他組的存儲(chǔ)器主機(jī)110進(jìn)行通信的情況下(使用編碼檢查塊330nCC)重構(gòu)損壞的塊330。在一些情況下,系統(tǒng)100使用被分配到來(lái)自塊330的組G的第一組存儲(chǔ)器主機(jī)110的編碼檢查塊330nCC和任何健康數(shù)據(jù)塊330nD來(lái)從在第一組存儲(chǔ)器主機(jī)110處的塊330的組G重構(gòu)盡可能多的其他損壞的數(shù)據(jù)塊330nD。如果系統(tǒng)100確定損壞的塊330不能夠在不與具有塊330的其他組G的其他組的存儲(chǔ)器主機(jī)110進(jìn)行通信的情況下來(lái)被重構(gòu),則系統(tǒng)標(biāo)識(shí)(例如,通過(guò)請(qǐng)求和接收)來(lái)自具有其他組G的塊330的其他組的存儲(chǔ)器主機(jī)110的健康塊330使得至少m*n個(gè)健康塊330是可用的,其中健康塊330是數(shù)據(jù)塊330nD、字檢查塊330nWC或兩者,并且使用健康塊330來(lái)重構(gòu)損壞的數(shù)據(jù)塊330nD。

參考圖3H-3J,在一些實(shí)現(xiàn)方式中,嵌套編碼技術(shù)示出形成編碼字的數(shù)據(jù)塊330nD和編碼塊330nC。如所示出的,嵌套編碼技術(shù)是二維(2D)嵌套編碼技術(shù),但是三維(3D)嵌套編碼技術(shù)也可以被應(yīng)用。

嵌套編碼技術(shù)與分層編碼技術(shù)的不同在于創(chuàng)建在編碼檢查塊330nCC與字檢查塊330nWC之間的不同關(guān)系。2D嵌套編碼根據(jù)采用系統(tǒng)形式的任意線(xiàn)性MDS編碼來(lái)創(chuàng)建。基于數(shù)據(jù)分塊316的字檢查塊330nWC被劃分成兩組,第一組包括X個(gè)編碼塊330nC,并且第二組包括N個(gè)編碼塊330nC。編碼數(shù)據(jù)分塊316被視為形成列C的數(shù)組,并且第一組中的X個(gè)編碼塊330nC用于通過(guò)將它們“拆分”成每列的分離的分量來(lái)創(chuàng)建每列X列塊330(“拆分的”編碼檢查塊330nCC)。第二組中的N個(gè)編碼塊330nC形成字檢查塊330nWC。

例如,圖3H示出數(shù)據(jù)分塊314(D0-D41)和基于數(shù)據(jù)分塊316(D0-D41)的編碼塊(C0-C7)330nC。數(shù)據(jù)塊(D0-D41)330nD和編碼塊(C0-C7)330nC形成編碼字。編碼塊330nC被劃分成第一組和第二組,其中第一組包括C0-C1,第二組包括C2-C7。C0-C1被拆分以形成拆分的編碼檢查塊330nCC。C2-C7被用作字檢查塊330nWC。

圖3I示出包括數(shù)據(jù)分塊316(D0-D41)和額外編碼塊330nC(拆分的編碼檢查塊330nCC和字檢查塊330nWC)的得到的編碼分塊。為了生成與列j的C0(標(biāo)示為C0,j)相對(duì)應(yīng)的拆分的編碼檢查塊330nCC,生成C0,即使不是列j中的所有數(shù)據(jù)塊330nD都具有值零。也就是說(shuō),C0,j具有將從執(zhí)行使用完整數(shù)據(jù)分塊316而非相反使用僅僅列j來(lái)生成C0的操作得到的值,其中所有其他列被清零。例如,如果生成器矩陣將被用于生成數(shù)據(jù)分塊314的C0,則生成器矩陣能夠被修改以生成C0,j,使得其具有將使用原始生成器矩陣并將該原始生成器矩陣應(yīng)用到數(shù)據(jù)分塊316得到的值,其中除了列j的列C中的數(shù)據(jù)塊330nD被清零。

針對(duì)每列C的拆分的C1,j的編碼檢查塊330nCC類(lèi)似地但是使用C1代替C0來(lái)生成。結(jié)果,C0是C0,0-C0,6的線(xiàn)性組合,并且C1是C1,0-C1,6的線(xiàn)性組合。也就是說(shuō),

<mrow> <mi>C</mi> <mn>1</mn> <mo>=</mo> <msubsup> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>=</mo> <mn>0</mn> </mrow> <mn>6</mn> </msubsup> <mi>C</mi> <mn>1</mn> <mo>,</mo> <mi>j</mi> <mo>.</mo> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

在圖3I中被標(biāo)示為“?”的塊330能夠以如下面參考圖3J進(jìn)一步描述的各種方式來(lái)生成。

在圖3H和3I的示例中,得到的編碼數(shù)據(jù)分塊314包括42個(gè)數(shù)據(jù)塊330nD和8個(gè)編碼塊330nC。參考用于創(chuàng)建編碼分塊的原始編碼,編碼塊330nC屬于如以上所描述的兩組中的一組,其中X=2處于第一組中,并且其中的N=6處于第二組中。無(wú)論何時(shí)在頭七列中的一列內(nèi)存在兩個(gè)或更少的(X個(gè)或更少的)損壞的塊330,就能夠使用列C的健康塊330和針對(duì)列C的拆分的編碼檢查塊330nCC來(lái)校正損壞的塊330。為了證明這個(gè),假設(shè)j標(biāo)示包括兩個(gè)或更少的損壞的塊330的類(lèi)C并且考慮通過(guò)將來(lái)自列C的除了j之外的所有數(shù)據(jù)塊330nD清零獲得的編碼字。在該編碼字中,C0=C0,j并且C1=C1,j。結(jié)果,其他列中的兩個(gè)或更少的損壞的塊330As同樣包含所有零數(shù)據(jù)塊330nD,并且通過(guò)查看字檢查塊330nWC為被損壞的。

在圖3F中示出的示例中,字檢查塊330nWC完整地填充整列C(右邊的列)。2D嵌套編碼313b能夠利用字檢查塊330nWC的任意數(shù)量的列C來(lái)創(chuàng)建。字檢查塊330nWC的列C能夠具有與數(shù)據(jù)塊330nD的列相同數(shù)量的行R或不同數(shù)量的行R,并且字檢查塊330nWC的列C能夠具有彼此不同的數(shù)量的行R。字檢查塊330nWC的列C能夠但不必須具有編碼檢查塊330nCC,即編碼檢查字檢查塊330nCCWC。增加字檢查塊330nWC的數(shù)量改進(jìn)所存儲(chǔ)的數(shù)據(jù)312的可靠性但是在存儲(chǔ)器主機(jī)110處使用更多的存儲(chǔ)??傮w上,嵌套編碼列C包括數(shù)據(jù)塊330nD或字檢查塊330nWC但是不是兩者。

總體上,具有每列C有X個(gè)拆分的編碼檢查塊330nCC和N個(gè)字檢查塊330nWC的2D嵌套編碼能夠被用于在執(zhí)行僅僅列內(nèi)通信(其通常為例如數(shù)據(jù)中心內(nèi)通信)的同時(shí)重構(gòu)每列C有X個(gè)損壞的塊330(在包括數(shù)據(jù)塊330nD的那些列中)。在重構(gòu)編碼分塊內(nèi)的多個(gè)損壞的塊330中,那些損壞的塊330通常首先被重構(gòu),因?yàn)榱袃?nèi)通信比列間通信代價(jià)較低,但是其他損壞的塊330可能仍然存在。如果在重構(gòu)列內(nèi)的損壞的塊330之后,仍然存在(N+X)個(gè)或更少的其他塊330(因?yàn)樗鼈儾荒軌蚴褂昧袃?nèi)通信來(lái)被重構(gòu)),則那些其他損壞的塊330能夠使用字檢查塊330nWC和拆分的編碼檢查塊330nCC來(lái)被重構(gòu)。第一組中的字檢查塊330nWC(圖4B中的C0和C1)能夠根據(jù)拆分的編碼檢查塊330nCC例如使用公式來(lái)確定,即使那些字檢查塊330nWC未被明確存儲(chǔ)。

為了證明這個(gè),假設(shè)Z標(biāo)示被損壞的字檢查塊330nWC的數(shù)量,并且假設(shè)Y標(biāo)示第一組中的不能夠根據(jù)公式從它們對(duì)應(yīng)的拆分的編碼檢查塊330nCC重構(gòu)為被損壞的拆分的編碼檢查塊330nCC的字檢查塊330nWC的數(shù)量。使用該公式,能夠確定來(lái)自第一組的X–Y個(gè)字檢查塊330nWC,從而得到具有第一組中的Y個(gè)損壞的字檢查塊330nWC和第二組中的Z個(gè)損壞的字檢查塊330nWC的的編碼字(例如,圖3H中示出的編碼字)。因?yàn)橹炼啻嬖诳傆?jì)N+X個(gè)損壞的塊330,所以至多存在N+X-Y-Z個(gè)損壞的數(shù)據(jù)塊330nD。因此,能夠使用得到的編碼字來(lái)重構(gòu)所有損壞的塊330,因?yàn)槠浒ㄖ炼郚+X-Y-Z+Y+Z=N+X個(gè)損壞的塊330。

參考圖3J,在一些實(shí)現(xiàn)方式中,得到的編碼分塊包括針對(duì)字檢查塊330nWC的編碼檢查塊330nCC(即,編碼檢查字檢查塊330nCCWC)。與圖3I的編碼分塊相比較,圖3J的編碼分塊包括編碼檢查塊C0,7和C1,7 330nCC代替在圖3I中利用“?”標(biāo)記的位置。這是一種提供重建損壞的字檢查塊330nWC而不依賴(lài)列間通信的方式。編碼檢查塊C0,7和C1,7 330nCC能夠以各種方式來(lái)生成。例如,那些編碼檢查塊330nCC能夠基于C2-C7以基于D0-D5來(lái)生成C0,0和C1,0相同的方式來(lái)生成。圖3J的(使用示例嵌套編碼)得到的編碼分塊能夠被用于在執(zhí)行列內(nèi)重構(gòu)之后重構(gòu)高達(dá)八個(gè)損壞的塊330,而圖3E的(使用示例分層編碼)得到的編碼分塊能夠被用于在執(zhí)行列內(nèi)重構(gòu)之后重構(gòu)高達(dá)六個(gè)損壞的塊330。能夠針對(duì)包括字檢查塊330nWC的任何數(shù)量的列添加編碼檢查塊330nC。

參考圖3K,在一些實(shí)現(xiàn)方式中,管理者210使用嵌套編碼313b來(lái)分發(fā)數(shù)據(jù)312。系統(tǒng)100接收數(shù)據(jù)分塊316(步驟372)。數(shù)據(jù)分塊316能夠包括md*nd數(shù)據(jù)塊330nC,md是數(shù)據(jù)行的數(shù)量,并且nd是數(shù)據(jù)列的數(shù)量,并且md和nd大于或等于一。編碼分塊包括m*n個(gè)塊330,其包括md*nd,其中m是數(shù)據(jù)塊330nD和非數(shù)據(jù)塊330nC的行R的總數(shù)量,并且n是數(shù)據(jù)塊330nD和非數(shù)據(jù)塊330nC的列C的數(shù)量;m和n大于或等于一。系統(tǒng)100使用采用系統(tǒng)形式的第一線(xiàn)性錯(cuò)誤校正編碼313和數(shù)據(jù)塊330nD來(lái)生成字檢查塊330nWC的一列或多列C(步驟374)。相同行R的字檢查塊330nWC和數(shù)據(jù)塊330nD形成編碼字。對(duì)于數(shù)據(jù)塊330nC的md行中的每行,系統(tǒng)100生成針對(duì)列C的一個(gè)或多個(gè)拆分的編碼檢查塊330nCC(步驟376)。拆分的編碼檢查塊330nCC被生成使得來(lái)自不同列C的n個(gè)拆分的編碼檢查塊330nCC的線(xiàn)性組合形成包括數(shù)據(jù)塊330nD和m個(gè)字檢查塊330nWC的第一編碼檢查塊。第一字檢查塊330nWC(以及從來(lái)自不同列C的拆分的編碼檢查塊330nCC的線(xiàn)性組合得到的任何其他字檢查塊330nWC)形成具有數(shù)據(jù)塊330nD和在步驟374中生成的字檢查塊330nWC的編碼字。例如,針對(duì)每列C的拆分的編碼檢查塊330nCC能夠使用拆分的錯(cuò)誤校正編碼313和md個(gè)數(shù)據(jù)塊330nD或字檢查塊330nWC來(lái)生成,其中拆分的錯(cuò)誤校正編碼313包括與針對(duì)被應(yīng)用到數(shù)據(jù)塊330nD的第一線(xiàn)性錯(cuò)誤校正編碼313的生成器矩陣編碼相同的拆分的生成器矩陣,其中數(shù)據(jù)塊330nD對(duì)于除了列C之外的列C被清零。

系統(tǒng)100存儲(chǔ)數(shù)據(jù)塊330nD和拆分的編碼檢查塊330nCC以及字檢查塊330nWC的列C(步驟378)。在一些實(shí)現(xiàn)方式中,系統(tǒng)100將所有塊330存儲(chǔ)在存儲(chǔ)器主機(jī)110的單個(gè)組處。在一些其他實(shí)現(xiàn)方式中,系統(tǒng)100將每列C分配到存儲(chǔ)器主機(jī)110的不同組。在一些實(shí)現(xiàn)方式中,系統(tǒng)100對(duì)能夠根據(jù)該組G內(nèi)的其他塊330重構(gòu)的塊330進(jìn)行分組,并且將該組的塊330分配到存儲(chǔ)器主機(jī)110的不同組。

當(dāng)系統(tǒng)100標(biāo)識(shí)一個(gè)或多個(gè)損壞的塊330時(shí),系統(tǒng)100能夠使用拆分的編碼檢查塊330nCC和字檢查塊330nWC來(lái)重構(gòu)損壞的塊330。通常,系統(tǒng)100試嘗試使用同一行C中的拆分的編碼檢查塊330nCC和其他數(shù)據(jù)塊330nd來(lái)重構(gòu)損壞的塊330。如果在使用僅僅拆分的編碼檢查塊330nCC重構(gòu)損壞的塊330之后,一些損壞的塊330仍然存在,則系統(tǒng)100使用字檢查塊330nWC進(jìn)行重建,包括使用能夠通過(guò)確定拆分的編碼檢查塊330nCC的線(xiàn)性組合而確定的字檢查塊330nWC進(jìn)行重建。另外,如果在使用僅僅組G的塊330的拆分的編碼檢查塊330nCC來(lái)重構(gòu)損壞的塊330之后,一些損壞的塊330仍然存在,則系統(tǒng)100使用來(lái)自塊330的其他組G的塊330來(lái)重構(gòu)損壞的塊330。

參考回圖2,在一些實(shí)現(xiàn)方式中,由管理者210存儲(chǔ)的文件描述符3001-n包含元數(shù)據(jù)212,例如文件映射214,文件映射214在適當(dāng)?shù)那闆r下將條帶320a-n映射到存儲(chǔ)在存儲(chǔ)器主機(jī)110上的數(shù)據(jù)塊320ndk和非數(shù)據(jù)塊320ncm。為了打開(kāi)文件310,客戶(hù)端120將請(qǐng)求122發(fā)送到管理者210,其返回文件描述符300??蛻?hù)端120使用文件描述符300來(lái)將文件塊偏移轉(zhuǎn)換到遠(yuǎn)程存儲(chǔ)器位置115a-n。文件描述符300可以包括客戶(hù)端密鑰302(例如,32位密鑰),其對(duì)存儲(chǔ)器主機(jī)110上的塊330是唯一的并且用于RDMA讀該塊330。在客戶(hù)端120加載文件描述符300之后,客戶(hù)端120可以經(jīng)由RDMA或另一數(shù)據(jù)取讀方法來(lái)訪(fǎng)問(wèn)文件310的數(shù)據(jù)312。

管理者210可以維持針對(duì)為單元200的部分的所有存儲(chǔ)器主機(jī)110的狀態(tài)信息。狀態(tài)信息可以包括容量、空閑空間、存儲(chǔ)器主機(jī)110上的負(fù)載、從客戶(hù)端的視角的存儲(chǔ)器主機(jī)110的延遲以及當(dāng)前狀態(tài)。管理者210可以通過(guò)直接地查詢(xún)單元200中的存儲(chǔ)器主機(jī)110和/或通過(guò)查詢(xún)客戶(hù)端120以從客戶(hù)端的視角收集延遲統(tǒng)計(jì)數(shù)字來(lái)獲得該信息。在一些示例中,管理者210使用存儲(chǔ)器主機(jī)狀態(tài)信息來(lái)做出再平衡、消耗、恢復(fù)決策和指派決策。

(一個(gè)或多個(gè))管理者210可以指派塊330以便處置針對(duì)文件310中的更多存儲(chǔ)空間的并且用于再平衡和恢復(fù)的客戶(hù)端請(qǐng)求122。管理者210可以維持存儲(chǔ)器主機(jī)負(fù)載和活力的負(fù)載圖216。在一些實(shí)現(xiàn)方式中,管理者210通過(guò)生成候選存儲(chǔ)器主機(jī)110的列表來(lái)指派塊330并將指派塊請(qǐng)求122發(fā)送到候選存儲(chǔ)器主機(jī)110中的每個(gè)候選存儲(chǔ)器主機(jī)。如果存儲(chǔ)器主機(jī)110超載或不具有可用空間,則存儲(chǔ)器主機(jī)110可以拒絕該請(qǐng)求122。在這種情況下,管理者210選擇不同的存儲(chǔ)器主機(jī)110。每個(gè)管理者210可以持續(xù)地掃描文件名稱(chēng)空間的其指定部分,大約每分鐘檢查一次所有元數(shù)據(jù)212。管理者210可以使用文件掃描來(lái)檢查元數(shù)據(jù)212的完整性,確定需要被執(zhí)行的工作,和/或生成統(tǒng)計(jì)數(shù)字。文件掃描可以并發(fā)地與管理者210的其他操作進(jìn)行操作。掃描本身可以不修改元數(shù)據(jù)212,但是調(diào)度要由系統(tǒng)100的其他部件完成的工作并計(jì)算統(tǒng)計(jì)數(shù)字。

在一些實(shí)現(xiàn)方式中,處理器202可以將數(shù)據(jù)塊330nD中的一個(gè)或多個(gè)數(shù)據(jù)塊和非數(shù)據(jù)塊330nC中的一個(gè)或多個(gè)非數(shù)據(jù)塊分組到組G中。該組G的一個(gè)或多個(gè)塊330能夠根據(jù)該組G的其他塊330來(lái)被重構(gòu)。因此,當(dāng)重構(gòu)組G的塊330時(shí),管理者210讀取該組G的塊330以重構(gòu)該組G內(nèi)的損壞的塊330。這允許對(duì)缺失的塊330的更高效的重建,并且減少被讀取的塊330的數(shù)量。具體地,減少塊讀取的數(shù)量能夠減小讀取的代價(jià),因?yàn)閷?duì)硬件設(shè)備(例如,存儲(chǔ)器主機(jī)114)的較少的讀取被執(zhí)行,并且減少重構(gòu)的延遲,因?yàn)榫徛脑O(shè)備不太可能要被訪(fǎng)問(wèn)。

參考圖4A-4C,管理者210可以確定分布式存儲(chǔ)系統(tǒng)100的維護(hù)層次結(jié)構(gòu)400來(lái)標(biāo)識(shí)在其處可能發(fā)生維護(hù)的級(jí)別(例如,級(jí)別1-5),而不影響對(duì)所存儲(chǔ)的數(shù)據(jù)312的用戶(hù)訪(fǎng)問(wèn)。維護(hù)可以包括功率維護(hù)、冷卻系統(tǒng)維護(hù)(圖4C)、聯(lián)網(wǎng)維護(hù)、更新或更換零件、或影響分布式存儲(chǔ)系統(tǒng)100的其他維護(hù)或功率故障。

維護(hù)層次結(jié)構(gòu)400標(biāo)識(shí)維護(hù)域402的級(jí)別(例如,級(jí)別1-5),其中每個(gè)維護(hù)域402可以處于活躍狀態(tài)或不活躍狀態(tài)。分布式存儲(chǔ)系統(tǒng)100的每個(gè)存儲(chǔ)器主機(jī)110與一個(gè)或多個(gè)維護(hù)域402相關(guān)聯(lián)。此外,處理器202對(duì)存儲(chǔ)器主機(jī)110與維護(hù)域402及其部件410、420、430、440、114的關(guān)聯(lián)進(jìn)行映射。圖4A示出了嚴(yán)格層次結(jié)構(gòu)400a,其中每個(gè)部件410、420、430、440、114取決于一個(gè)其他部件410、420、430、440、114,而圖4B示出了非嚴(yán)格級(jí)別400b,其中一個(gè)部件410、420、430、440、114具有超過(guò)一個(gè)輸入饋送。在一些示例中,處理器202將維護(hù)級(jí)別400存儲(chǔ)在處理器202的非瞬態(tài)存儲(chǔ)器204上。例如,存儲(chǔ)資源114a被映射到機(jī)架440a,機(jī)架440a被映射到母線(xiàn)槽430a,母線(xiàn)槽430a繼而被映射到分發(fā)中心模塊420a,分發(fā)中心模塊420a繼而被映射到發(fā)電廠410a。處理器202基于部件410、420、430、440、114的映射來(lái)確定當(dāng)部件410、420、430、440、114正在經(jīng)歷維護(hù)時(shí)哪些資源主機(jī)110是不活躍的。一旦系統(tǒng)100將維護(hù)域402映射到存儲(chǔ)資源114時(shí),系統(tǒng)100確定能夠在其處執(zhí)行維護(hù)的最高級(jí)別(例如,級(jí)別1-5),同時(shí)維持?jǐn)?shù)據(jù)可用性。

維護(hù)域402包括經(jīng)歷維護(hù)的部件410、420、430、440、114和依賴(lài)于部件410、420、430、440、114的任何部件。因此,當(dāng)一個(gè)部件410、420、430、440、114正在經(jīng)歷維護(hù)時(shí),該部件410、420、430、440、114是不活躍的,并且部件410、420、430、440、114的維護(hù)域402中的任何部件410、420、430、440、114也是不活躍的。如圖4A所示,級(jí)別1部件可以包括存儲(chǔ)資源114a-n;級(jí)別2部件可以包括機(jī)架440a-n;級(jí)別3部件可以包括母線(xiàn)槽430a-n;級(jí)別4部件可以包括功率模塊分發(fā)中心420a-420n;并且級(jí)別5部件可以包括將功率提供到級(jí)別1部件到級(jí)別4部件的發(fā)電廠410。其他部件也可以是可用的。當(dāng)存儲(chǔ)器主機(jī)110正在經(jīng)歷維護(hù)時(shí),包括存儲(chǔ)器主機(jī)110和存儲(chǔ)設(shè)備114的級(jí)別1維護(hù)域402a是不活躍的。當(dāng)機(jī)架440a正在經(jīng)歷維護(hù)時(shí),包括機(jī)架440a和從屬于機(jī)架440a的存儲(chǔ)器主機(jī)110的級(jí)別2維護(hù)域402b處于不活躍狀態(tài)。當(dāng)母線(xiàn)槽430a正在經(jīng)歷維護(hù)時(shí),包括母線(xiàn)槽430a和從屬于母線(xiàn)槽430a的級(jí)別1和2中的任何部件的級(jí)別3維護(hù)域402c處于不活躍狀態(tài)。當(dāng)功率模塊分發(fā)中心420a正在經(jīng)歷維護(hù)時(shí),包括功率模塊分發(fā)中心420a和從屬于功率模塊分發(fā)中心420a的級(jí)別1到3中的任何部件的級(jí)別4維護(hù)域402d處于不活躍狀態(tài)。最后,當(dāng)發(fā)電廠410正在經(jīng)歷維護(hù)時(shí),包括任何功率模塊分發(fā)中心420、母線(xiàn)槽430、機(jī)架440和從屬于發(fā)電廠410的存儲(chǔ)器主機(jī)110的級(jí)別5維護(hù)域402e是不活躍的,并且因此用戶(hù)不能夠訪(fǎng)問(wèn)位于級(jí)別1維護(hù)域402a內(nèi)的數(shù)據(jù)312。

在一些示例中,如圖4B所示,非嚴(yán)格層次結(jié)構(gòu)400b部件410、420、430、440、114具有雙重饋送,即部件410、420、430、440、114取決于兩個(gè)或更多個(gè)其他部件410、420、430、440、114。例如,母線(xiàn)槽430n可以具有來(lái)自?xún)蓚€(gè)功率模塊410的饋送;和/或機(jī)架440可以具有來(lái)自?xún)蓚€(gè)母線(xiàn)槽430的雙重饋送。如所示出的,第一維護(hù)域402c可以包括兩個(gè)機(jī)架440a和440n,其中第二機(jī)架440n包括來(lái)自?xún)蓚€(gè)母線(xiàn)槽430a、430n的兩個(gè)饋送。因此,第二機(jī)架440n是兩個(gè)維護(hù)域402ca和402cb的一部分。因此,維護(hù)層次結(jié)構(gòu)400的較高級(jí)別被維持,而不引起維護(hù)層次結(jié)構(gòu)400的較低級(jí)別的損失。這引起系統(tǒng)100中的冗余,其允許數(shù)據(jù)可訪(fǎng)問(wèn)性。具體地,功率模塊分發(fā)中心420可以被維持,而不損失從屬于其的母線(xiàn)槽430中的任何。在一些示例中,機(jī)架440包括雙電源機(jī)架440,其允許母線(xiàn)槽430的維護(hù)而不損失到從屬于其的雙電源機(jī)架440的功率。在一些示例中,被維持而不引起故障的維護(hù)域402在分發(fā)塊330時(shí)被忽視以允許維護(hù);然而,被忽視的維護(hù)域402可以在分發(fā)塊330時(shí)被包含,這是因?yàn)橛?jì)劃外的故障可以仍然引起塊330的損失。

在一些示例中,如圖4C所示,維護(hù)層次結(jié)構(gòu)400是冷卻層次結(jié)構(gòu)400c(或功率層次結(jié)構(gòu)400a、400b的組合)和冷卻層次結(jié)構(gòu)400c。冷卻層次結(jié)構(gòu)400c將冷卻設(shè)備442映射到其冷卻的機(jī)架440。如所示出的,冷卻設(shè)備442可以冷卻一個(gè)或多個(gè)機(jī)架440。處理器202存儲(chǔ)存儲(chǔ)器主機(jī)110與冷卻維護(hù)域402f的關(guān)聯(lián)。在一些實(shí)現(xiàn)方式中,處理器202考慮可能在存儲(chǔ)系統(tǒng)100內(nèi)發(fā)生的維護(hù)的所有可能組合以確定層次結(jié)構(gòu)400或?qū)哟谓Y(jié)構(gòu)400a、400b、400c的組合。

因此,當(dāng)存儲(chǔ)系統(tǒng)100中的部件410、420、430、440、114被維護(hù)時(shí),該部件410、420、430、440、114和被映射到或從屬于該部件410、420、430、440、114的任何部件410、420、430、440、114處于不活躍狀態(tài)。處于不活躍狀態(tài)的部件410、420、430、440、114不可由用戶(hù)120訪(fǎng)問(wèn),而處于活躍狀態(tài)的部件410、420、430、440、114可由用戶(hù)訪(fǎng)問(wèn),從而允許用戶(hù)訪(fǎng)問(wèn)存儲(chǔ)在該部件410、420、430、440、114上或存儲(chǔ)在被映射到該部件410、420、430、440、114的存儲(chǔ)器主機(jī)110上的數(shù)據(jù)312。如前面所提到的,在不活躍狀態(tài)期間,用戶(hù)不能夠訪(fǎng)問(wèn)與經(jīng)歷維護(hù)的維護(hù)域402相關(guān)聯(lián)的存儲(chǔ)器主機(jī)110;并且因此,用戶(hù)不能夠訪(fǎng)問(wèn)文件310(即,塊330,其包括條帶副本330nk、數(shù)據(jù)塊330nDk和編碼塊330nCm)。

在一些實(shí)現(xiàn)方式中,處理器202例如基于部件410、420、430、440、114的映射來(lái)限制向任一維護(hù)域402的存儲(chǔ)器主機(jī)110分發(fā)的組G內(nèi)的多個(gè)塊330。因此,如果級(jí)別1維護(hù)域402是不活躍的,則處理器202維持對(duì)該組G的可訪(fǎng)問(wèn)性(即,不健康塊330能夠被重構(gòu)),盡管一些塊330可以是不可訪(fǎng)問(wèn)的。在一些示例中,對(duì)于每組G的塊330,處理器202確定被放置在單個(gè)維護(hù)域402內(nèi)的任何存儲(chǔ)器主機(jī)110內(nèi)的塊330的最大數(shù)量,使得如果與存儲(chǔ)針對(duì)文件310的塊330的存儲(chǔ)器主機(jī)110相關(guān)聯(lián)的維護(hù)域402正在經(jīng)歷維護(hù),則處理器202可以仍然取回該組G內(nèi)的塊330。塊330的最大數(shù)量確保處理器202能夠重構(gòu)該組G內(nèi)的塊330的數(shù)量,盡管一些塊330可能是不可用的。在一些示例中,組G的塊330的最大數(shù)量被設(shè)置為較低閾值以適應(yīng)任何系統(tǒng)故障,同時(shí)仍然能夠根據(jù)塊330來(lái)重構(gòu)該組G的塊330。當(dāng)處理器202將塊330放置在存儲(chǔ)器主機(jī)110上時(shí),處理器202確保在條帶320的組G的塊330內(nèi),當(dāng)單個(gè)維護(hù)域402經(jīng)歷維護(hù)時(shí)不超過(guò)最大數(shù)量的塊330是不活躍的。

參考圖5A-7B,在一些實(shí)現(xiàn)方式中,處理器202確定組G的塊330在存儲(chǔ)器主機(jī)110之中的分發(fā)。在一些示例中,處理器202做出對(duì)來(lái)自存儲(chǔ)設(shè)備140的可用池的用于存儲(chǔ)組G的塊330的存儲(chǔ)器主機(jī)110的第一隨機(jī)選擇150。處理器202選擇與該組G中的塊330的數(shù)量相等的數(shù)量的存儲(chǔ)器主機(jī)110(例如,所選擇的存儲(chǔ)器主機(jī)110S)。接下來(lái),處理器202確定所選擇的存儲(chǔ)器主機(jī)110S的選擇150是否能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性(即,該組G的塊330是可用的)。隨機(jī)選擇150具有當(dāng)在維護(hù)部件410、420、430、440、114中的一個(gè)上進(jìn)行維護(hù)時(shí)允許對(duì)該組G的重建的目的。

參考圖5A和5B,在一些示例中,當(dāng)處理器202確定對(duì)所選擇的存儲(chǔ)器主機(jī)110S的第一隨機(jī)選擇150a不能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性時(shí),處理器202確定與該組G的塊330的數(shù)量相匹配的對(duì)所選擇的存儲(chǔ)器主機(jī)110S的第二隨機(jī)選擇150b。之后,處理器202確定對(duì)所選擇的存儲(chǔ)器主機(jī)110S的第二隨機(jī)選擇150b是否能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性。如果處理器202確定第二隨機(jī)選擇150b不能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性時(shí),則處理器202繼續(xù)做出對(duì)所選擇的存儲(chǔ)器主機(jī)110S的隨機(jī)選擇150n,直到處理器202標(biāo)識(shí)能夠維持該組G的可訪(fǎng)問(wèn)性的對(duì)所選擇的存儲(chǔ)器主機(jī)110S的隨機(jī)選擇150n。

參考圖6A和6B,在一些實(shí)現(xiàn)方式中,當(dāng)處理器202確定對(duì)所選擇的存儲(chǔ)器主機(jī)110S的第一隨機(jī)選擇150a不能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性時(shí),處理器202通過(guò)添加一個(gè)或多個(gè)隨機(jī)選擇的存儲(chǔ)器主機(jī)110S和去除對(duì)應(yīng)數(shù)量的不同的存儲(chǔ)器主機(jī)110S來(lái)修改對(duì)所選擇的存儲(chǔ)器主機(jī)110S的第一隨機(jī)選擇150a。處理器202之后確定經(jīng)更新的第一隨機(jī)選擇150a是否能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性。如果處理器202確定經(jīng)更新的第一隨機(jī)選擇150a不能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性時(shí),則處理器202通過(guò)添加和去除一個(gè)或多個(gè)隨機(jī)選擇的存儲(chǔ)器主機(jī)110S來(lái)更新對(duì)所選擇的存儲(chǔ)器主機(jī)110S的選擇150a。處理器202繼續(xù)更新對(duì)存儲(chǔ)器主機(jī)110的隨機(jī)選擇150a直到處理器202確定所選擇的存儲(chǔ)器主機(jī)110S不能夠在對(duì)分布式存儲(chǔ)系統(tǒng)100的維護(hù)期間維持該組G的可訪(fǎng)問(wèn)性。一旦處理器202做出該確定,則處理器202移動(dòng)到下一條帶320(或文件310)以確定下一條帶320的分發(fā)。在一些實(shí)現(xiàn)方式中,處理器202通過(guò)使用概率采樣、簡(jiǎn)單采樣、分層采樣、聚類(lèi)采樣或來(lái)自其的組合來(lái)確定對(duì)存儲(chǔ)器主機(jī)110的隨機(jī)選擇150。

參考圖7A和7B,在一些實(shí)現(xiàn)方式中,處理器202確定塊330的組G中的塊330的數(shù)量。處理器202之后從分布式存儲(chǔ)系統(tǒng)100的存儲(chǔ)器主機(jī)110的有序循環(huán)列表160選擇具有與文件310的塊330的數(shù)量相等的連續(xù)數(shù)量的存儲(chǔ)器主機(jī)110a-n的所選擇的列表162,有序循環(huán)列表160在第一存儲(chǔ)器主機(jī)110a處開(kāi)始。列表160可以被存儲(chǔ)在處理器202的非瞬態(tài)存儲(chǔ)器204上。處理器202之后確定來(lái)自所選擇的列表162的所選擇的存儲(chǔ)器主機(jī)110a-n是否全體都不能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性。如果處理器202確定所選擇的存儲(chǔ)器主機(jī)110a-n全體都不能夠在一個(gè)或多個(gè)(或閾值數(shù)量的)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性,則處理器202從有序循環(huán)列表160選擇具有與條帶320或文件310的塊330的數(shù)量相等的連續(xù)數(shù)量的存儲(chǔ)器主機(jī)110a-n的另一所選擇的列表162。在一些示例中,當(dāng)處理器202確定所選擇的列表162的存儲(chǔ)器主機(jī)110a-n全體都不能夠維持塊330的該組G的可訪(fǎng)問(wèn)性時(shí),處理器202移動(dòng)到在有序循環(huán)列表160中在第一存儲(chǔ)器主機(jī)110n之后的第二存儲(chǔ)器主機(jī)110(n+1)。在其他示例中,處理器202沿有序循環(huán)列表160向下移動(dòng)預(yù)定數(shù)量的位置。在一些實(shí)現(xiàn)方式中,處理器202確定存儲(chǔ)系統(tǒng)100的存儲(chǔ)器主機(jī)110的有序循環(huán)列表160,其中有序循環(huán)列表160上的相鄰存儲(chǔ)器主機(jī)110或閾值數(shù)量的連續(xù)存儲(chǔ)器主機(jī)110與不同的維護(hù)域402相關(guān)聯(lián)。額外地或備選地,處理器202確定存儲(chǔ)系統(tǒng)100的存儲(chǔ)器主機(jī)110的有序循環(huán)列表160,其中有序循環(huán)列表160上的相鄰存儲(chǔ)器主機(jī)110或閾值數(shù)量的連續(xù)存儲(chǔ)器主機(jī)110中的每個(gè)處于不同的地理位置。在一些示例中,有序循環(huán)列表160上的存儲(chǔ)器主機(jī)110被布置使得不同的維護(hù)域402使得數(shù)據(jù)312順序地沿著有序列表160散布。例如,如圖4A所示,列表160可以不包含依賴(lài)于相同的母線(xiàn)槽430a的順序的存儲(chǔ)器主機(jī)110。相反,列表160上的兩個(gè)順序的存儲(chǔ)器主機(jī)110是來(lái)自不同的維護(hù)域402的以確保數(shù)據(jù)可訪(fǎng)問(wèn)性被維持。

參考圖8,在一些實(shí)現(xiàn)方式中,在分布式存儲(chǔ)系統(tǒng)100中分發(fā)數(shù)據(jù)312的方法800包括將文件310接收802到非瞬態(tài)存儲(chǔ)器204中并使用與非瞬態(tài)存儲(chǔ)器204進(jìn)行通信的計(jì)算機(jī)處理器202來(lái)將接收到的文件310劃分804成塊330。方法800還包括將數(shù)據(jù)塊330nD中的一個(gè)或多個(gè)數(shù)據(jù)塊和非數(shù)據(jù)塊330nC中的一個(gè)或多個(gè)非數(shù)據(jù)塊分組806到組G中。該組G中的一個(gè)或多個(gè)塊330能夠根據(jù)該組G中的其他塊330來(lái)被重構(gòu)。方法800還包括基于分布式存儲(chǔ)系統(tǒng)100的層次結(jié)構(gòu)來(lái)將該組G中的各塊330分發(fā)808到分布式存儲(chǔ)系統(tǒng)100的各存儲(chǔ)設(shè)備114。該層次結(jié)構(gòu)包括具有活躍狀態(tài)和不活躍狀態(tài)的維護(hù)域402。此外,每個(gè)存儲(chǔ)設(shè)備114與維護(hù)域402相關(guān)聯(lián)。組G中的各塊330跨多個(gè)維護(hù)域402被分發(fā)以在維護(hù)域402處于不活躍狀態(tài)時(shí)維持重構(gòu)該組G中的各塊330的能力。

在一些實(shí)現(xiàn)方式中,方法800還包括限制組G中分發(fā)到任一維護(hù)域402的存儲(chǔ)設(shè)備114的塊330的數(shù)量。方法800還包括通過(guò)確定與組中的塊的數(shù)量相匹配的對(duì)存儲(chǔ)設(shè)備114的第一隨機(jī)選擇150a并確定對(duì)存儲(chǔ)設(shè)備114的選擇是否能夠在一個(gè)或多個(gè)單元402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性來(lái)確定該組G中的各塊330在各存儲(chǔ)設(shè)備114之中的分發(fā)。在一些示例中,當(dāng)對(duì)存儲(chǔ)設(shè)備114的第一隨機(jī)選擇150a不能夠在一個(gè)或多個(gè)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性時(shí),方法800還包括確定與該組G中的塊330的數(shù)量相匹配的對(duì)存儲(chǔ)設(shè)備114的第二隨機(jī)選擇150b或者通過(guò)添加或去除一個(gè)或多個(gè)隨機(jī)選擇的存儲(chǔ)設(shè)備114來(lái)修改對(duì)存儲(chǔ)設(shè)備114的第一隨機(jī)選擇150a。方法800還可以包括使用簡(jiǎn)單采樣、概率采樣、分層采樣或聚類(lèi)采樣來(lái)確定對(duì)存儲(chǔ)設(shè)備114的第一隨機(jī)選擇150a。

在一些實(shí)現(xiàn)方式中,方法800包括通過(guò)從分布式存儲(chǔ)的存儲(chǔ)設(shè)備114的有序循環(huán)列表160選擇與該組G中的塊330的數(shù)量相等的連續(xù)數(shù)量的存儲(chǔ)設(shè)備來(lái)確定該組G中的各塊330在各存儲(chǔ)設(shè)備114之中的分發(fā)。當(dāng)所選擇的存儲(chǔ)設(shè)備114全體都不能夠在一個(gè)或多個(gè)維護(hù)域402處于不活躍狀態(tài)時(shí)維持該組G的可訪(fǎng)問(wèn)性時(shí),方法800還包括從有序循環(huán)列表160選擇與該組G中的塊330的數(shù)量相等的另一連續(xù)數(shù)量的存儲(chǔ)設(shè)備114。額外地或備選地,方法800還包括確定分布式存儲(chǔ)系統(tǒng)100的存儲(chǔ)設(shè)備114的有序循環(huán)列表160。有序循環(huán)列表160上的相鄰存儲(chǔ)設(shè)備114與不同的維護(hù)域402相關(guān)聯(lián)。在一些示例中,有序循環(huán)列表160上的閾值數(shù)量的連續(xù)存儲(chǔ)設(shè)備114中的每個(gè)存儲(chǔ)設(shè)備可以與不同的維護(hù)域402相關(guān)聯(lián)或者每個(gè)存儲(chǔ)設(shè)備可以處于不同的地理位置。

在一些實(shí)現(xiàn)方式中,方法800還包括(例如,使用計(jì)算機(jī)處理器202)確定維護(hù)域402的維護(hù)層次結(jié)構(gòu)400,其中維護(hù)層次結(jié)構(gòu)400具有維護(hù)級(jí)別并且每個(gè)維護(hù)級(jí)別包括一個(gè)或多個(gè)維護(hù)域402。方法800還包括將每個(gè)維護(hù)域402映射到至少一個(gè)存儲(chǔ)設(shè)備114。在一些示例中,每個(gè)維護(hù)域402包括由單個(gè)功率分布單元420或單個(gè)功率母線(xiàn)槽430供電的存儲(chǔ)設(shè)備114。

方法800還可以包括將接收到的文件310劃分成條帶320。每個(gè)文件310包括錯(cuò)誤校正編碼313。錯(cuò)誤校正編碼313是里德-所羅門(mén)編碼、嵌套編碼或分層編碼中的一種。非數(shù)據(jù)塊330包括編碼檢查塊330nCC、字檢查塊330nCC以及編碼檢查字檢查塊330nCCWC。

可以在數(shù)字電子電路、集成電路、專(zhuān)門(mén)設(shè)計(jì)的ASIC(專(zhuān)用集成電路)、計(jì)算機(jī)硬件、固件、軟件和/或其組合來(lái)實(shí)現(xiàn)本文描述的系統(tǒng)和技術(shù)的各種實(shí)現(xiàn)方式。這些各種實(shí)現(xiàn)方式可以包括采用一個(gè)或多個(gè)計(jì)算機(jī)程序的實(shí)現(xiàn)方式,一個(gè)或多個(gè)計(jì)算機(jī)程序在包括至少一個(gè)可編程處理器的可編程系統(tǒng)上是可執(zhí)行的和/或可解釋的,至少一個(gè)可編程處理器可以是專(zhuān)用的或通用的,其耦合為從存儲(chǔ)系統(tǒng)、至少一個(gè)輸入設(shè)備和至少一個(gè)輸出設(shè)備接收數(shù)據(jù)和指令以及將數(shù)據(jù)和指令發(fā)送給存儲(chǔ)系統(tǒng)、至少一個(gè)輸入設(shè)備和至少一個(gè)輸出設(shè)備。

這些計(jì)算機(jī)程序(還被稱(chēng)為程序、軟件應(yīng)用或代碼)包括針對(duì)可編程處理器的機(jī)器指令,并且可以以高級(jí)程序式語(yǔ)言和/或面向?qū)ο缶幊陶Z(yǔ)言和/或以匯編語(yǔ)言/機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)。如本文所使用的,術(shù)語(yǔ)“機(jī)器可讀介質(zhì)”和“計(jì)算機(jī)可讀介質(zhì)”是指用于將機(jī)器指令和/數(shù)據(jù)提供給可編程處理器的任何計(jì)算機(jī)程序產(chǎn)品、裝置和/或設(shè)備(例如,磁盤(pán)、光盤(pán)、存儲(chǔ)區(qū)、可編程邏輯器件(PLD)),包括接收作為機(jī)器可讀信號(hào)的機(jī)器指令的機(jī)器可讀介質(zhì)。術(shù)語(yǔ)“機(jī)器可讀信號(hào)”是指用于將機(jī)器指令和/數(shù)據(jù)提供給可編程處理器的任何信號(hào)。

可以在數(shù)字電子電路中或者在計(jì)算機(jī)軟件、固件或者硬件(包括在本說(shuō)明書(shū)中公開(kāi)的結(jié)構(gòu)及其結(jié)構(gòu)等效物)中或者在它們中的一項(xiàng)或者多項(xiàng)的組合中實(shí)施在本說(shuō)明書(shū)中描述的主題內(nèi)容和功能操作的實(shí)現(xiàn)方式。此外,在本說(shuō)明書(shū)中描述的主題內(nèi)容可以被實(shí)施為一個(gè)或多個(gè)計(jì)算機(jī)程序產(chǎn)品,即被編碼在計(jì)算機(jī)可讀介質(zhì)上以用于由數(shù)據(jù)處理裝置運(yùn)行或者用于控制數(shù)據(jù)處理裝置的操作的計(jì)算機(jī)程序指令的一個(gè)或多個(gè)模塊。計(jì)算機(jī)可讀介質(zhì)可以為機(jī)器可讀存儲(chǔ)設(shè)備、機(jī)器可讀存儲(chǔ)襯底、存儲(chǔ)器設(shè)備、影響機(jī)器可讀傳播信號(hào)的物質(zhì)的成分、或者它們中的一項(xiàng)或者多項(xiàng)的組合。術(shù)語(yǔ)“數(shù)據(jù)處理裝置”、“計(jì)算設(shè)備”和“計(jì)算處理器”涵蓋用于處理數(shù)據(jù)的所有裝置、設(shè)備和機(jī)器,舉例而言包括可編程處理器、計(jì)算機(jī)或多個(gè)處理器或計(jì)算機(jī)。除了硬件,該裝置可以包括創(chuàng)建針對(duì)討論中的計(jì)算機(jī)程序的運(yùn)行環(huán)境的代碼,例如構(gòu)成處理器固件、協(xié)議棧、數(shù)據(jù)庫(kù)管理系統(tǒng)、操作系統(tǒng)或它們中的一項(xiàng)或者多項(xiàng)的組合的代碼。傳播信號(hào)為人為生成的信號(hào),例如,機(jī)器生成的電信號(hào)、光信號(hào)或者電磁信號(hào),該信號(hào)被生成以對(duì)信息編碼以用于向適當(dāng)接收器裝置傳輸。

可以用包括編譯或者解譯語(yǔ)言的任何形式的編程語(yǔ)言編寫(xiě)計(jì)算機(jī)程序(也被稱(chēng)為應(yīng)用、程序、軟件、軟件應(yīng)用、腳本或者代碼),并且可以用任何形式部署它、包括部署為獨(dú)立程序或者部署為適合于在計(jì)算環(huán)境中使用的模塊、部件、子例程、對(duì)象或者其他單元。計(jì)算機(jī)程序不是必需對(duì)應(yīng)于文件系統(tǒng)中的文件。程序可以被存儲(chǔ)于保持其他程序或者數(shù)據(jù)的文件(例如,存儲(chǔ)于標(biāo)記語(yǔ)言文檔中的一個(gè)或者多個(gè)腳本)的一部分中、專(zhuān)用于討論的程序的單個(gè)文件中或者多個(gè)協(xié)同文件(例如,存儲(chǔ)一個(gè)或者多個(gè)模塊、子程序或者代碼部分的文件)中。計(jì)算機(jī)程序可以被部署用于在一個(gè)計(jì)算機(jī)上或者在位于一個(gè)站點(diǎn)或者分發(fā)于多個(gè)站點(diǎn)并且由通信網(wǎng)絡(luò)互連的多個(gè)計(jì)算機(jī)上執(zhí)行。

在本說(shuō)明書(shū)中描述的過(guò)程和邏輯流程可以由一個(gè)或者多個(gè)可編程處理器執(zhí)行,該一個(gè)或者多個(gè)可編程處理器執(zhí)行一個(gè)或者多個(gè)計(jì)算機(jī)程序,以通過(guò)對(duì)輸入數(shù)據(jù)操作并且生成輸出來(lái)執(zhí)行動(dòng)作。過(guò)程和邏輯流程也可以由專(zhuān)用邏輯電路裝置(例如,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門(mén)陣列)或者ASIC(專(zhuān)用集成電路))執(zhí)行并且也可以將裝置實(shí)施為專(zhuān)用邏輯電路裝置。

舉例而言,適合于執(zhí)行計(jì)算機(jī)程序的處理器包括通用和專(zhuān)用微處理器二者以及任何種類(lèi)的數(shù)字計(jì)算機(jī)的任一或者多個(gè)處理器。通常,處理器將從只讀存儲(chǔ)器或者隨機(jī)存取存儲(chǔ)器或者二者接收指令和數(shù)據(jù)。計(jì)算機(jī)的基本單元是用于根據(jù)指令執(zhí)行動(dòng)作的處理器以及用于存儲(chǔ)指令和數(shù)據(jù)的一個(gè)或者多個(gè)存儲(chǔ)器設(shè)備。通常,計(jì)算機(jī)也將包括用于存儲(chǔ)數(shù)據(jù)的一個(gè)或者多個(gè)海量存儲(chǔ)設(shè)備(例如,磁盤(pán)、磁光盤(pán)或者光盤(pán)),或者被操作地耦合用于從該一個(gè)或者多個(gè)海量存儲(chǔ)設(shè)備接收數(shù)據(jù)或者向該一個(gè)或者多個(gè)海量存儲(chǔ)設(shè)備發(fā)送數(shù)據(jù)或者二者。然而,計(jì)算機(jī)不是必需具有這樣的設(shè)備。另外,計(jì)算機(jī)可以被嵌入于另一設(shè)備中,例如,移動(dòng)電話(huà)、個(gè)人數(shù)字助理(PDA)、移動(dòng)音頻播放器、全球定位系統(tǒng)(GPS),等等。適合于存儲(chǔ)計(jì)算機(jī)程序指令和數(shù)據(jù)的計(jì)算機(jī)可讀介質(zhì)包括所有形式的非易失性存儲(chǔ)器、介質(zhì)和存儲(chǔ)器設(shè)備,舉例而言包括半導(dǎo)體存儲(chǔ)器設(shè)備,例如,EPROM、EEPROM和閃速存儲(chǔ)器設(shè)備;磁盤(pán),例如,內(nèi)部硬盤(pán)或者可移動(dòng)盤(pán);磁光盤(pán);以及CD-ROM和DVD-ROM盤(pán)。處理器和存儲(chǔ)器可以由專(zhuān)用邏輯電路裝置補(bǔ)充或者被并入于專(zhuān)用邏輯電路裝置中。

為了提供與用戶(hù)的交互,可以在計(jì)算機(jī)上實(shí)施本公開(kāi)內(nèi)容的一個(gè)或多個(gè)方面,該計(jì)算機(jī)具有用于向用戶(hù)顯示信息的顯示設(shè)備(例如,CRT(陰極射線(xiàn)管)LCD(液晶顯示器)監(jiān)視器或者觸摸屏)以及用戶(hù)可以用來(lái)向計(jì)算機(jī)提供輸入的鍵盤(pán)和指點(diǎn)設(shè)備,例如,鼠標(biāo)或者跟蹤球。其他種類(lèi)的設(shè)備也可以用來(lái)提供與用戶(hù)的交互;例如,向用戶(hù)提供的反饋可以是任何形式的感官反饋,例如,視覺(jué)反饋、聽(tīng)覺(jué)反饋或者觸覺(jué)反饋;并且可以用包括聲音、語(yǔ)音或者觸覺(jué)輸入的任何形式接收來(lái)自用戶(hù)的輸入。此外,計(jì)算機(jī)可以通過(guò)向由用戶(hù)使用的設(shè)備發(fā)送文檔和從該設(shè)備接收文檔(例如,通過(guò)響應(yīng)于從用戶(hù)的客戶(hù)端設(shè)備上的web瀏覽器接收的請(qǐng)求向該web瀏覽器發(fā)送網(wǎng)頁(yè))來(lái)與用戶(hù)交互。

可以在計(jì)算系統(tǒng)中實(shí)施本公開(kāi)內(nèi)容中的一個(gè)或多個(gè)方面,該計(jì)算系統(tǒng)包括例如作為數(shù)據(jù)服務(wù)器的后端部件或者包括中間件部件(例如,應(yīng)用服務(wù)器)或者包括前端部件(例如,具有圖形用戶(hù)界面或者Web瀏覽器(用戶(hù)可以通過(guò)該圖形用戶(hù)界面或者Web瀏覽器與在本說(shuō)明書(shū)中描述的主題內(nèi)容的實(shí)現(xiàn)方式交互)的客戶(hù)端計(jì)算機(jī))或者一個(gè)或者多個(gè)這樣的后端、中間件或者前端部件的任何組合。系統(tǒng)的部件可以由任何數(shù)字?jǐn)?shù)據(jù)通信形式或者介質(zhì)(例如,通信網(wǎng)絡(luò))互連。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(“LAN”)和廣域網(wǎng)(“WAN”)、互聯(lián)網(wǎng)絡(luò)(例如,因特網(wǎng))和對(duì)等網(wǎng)絡(luò)(例如,自組織對(duì)等網(wǎng)絡(luò))。

計(jì)算系統(tǒng)可以包括客戶(hù)端和服務(wù)器??蛻?hù)端和服務(wù)器一般相互遠(yuǎn)離并且通常通過(guò)通信網(wǎng)絡(luò)交互??蛻?hù)端和服務(wù)器的關(guān)系借助在相應(yīng)計(jì)算機(jī)上運(yùn)行并且相互具有客戶(hù)端-服務(wù)器關(guān)系的計(jì)算機(jī)程序而產(chǎn)生。在一些實(shí)現(xiàn)方式中,服務(wù)器向客戶(hù)端設(shè)備傳輸數(shù)據(jù)(例如,HTML頁(yè)面)(例如,用于向與客戶(hù)端設(shè)備交互的用戶(hù)顯示數(shù)據(jù)并且從該用戶(hù)接收用戶(hù)輸入)??梢栽诜?wù)器處從客戶(hù)端設(shè)備接收在客戶(hù)端設(shè)備生成的數(shù)據(jù)(例如,用戶(hù)交互的結(jié)果)。

盡管本說(shuō)明書(shū)包含許多具體細(xì)節(jié),但是不應(yīng)將這些解釋為限制本公開(kāi)內(nèi)容的或者可以要求保護(hù)的內(nèi)容的范圍,而是應(yīng)當(dāng)理解為對(duì)本公開(kāi)內(nèi)容的具體實(shí)現(xiàn)方式特有的特征的描述。在本說(shuō)明書(shū)中在不同的實(shí)現(xiàn)方式的背景中描述的某些特征也可以在單個(gè)實(shí)施例中被組合實(shí)施。相反,在單個(gè)實(shí)現(xiàn)方式的背景中描述的各種特征也可以在多個(gè)實(shí)施例中單獨(dú)地或者在任何適當(dāng)子組合中被實(shí)施。另外,雖然上文可以將特征描述為在某些組合中動(dòng)作,并且甚至初始地這樣要求保護(hù),但是來(lái)自要求保護(hù)的組合的一個(gè)或者多個(gè)特征可以在一些情況下從該組合中被刪除,并且要求保護(hù)的組合可以涉及子組合或者子組合的變型。

類(lèi)似地,盡管在附圖中以特定順序描繪操作,但是這不應(yīng)被理解為要求以所示特定順序或者以依次順序執(zhí)行這樣的操作或者執(zhí)行所有所示操作以實(shí)現(xiàn)期望的結(jié)果。在某些情況下,多任務(wù)和并行處理可以是有利的。另外,在上文描述的實(shí)施例中的各種系統(tǒng)部件的分離不應(yīng)被理解為在所有實(shí)施例中要求這樣的分離,并且應(yīng)當(dāng)理解描述的程序部件和系統(tǒng)通??梢员灰黄鸺捎趩蝹€(gè)軟件產(chǎn)品中或者封裝到多個(gè)軟件產(chǎn)品中。

已經(jīng)描述了許多實(shí)現(xiàn)方式。然而,應(yīng)當(dāng)理解,在不脫離本公開(kāi)內(nèi)容的精神和范圍的情況下,可以進(jìn)行各種修改。因此,其他實(shí)現(xiàn)方式也處于所附權(quán)利要求的范圍內(nèi)。例如,在權(quán)利要求中記載的動(dòng)作可以按不同順序被執(zhí)行而仍然實(shí)現(xiàn)期望的結(jié)果。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1