專利名稱::一種具有p2p功能的分布式存儲系統(tǒng)和方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種具有p2p功能的分布式存儲系統(tǒng)和方法,屬于流媒體存儲領(lǐng)域。
背景技術(shù):
:傳統(tǒng)的網(wǎng)絡(luò)存儲系統(tǒng)采用單一的存儲服務(wù)器存放所有數(shù)據(jù),存儲服務(wù)器將成為系統(tǒng)性能的瓶頸,也將成為可靠性和安全性的焦點,而且還有單點依賴的缺陷,另外傳統(tǒng)的存儲服務(wù)器價格也比較昂貴,在數(shù)據(jù)恢復速度、可維護性方面都有比較大的缺陷,已經(jīng)很難滿足大規(guī)模存儲應(yīng)用的需要。為了解決這些問題,提出了網(wǎng)絡(luò)分布式存儲技術(shù)的概念。網(wǎng)絡(luò)分布式存儲技術(shù)是在存儲應(yīng)用上對用戶透明,而實際物理存儲卻自動分布在不同的網(wǎng)絡(luò)存儲節(jié)點上的一種技術(shù)。原來的網(wǎng)絡(luò)應(yīng)用形式,大多是采用集中式,這種方式的瓶頸在于很難擴展鏈接容量。P2p技術(shù)是一種把集中分散為節(jié)點與節(jié)點間的互聯(lián),從而打破了集中方式中的瓶頸問題。從這一意義上來說,如果把p2p技術(shù)與分布式存儲技術(shù)結(jié)合,就能使分布式存儲技術(shù)在數(shù)據(jù)恢復、數(shù)據(jù)分發(fā)、數(shù)據(jù)收束方面會具有更優(yōu)的性能。
發(fā)明內(nèi)容本發(fā)明結(jié)合分布式和p2p技術(shù),這里提出一種具有p2p功能的分布式存儲系統(tǒng)和方法,該系統(tǒng)和方法能夠利用低端機器,甚至用pc機就可以集成組織成一個能應(yīng)用于超大規(guī)模的分布式存儲系統(tǒng)。此系統(tǒng)還具備維護簡單、價格低廉、應(yīng)用透明以及支持無限的水平擴展能力等優(yōu)良特點。該具有p2p功能的分布式存儲系統(tǒng),包括客戶端,中心服務(wù)器和存儲節(jié)點,其特征在于客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶丄山順;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,將資源寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的資源;存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘?,剩余空間等,中心服務(wù)接收各個存儲節(jié)點健康狀況報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況信息對各存儲節(jié)點上的資源進行P2p調(diào)度;中心服務(wù)器采用映射表來存儲資源映射信息而不存儲實際的資源內(nèi)容,所述映射表包括資源名、總長度、資源所在存儲節(jié)點位置等內(nèi)容;存儲節(jié)點存儲實際的資源內(nèi)容,并根據(jù)中心服務(wù)器的調(diào)度與其它存儲節(jié)點進行p2p通信。進一步,各存儲節(jié)點定時向中心服務(wù)器匯報各自的健康狀況;每一個資源都對應(yīng)有一個計數(shù)器;5用戶每訪問一次該資源,則將該資源所對應(yīng)的計數(shù)器值增加;隨著某區(qū)域內(nèi)的用戶讀取該資源的次數(shù)的增加,當該資源所對應(yīng)的計數(shù)器值達到一個設(shè)定的閥值,則中心服務(wù)器將此資源為熱門資源;為了使該區(qū)域內(nèi)的用戶更快的獲取該熱門資源,中心服務(wù)器向各存儲節(jié)點發(fā)出調(diào)度請求,通知距離該區(qū)域最近的存儲節(jié)點來獲取此資源;距離該區(qū)域最近的存儲節(jié)點與具有該熱門資源的存儲節(jié)點之間建立p2p連接,該熱門資源拷貝到距離此區(qū)域最近的存儲節(jié)點上。以及客戶端向中心服務(wù)器發(fā)出讀取資源的請求時;所述資源被分為多個數(shù)據(jù)塊存儲在多個不同的存儲節(jié)點上;中心服務(wù)器查找這所述多個數(shù)據(jù)塊對應(yīng)的存放的地址,并這些地址將返回給客戶丄山順;客戶端根據(jù)從中心服務(wù)器上獲得的多個數(shù)據(jù)塊對應(yīng)的存放的地址,向這些地址所對應(yīng)的存儲節(jié)點發(fā)出讀取數(shù)據(jù)的請求,進而讀取所述資源的全部內(nèi)容。本系統(tǒng)中,客戶端向中心服務(wù)器發(fā)出寫入資源的請求時;首先,客戶端計算出該資源的唯一標識,并將該標識,以及資源長度報告消息的形式告訴中心服務(wù)器;中心服務(wù)器收到報告消息后記錄下此報告消息,同時查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶端;中心服務(wù)器查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶丄山順;所述存儲節(jié)點地址可以是多個,其取決于分塊存儲的塊的大??;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址,客戶端向存儲節(jié)點發(fā)出數(shù)據(jù)寫入請求,進而將數(shù)據(jù)塊傳送到各地址所對應(yīng)的存儲節(jié)點;當存儲完畢后,存儲節(jié)點會把自己收到的塊信息報告給中心服務(wù)器,中心服務(wù)器在映射表中記錄該資源的存放信息??蛻舳讼虼鎯?jié)點發(fā)出數(shù)據(jù)寫入請求時,存儲節(jié)點向中心服務(wù)器請求距自己最近的兩個存儲節(jié)點,并進一步與這兩個存儲節(jié)點建立P2p連接,將客戶端請求寫入的數(shù)據(jù)發(fā)送到這兩個存儲節(jié)點上進行備份。更進一步,如果一個資源在預(yù)先設(shè)定的時間長度內(nèi)被訪問的次數(shù)小于預(yù)先設(shè)定的閥值,則將其設(shè)定為冷門資源,中心服務(wù)器檢測到某塊區(qū)域存在冷門資源后,給此區(qū)域所有存儲有此冷門資源的存儲節(jié)點發(fā)送消息,通知各存儲節(jié)點將其刪除。本發(fā)明還提供了一種具有p2p功能的分布式存儲方法,其特征在于客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶丄山順;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,將資源寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的資源;存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存6儲狀態(tài)信息,包括存儲總?cè)萘?,剩余空間等,中心服務(wù)接收各個存儲節(jié)點狀態(tài)報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況對各存儲節(jié)點上的資源進行p2p調(diào)度。進一步,中心服務(wù)器接收到存儲節(jié)點的健康狀況報告后,根據(jù)健康狀況判斷當某個時段內(nèi)某個地區(qū)的訪問量達到一定程度的時,中心服務(wù)器會認定此資源為熱門資源會自動觸發(fā)存儲節(jié)點之間的P2p調(diào)度;當某個時段內(nèi)某個地區(qū)的訪問量低于一定程度的時候中心服務(wù)器則會認定為此資源為冷門資源,會自動觸發(fā)數(shù)據(jù)收束調(diào)度;如果某個存儲節(jié)點在一定時間內(nèi)未發(fā)送狀態(tài)匯報數(shù)據(jù)包,則認定該存儲節(jié)點為死節(jié)點。更進一步,所述讀寫請求包括寫入資源的請求和讀取資源的請求;當存儲完畢后,存儲節(jié)點會把自己收到的塊信息報告給中心服務(wù)器,中心服務(wù)器在映射表中記錄該資源的存放信息;存儲節(jié)點定時向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘浚S嗫臻g等,中心服務(wù)接收各個存儲節(jié)點狀態(tài)報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況對各存儲節(jié)點上的資源進行p2p調(diào)度。本發(fā)明提出的具有p2p功能的分布式存儲方法包括以下步驟客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶丄山順;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,將資源寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的資源;存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘?,剩余空間等,中心服務(wù)接收各個存儲節(jié)點狀態(tài)報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況對各存儲節(jié)點上的資源進行p2p調(diào)度。更進一步,每一個資源都對應(yīng)有一個計數(shù)器;用戶每訪問一次該資源,則將該資源所對應(yīng)的計數(shù)器值增加;隨著某區(qū)域內(nèi)的用戶讀取該資源的次數(shù)的增加,當該資源所對應(yīng)的計數(shù)器值達到一個設(shè)定的閥值,則中心服務(wù)器將此資源為熱門資源;為了使該區(qū)域內(nèi)的用戶更快的獲取該熱門資源,中心服務(wù)器向各存儲節(jié)點發(fā)出調(diào)度請求,通知距離該區(qū)域最近的存儲節(jié)點來獲取此資源;距離該區(qū)域最近的存儲節(jié)點與具有該熱門資源的存儲節(jié)點之間建立p2p連接,該熱門資源拷貝到距離此區(qū)域最近的存儲節(jié)點上。所述讀寫請求包括寫入資源的請求和讀取資源的請求;客戶端向中心服務(wù)器發(fā)出寫入資源的請求時;首先,客戶端計算出該資源在所有存儲節(jié)點中的唯一標識,并將該唯一標識,以及資源長度報告消息的形式告訴中心服務(wù)器;中心服務(wù)器收到報告消息后記錄下此報告消息,同時查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶端;中心服務(wù)器查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶丄山順;所述存儲節(jié)點地址可以是多個,其取決于分塊存儲的塊的大??;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址數(shù)量,并且資源分解成與存儲節(jié)點的地址數(shù)量相同數(shù)量的數(shù)據(jù)塊,并向存儲節(jié)點發(fā)出數(shù)據(jù)寫入請求,進而將數(shù)據(jù)塊傳送到各地址所對應(yīng)的存儲節(jié)點;當存儲完畢后,存儲節(jié)點會把自己收到的塊信息報告給中心服務(wù)器,中心服務(wù)器在映射表中記錄該資源的存放信息;客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶丄山順;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,將資源寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的資源;存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘浚S嗫臻g等,中心服務(wù)接收各個存儲節(jié)點狀態(tài)報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況對各存儲節(jié)點上的資源進行p2p調(diào)度。圖1是具有p2p功能的分布式存儲系統(tǒng)的示意圖圖2是中心服務(wù)器的構(gòu)成以及數(shù)據(jù)處理示意圖圖3是客戶端向中心服務(wù)器請求讀取資源的示意圖圖4是中心服務(wù)器根據(jù)熱門資源進行調(diào)度的示意圖圖5是客戶端向中心服務(wù)器發(fā)出寫入操作的示意圖圖6是采用冗余存儲來數(shù)據(jù)塊備份的示意圖圖7是對冷門資源進行處理的示意圖圖8是存儲節(jié)點的數(shù)據(jù)處理示意圖圖9是存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告的示意圖具體實施例方式采用附圖l來說明本申請所提出的具有p2p功能的分布式存儲系統(tǒng)。如圖l所示,首先,客戶端向中心服務(wù)器發(fā)出讀寫請求,中心服務(wù)器存儲文件映射信息而不存儲實際的文件內(nèi)容,作為一個具體的實施方式,可以采用一個映射表,映射表包括但不限于文件名、總長度、文件所在存儲節(jié)點位置等內(nèi)容,映射表可以以文件或者數(shù)據(jù)庫的形式來組織實現(xiàn)。中心服務(wù)器從映射表中查找到相應(yīng)的文件的存取地址,該地址對應(yīng)為具體的存儲節(jié)點上存儲介質(zhì)的可尋址的位置,并將該位置返回給客戶端,由于是文件在存儲節(jié)點上是分塊存儲且塊的大小固定,中心服務(wù)器不會調(diào)度磁盤空間還不夠存儲一個數(shù)據(jù)塊的存儲節(jié)點,即如果存儲節(jié)點上的剩余磁盤空間小于一個分塊的大小,則中心服務(wù)器不再指示客戶端在該存儲節(jié)點上進行寫數(shù)據(jù)的操作。中心服務(wù)器進而選擇另一個距客戶端最近的且至少可以存儲一個數(shù)據(jù)塊的存儲節(jié)點。客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,如果符合讀寫條件(例如該存儲節(jié)點的健康狀況良好,剩余磁盤空間大于一個分塊的大小,或者該存儲節(jié)點未處于讀寫保護狀態(tài),或者客戶端與該存儲節(jié)點之間的帶寬大于一個預(yù)先設(shè)定的閥值),客戶端對存儲節(jié)點進行讀寫操作,即將文件寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的文件。存儲節(jié)點作為文件內(nèi)容的實際存儲位置,向中心服務(wù)器發(fā)送狀態(tài)報告,狀態(tài)報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘?,剩余空間等,中心服務(wù)接收各個存儲節(jié)點狀態(tài)報告信息。中心服務(wù)器根據(jù)文件信息和各存儲節(jié)點狀態(tài)信息進行存儲、讀取調(diào)度控制。存儲節(jié)點存儲實際的文件內(nèi)容,并根據(jù)中心服務(wù)器的調(diào)度與其它存儲節(jié)點進行p2p通信。系統(tǒng)有大量的存儲節(jié)點,對存儲節(jié)點機器性能基本沒有限制,甚至可以利用普通pc機,具體的量視具體的應(yīng)用數(shù)據(jù)容量而定。同時存儲節(jié)點需要定時向中心服務(wù)器發(fā)送健康狀況報告信息,以及讀寫事件觸發(fā)的相關(guān)狀態(tài)信息。更進一步,中心服務(wù)器包含數(shù)據(jù)庫模塊、消息接收處理模塊、調(diào)度處理模塊組成。如下圖2所示消息處理模塊可以處理的消息包括,客戶端讀寫請求,存儲節(jié)點的定時狀態(tài)匯報信息。上述兩種消息都會導致中心服務(wù)器讀寫數(shù)據(jù)庫,此外,當客戶端的讀請求達到閥值或者低于某個值后,則消息處理模塊會向調(diào)度處理模塊觸發(fā)調(diào)度事件,然后把結(jié)果告訴數(shù)據(jù)庫。讀數(shù)據(jù)庫的時候數(shù)據(jù)庫返回具體的數(shù)據(jù),而寫入進數(shù)據(jù)庫的時候則返回成功與否。上述數(shù)據(jù)庫模塊可以采用數(shù)據(jù)庫來實現(xiàn),表l-6僅僅描述了主要的關(guān)鍵數(shù)據(jù)項,并不代表實現(xiàn)的全部。表1文件信息表<table>tableseeoriginaldocumentpage9</column></row><table><table>tableseeoriginaldocumentpage10</column></row><table>表3存儲節(jié)點信息表<table>tableseeoriginaldocumentpage10</column></row><table>表4存儲節(jié)點狀態(tài)信息表<table>tableseeoriginaldocumentpage10</column></row><table>表5用戶訪問統(tǒng)計信息表<table>tableseeoriginaldocumentpage10</column></row><table>表6調(diào)度策略配置表文件標識統(tǒng)計時間段用戶訪問區(qū)域訪問數(shù)量閥值—個示意性但不是限定性的關(guān)于客戶端向存儲節(jié)點讀數(shù)據(jù)的例子假設(shè),要讀取的文件為filel,客戶端向中心服務(wù)器發(fā)出讀取請求,包括文件的MD5,該MD5值作為文件在所有存儲節(jié)點中的唯一標識。中心服務(wù)器找到此文件所有的塊存放的存儲節(jié)點后會把每個存儲節(jié)點的數(shù)據(jù)塊信息連同存儲節(jié)點位置發(fā)送給客戶端,例如所要讀取的文件長度為90M,其被分別分成兩個數(shù)據(jù)塊,一個為64M,另一個為24M,分別存儲在不同的存儲節(jié)點上,中心服務(wù)器查找這兩個數(shù)據(jù)塊對應(yīng)的存放地址(這兩個數(shù)據(jù)塊可能在同一個存儲節(jié)點上,也可能是在不同的存儲節(jié)點上,因此所述的存放地址不少于一個),并返回給客戶端,客戶端根據(jù)從中心服務(wù)器上獲得的這兩個數(shù)據(jù)塊對應(yīng)的存放地址,向上述存放地址所對應(yīng)的存儲節(jié)點發(fā)出讀取數(shù)據(jù)的請求,進而讀取文件filel的整個內(nèi)容。每一個資源(比如文本文件、圖片、視頻文件等)都對應(yīng)有一個計數(shù)器,如果某區(qū)域內(nèi)的用戶讀取該資源的次數(shù)達到一個設(shè)定的閥值,則中心服務(wù)器將此資源為熱門資源,為了使該區(qū)域內(nèi)的用戶更快的獲取該熱門資源,中心服務(wù)器向存儲節(jié)點發(fā)出調(diào)度請求,通知距離此區(qū)域最近的存儲節(jié)點來獲取此資源,以便此區(qū)域內(nèi)的用戶下次能夠高效的讀取。如圖3所示,為每一個文件設(shè)置一個訪問計數(shù)器(如表5中所示的"訪問統(tǒng)計數(shù)"),該文件每被訪問一次則其所對應(yīng)的訪問計數(shù)器加一。當客戶端向中心服務(wù)器發(fā)送文件讀取請求時,中心服務(wù)器返回距客戶端最近的有客戶端要讀取的數(shù)據(jù)的存儲節(jié)點,同時增加客戶端所在區(qū)域的文件訪問計數(shù)器的值,如果訪問計數(shù)器的累計值達到預(yù)先設(shè)定的閥值,則表明該文件為熱門資源,中心服務(wù)器觸發(fā)儲存節(jié)點之間的P2p調(diào)度,其向存儲節(jié)點發(fā)出調(diào)度請求,通知距離此區(qū)域最近的存儲節(jié)點來獲取此文件,距離該區(qū)域最近的存儲節(jié)點與擁有該熱門資源的存儲節(jié)點之間建立p2p連接,以實現(xiàn)將該熱門資源從其他存儲節(jié)點上拷貝到距離此區(qū)域最近的存儲節(jié)點上??蛻舳烁鶕?jù)中心服務(wù)器返回的存儲節(jié)點來讀取數(shù)據(jù)直到讀取完畢。上述p2p通信只會發(fā)生在存儲節(jié)點與存儲節(jié)點之間,經(jīng)中心服務(wù)器調(diào)度后,被調(diào)度的兩個存儲節(jié)點之間會通過HTTP的方式收發(fā)數(shù)據(jù)。觸發(fā)p2p調(diào)度的必要條件是某段時間內(nèi)某個地區(qū)的訪問量達到系統(tǒng)預(yù)先設(shè)定的閥值。如圖4所示,首先,假設(shè)被傳輸熱門資源存在于存儲節(jié)點k上,存儲節(jié)點n是被調(diào)度存儲節(jié)點(也就是說該存儲節(jié)點需要從其他存儲節(jié)點取數(shù)據(jù)的存儲節(jié)點)。存儲節(jié)點之間的數(shù)據(jù)傳輸時通過HTTP協(xié)議來傳輸。首先,存儲節(jié)點n發(fā)送HTTP請求到存儲節(jié)點k,存儲節(jié)點k響應(yīng)并發(fā)送存儲節(jié)點n所需要的數(shù)據(jù)塊給存儲節(jié)點n直到存儲節(jié)點n所需要的數(shù)據(jù)塊全部發(fā)送完畢,這個時候存儲節(jié)點n會通知中心服務(wù)器做出文件信息的相應(yīng)變更,即修改映射表,以調(diào)整資源以及其數(shù)據(jù)塊的存放信息?!獋€示意性但不是限定性的關(guān)于客戶端向存儲節(jié)點寫數(shù)據(jù)的例子要存儲的文件稱為filel,文件長度為90M字節(jié)。首先,客戶端會采用MD5算法計算出此文件的MD5值,該11MD5值作為文件在所有存儲節(jié)點中的唯一標識,然后會把所述MD5值,以及文件長度報告消息的形式告訴中心服務(wù)器,中心服務(wù)器收到此消息后會記錄下此報告消息,同時查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶端,所述存儲節(jié)點可以為多個,其取決于分塊存儲的塊的大小,例如每個分塊存儲的塊大小64M,則對于文件長度為90M的文件,中心服務(wù)器查找距客戶端最近的有足夠磁盤空間的兩個存儲節(jié)點地址返回給客戶端,客戶端判斷其與中心服務(wù)器所返回的存儲節(jié)點之間的P2p通信能力,例如連接狀況(可以用服務(wù)質(zhì)量QoS來反映)、傳輸帶寬,如果連接穩(wěn)定、傳輸帶寬大于預(yù)先設(shè)定的最低通信帶寬,則客戶端會把filel分割成64M,26M兩塊數(shù)據(jù),并且將這兩個數(shù)據(jù)塊傳送到從中心服務(wù)器所獲得的兩個存儲節(jié)點地址所對應(yīng)的存儲節(jié)點。當傳輸完畢后,存儲節(jié)點會把自己收到的塊信息報告給中心服務(wù)器,中心服務(wù)器在映射表中記錄該資源的存放信息,該記錄過程包括在映射表(諸如表l-表6)中填寫相應(yīng)的數(shù)據(jù)項。如圖5所示,當客戶端將文件寫入存儲節(jié)點時,其先向中心服務(wù)器發(fā)出寫入請求,中心服務(wù)器根據(jù)該寫入請求向客戶端返回距離最近的一個存儲節(jié)點地址,客戶端向該存儲節(jié)點發(fā)送將要被寫入的數(shù)據(jù)塊,進而存儲節(jié)點將該數(shù)據(jù)塊進行備份,當該存儲節(jié)點被寫滿以后,客戶端會向中心服務(wù)器另行申請存儲節(jié)點,直到客戶端所有數(shù)據(jù)都寫完畢為止。如果期間有任務(wù)失敗的話,那么會自動選擇另外的存儲節(jié)點進行寫操作。作為本分明的另一種實施方式,可以采用冗余存儲來達到數(shù)據(jù)塊備份的效果,也就是說在存儲節(jié)點收到應(yīng)用層發(fā)來的數(shù)據(jù)后會向中心服務(wù)器請求距自己最近的兩個存儲節(jié)點來備份數(shù)據(jù)。這樣的好處在于客戶端在讀取該存儲節(jié)點上的文件時,如果該存儲節(jié)點發(fā)生意外狀況而導致其不能工作時,客戶端可以從其他兩個擁有備份數(shù)據(jù)的存儲節(jié)點讀取所需要的數(shù)據(jù)。如圖6所示,客戶端向一個北京市電信存儲節(jié)點發(fā)出數(shù)據(jù)寫入請求,則該北京市電信存儲節(jié)點向中心服務(wù)器請求另外兩個存儲節(jié)點的地址,中心服務(wù)器向其返回距離該存儲節(jié)點最近(所述最近可以是物理上的最近,也可以是邏輯鏈路上的最近)的其他兩個存儲節(jié)點,如圖6的底部所示的其他兩個北京市電信節(jié)點,這兩個北京市電信存儲節(jié)點收到備份數(shù)據(jù)后會通知中心服務(wù)器自己收到了來自其上層存儲節(jié)點(圖6中接收客戶端的數(shù)據(jù)的北京市電信存儲節(jié)點)發(fā)送來的備份信息。如果一個資源在預(yù)先設(shè)定的時間長度內(nèi)(比如一月)被訪問的次數(shù)小于預(yù)先設(shè)定的閥值,則將其設(shè)定為冷門資源,冷門資源所占用的存儲節(jié)點磁盤空間就是一種浪費。如圖7所示,中心服務(wù)器檢測到某塊區(qū)域存在冷門資源后,會給此區(qū)域所有存儲有此資源的存儲節(jié)點發(fā)送消息,通知各存儲節(jié)點將其刪除;如果此節(jié)點存儲的資源的來源為客戶端,那么可以認為此節(jié)點上的資源為原始數(shù)據(jù),則壓縮存儲磁帶設(shè)備。如圖8所示,存儲節(jié)點的具有網(wǎng)絡(luò)讀寫數(shù)據(jù)模塊、系統(tǒng)信息收集模塊、狀態(tài)通知模塊,客戶端向存儲節(jié)點發(fā)出1/0請求,存儲節(jié)點的網(wǎng)絡(luò)數(shù)據(jù)讀寫模塊接收該請求,根據(jù)該請求向磁盤讀寫數(shù)據(jù),如果是讀數(shù)據(jù)返回的是具體的數(shù)據(jù),如果是寫數(shù)據(jù)則返回的是操作結(jié)果(成功或者失敗)。系統(tǒng)信息收集模塊收集磁盤空間,連接數(shù),系統(tǒng)資源占用信息,并由狀態(tài)通知模塊負責把這些信息匯報給中心服務(wù)器。如圖9所示,中心服務(wù)器來根據(jù)存儲節(jié)點即時匯報的數(shù)據(jù)來進行調(diào)度,也正是通過定時匯報來得知每個存儲節(jié)點的健康狀況。每個存儲節(jié)點會定時向中心服務(wù)器匯報此節(jié)點的健康狀況(見表3,此外所述健康狀況也可以采用心跳報告來實現(xiàn))。首先,每個存儲節(jié)點都會維護一個定時器,每隔一段時間把系統(tǒng)信息收集器收集到的信息發(fā)送給中心服務(wù)器,這里的信息包括某個時段內(nèi)某個地區(qū)的訪問量、磁盤剩余空間,連接數(shù)。其中,某個時段內(nèi)某個地區(qū)的訪問量是存儲節(jié)點之間觸發(fā)p2p調(diào)度的依據(jù),也是數(shù)據(jù)收束調(diào)度的依據(jù)。當某個時段內(nèi)某個地區(qū)的訪問量達到一定程度的時候中心服務(wù)器會認定此資源為熱門資源會自動觸發(fā)存儲節(jié)點之間的P2p調(diào)度,當某個時段內(nèi)某個地區(qū)的訪問量低于一定程度的時候中心服務(wù)器則會認定為此資源為冷門資源,會自動觸發(fā)數(shù)據(jù)收束調(diào)度。磁盤剩余空間和連接數(shù)則做為負載均衡調(diào)度的依據(jù)。此外狀態(tài)匯報也可當作心跳包使用,如果某個存儲節(jié)點在一定時間內(nèi)未發(fā)送狀態(tài)匯報數(shù)據(jù)包,則認定該存儲節(jié)點為死節(jié)點,來做為存儲節(jié)點是否存活的依據(jù)。綜上所述,本發(fā)明提供了一種存儲節(jié)點間具備p2p功能的分布式文件存儲系統(tǒng)及其相應(yīng)的方法,此系統(tǒng)較其他文件存儲系統(tǒng)和方法的最大特點就是以智能的方式實現(xiàn)了分布式存儲,并且存儲節(jié)點與存儲節(jié)點間可以通過p2p的方式進行數(shù)據(jù)轉(zhuǎn)移。這兩個特性使得分布式存儲系統(tǒng)對于應(yīng)用系統(tǒng)來說提供了更透明的使用方式和更高效的數(shù)據(jù)存儲效率。同時本系統(tǒng)和方法的實現(xiàn)方式還為極大的利用低端機器構(gòu)架超大規(guī)模的的存儲系統(tǒng)提供了方法,這一方法極大的降低了存儲系統(tǒng)的成本,卻并不損失性能。權(quán)利要求一種具有p2p功能的分布式存儲系統(tǒng),包括客戶端,中心服務(wù)器和存儲節(jié)點,其特征在于客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶端;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,將資源寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的資源;存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘浚S嗫臻g等,中心服務(wù)接收各個存儲節(jié)點健康狀況報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況信息對各存儲節(jié)點上的資源進行p2p調(diào)度;中心服務(wù)器采用映射表來存儲資源映射信息而不存儲實際的資源內(nèi)容,所述映射表包括資源名、總長度、資源所在存儲節(jié)點位置等內(nèi)容;存儲節(jié)點存儲實際的資源內(nèi)容,并根據(jù)中心服務(wù)器的調(diào)度與其它存儲節(jié)點進行p2p通信。2.如權(quán)利要求1所述的具有p2p功能的分布式存儲系統(tǒng),其特征在于各存儲節(jié)點定時向中心服務(wù)器匯報各自的健康狀況;所述健康狀況進一步包括某個時段內(nèi)某個地區(qū)的訪問量、磁盤剩余空間,連接數(shù);如果某個存儲節(jié)點在一定時間內(nèi)未發(fā)送狀態(tài)匯報數(shù)據(jù)包,則認定該存儲節(jié)點為死節(jié)點中心服務(wù)器來根據(jù)存儲節(jié)點的健康狀況來進行調(diào)度;對于一個資源而言,當某個時段內(nèi)某個地區(qū)的訪問量達到一定程度時,中心服務(wù)器認定此資源為熱門資源,并觸發(fā)存儲節(jié)點之間的p2p調(diào)度,當某個時段內(nèi)某個地區(qū)的訪問量低于一定程度時,中心服務(wù)器則認定為此資源為冷門資源,并觸發(fā)數(shù)據(jù)收束調(diào)度。3.如權(quán)利要求2所述的具有p2p功能的分布式存儲系統(tǒng),其特征在于每一個資源都對應(yīng)有一個計數(shù)器;用戶每訪問一次該資源,則將該資源所對應(yīng)的計數(shù)器值增加;隨著某區(qū)域內(nèi)的用戶讀取該資源的次數(shù)的增加,當該資源所對應(yīng)的計數(shù)器值達到一個設(shè)定的閥值,則中心服務(wù)器將此資源為熱門資源;為了使該區(qū)域內(nèi)的用戶更快的獲取該熱門資源,中心服務(wù)器向各存儲節(jié)點發(fā)出調(diào)度請求通知距離該區(qū)域最近的存儲節(jié)點來獲取此資源;距離該區(qū)域最近的存儲節(jié)點與具有該熱門資源的存儲節(jié)點之間建立p2p連接,該熱門資源拷貝到距離此區(qū)域最近的存儲節(jié)點上。4.如權(quán)利要求2所述的具有p2p功能的分布式存儲系統(tǒng),其特征在于客戶端向中心服務(wù)器發(fā)出讀取資源的請求時;所述資源被分為多個數(shù)據(jù)塊存儲在多個不同的存儲節(jié)點上;中心服務(wù)器查找這所述多個數(shù)據(jù)塊對應(yīng)的存放的地址,并這些地址將返回給客戶端;客戶端根據(jù)從中心服務(wù)器上獲得的多個數(shù)據(jù)塊對應(yīng)的存放的地址,向這些地址所對應(yīng)的存儲節(jié)點發(fā)出讀取數(shù)據(jù)的請求,進而讀取所述資源的全部內(nèi)容。5.如權(quán)利要求2所述的具有p2p功能的分布式存儲系統(tǒng),其特征在于客戶端向中心服務(wù)器發(fā)出寫入資源的請求時;首先,客戶端計算出該資源在所有存儲節(jié)點中的唯一標識,并將該唯一標識,以及資源長度報告消息的形式告訴中心服務(wù)器;中心服務(wù)器收到報告消息后記錄下此報告消息,同時查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶端;中心服務(wù)器查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶端;所述存儲節(jié)點地址可以是多個,其取決于分塊存儲的塊的大??;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址數(shù)量,并且資源分解成與存儲節(jié)點的地址數(shù)量相同數(shù)量的數(shù)據(jù)塊,并向存儲節(jié)點發(fā)出數(shù)據(jù)寫入請求,進而將數(shù)據(jù)塊傳送到各地址所對應(yīng)的存儲節(jié)點;當存儲完畢后,存儲節(jié)點會把自己收到的塊信息報告給中心服務(wù)器,中心服務(wù)器在映射表中記錄該資源的存放信息。6.如權(quán)利要求5所述的具有p2p功能的分布式存儲系統(tǒng),其特征在于客戶端向存儲節(jié)點發(fā)出數(shù)據(jù)寫入請求時,存儲節(jié)點向中心服務(wù)器請求距自己最近的兩個存儲節(jié)點,并進一步與這兩個存儲節(jié)點建立p2p連接,將客戶端請求寫入的數(shù)據(jù)發(fā)送到這兩個存儲節(jié)點上進行備份。7.如權(quán)利要求2所述的具有p2p功能的分布式存儲系統(tǒng),其特征在于如果一個資源在預(yù)先設(shè)定的時間長度內(nèi)被訪問的次數(shù)小于預(yù)先設(shè)定的閥值,則將其設(shè)定為冷門資源,中心服務(wù)器檢測到某塊區(qū)域存在冷門資源后,給此區(qū)域所有存儲有此冷門資源的存儲節(jié)點發(fā)送消息,通知各存儲節(jié)點將其刪除。8.—種具有p2p功能的分布式存儲方法,其特征在于包括以下步驟客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶端;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,將資源寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的資源;存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘?,剩余空間等,中心服務(wù)接收各個存儲節(jié)點狀態(tài)報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況對各存儲節(jié)點上的資源進行p2p調(diào)度。9.如權(quán)利要求8所述的具有p2p功能的分布式存儲方法,其特征在于每一個資源都對應(yīng)有一個計數(shù)器;用戶每訪問一次該資源,則將該資源所對應(yīng)的計數(shù)器值增加;隨著某區(qū)域內(nèi)的用戶讀取該資源的次數(shù)的增加,當該資源所對應(yīng)的計數(shù)器值達到一個設(shè)定的閥值,則中心服務(wù)器將此資源為熱門資源;為了使該區(qū)域內(nèi)的用戶更快的獲取該熱門資源,中心服務(wù)器向各存儲節(jié)點發(fā)出調(diào)度請求,通知距離該區(qū)域最近的存儲節(jié)點來獲取此資源;距離該區(qū)域最近的存儲節(jié)點與具有該熱門資源的存儲節(jié)點之間建立p2p連接,該熱門資源拷貝到距離此區(qū)域最近的存儲節(jié)點上。10.如權(quán)利要求8所述的具有p2p功能的分布式存儲方法,其特征在于所述讀寫請求包括寫入資源的請求和讀取資源的請求;客戶端向中心服務(wù)器發(fā)出寫入資源的請求時;首先,客戶端計算出該資源在所有存儲節(jié)點中的唯一標識,并將該唯一標識,以及資源長度報告消息的形式告訴中心服務(wù)器;中心服務(wù)器收到報告消息后記錄下此報告消息,同時查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶端;中心服務(wù)器查找距客戶端最近的有足夠磁盤空間的存儲節(jié)點地址返回給客戶端;所述存儲節(jié)點地址可以是多個,其取決于分塊存儲的塊的大??;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址數(shù)量,并且資源分解成與存儲節(jié)點的地址數(shù)量相同數(shù)量的數(shù)據(jù)塊,并向存儲節(jié)點發(fā)出數(shù)據(jù)寫入請求,進而將數(shù)據(jù)塊傳送到各地址所對應(yīng)的存儲節(jié)點;當存儲完畢后,存儲節(jié)點會把自己收到的塊信息報告給中心服務(wù)器,中心服務(wù)器在映射表中記錄該資源的存放信息;客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶端;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,將資源寫入存儲節(jié)點中的存儲介質(zhì)上,或者從存儲節(jié)點中的存儲介質(zhì)中讀取相應(yīng)的資源;存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,健康狀況報告中包括該存儲節(jié)點的存儲狀態(tài)信息,包括存儲總?cè)萘?,剩余空間等,中心服務(wù)接收各個存儲節(jié)點狀態(tài)報告信息;中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況對各存儲節(jié)點上的資源進行p2p調(diào)度。全文摘要本發(fā)明提出一種具有p2p功能的分布式存儲系統(tǒng)和方法,其特征在于客戶端向中心服務(wù)器發(fā)出讀寫請求;中心服務(wù)器從映射表中查找到相應(yīng)的資源的存取地址,并將該位置返回給客戶端;客戶端根據(jù)中心服務(wù)器返回的存儲節(jié)點的地址向具體的存儲節(jié)點發(fā)出讀寫請求,存儲節(jié)點向中心服務(wù)器發(fā)送健康狀況報告,中心服務(wù)器根據(jù)讀寫的資源信息和各存儲節(jié)點健康狀況信息對各存儲節(jié)點上的資源進行p2p調(diào)度。本發(fā)明提供的系統(tǒng)戶方法能夠利用低端機器集成組織成一個超大規(guī)模的分布式存儲系統(tǒng),備維護簡單、支持無限的水平擴展能力。文檔編號H04L29/08GK101710901SQ20091018095公開日2010年5月19日申請日期2009年10月22日優(yōu)先權(quán)日2009年10月22日發(fā)明者李茗,楊永強,祝曉光申請人:樂視網(wǎng)信息技術(shù)(北京)股份有限公司