基於p2p的Distributed File Systemp2pfs的實現構想

來源:互聯網
上載者:User

標籤:Distributed File System   p2p   叢集   最佳化   並發   

這篇日誌最早是儲存在Evernote中,後來寫到了QQ郵箱的記事本裡用發送給了導師,今天貼到CSDN部落格上公布。

 

建立時間:2014年5月11日(星期天) 晚上7:25 | 分類:書籤 | 天氣:廣州大雨-暴雨轉大雨 | 字數:1930  | 發送到我的Qzone | 另存新檔... | 列印 | 添加到日曆

一個Distributed File System

 

簡介

本文提出了一個基於P2P的Distributed File System的構想。它採用蜂群思想(受《失控》啟發),最大化單個節點的智能性來實現群體儲存的智能性。它的優點是支援無限擴容,動態添加和刪除節點,自動最佳化儲存,以及超強的容災能力。

 

主要思路

普通檔案系統都需要一個NameNode,維護檔案清單,用戶端訪問時先跟NameNode通訊,擷取存取檔案的實際位置,再與data server通訊得到檔案內容,這裡client與NameNode一直處於通訊狀態,需要得到檔案位置再與之通訊,這種系統的問題就在於如果NameNode掛掉,整個檔案系統也會癱瘓。現有的方法是熱備份NameNode,犧牲了一些效能,且在特殊條件下並不能保證效果。

 

因此設想一種去中心化的Distributed File System,全部由data server組成。每個data server維護自身儲存的檔案和目錄,並通過與其他Server之間的頻繁通訊來支援檔案系統的正常功能,類似於全球路由轉寄系統。下面詳細介紹不同的檔案系統功能的實現:



P2PFS樣本,藍色表示訪問請求,綠色表示請求轉寄,紅色表示找到檔案並執行檔案通訊

 

讀取:

client可以從任何位置接入叢集,只需要給通訊的data server提交檔案訪問請求,請求只需包含檔案名稱資訊和client的地址,如果dataserver本機上有檔案資料則直接發送給用戶端,如果沒有則轉寄訪問請求,其他data server繼續尋找本機,沒有則繼續轉寄,轉寄之前與client通訊確認client還在監聽,有則根據請求資訊與client發起串連,傳輸資料。

client接收到傳輸請求之後則關閉監聽,開始傳輸資料,此時有可能其他data server還在轉寄該請求,但一旦監測到client已經啟動串連則不再轉寄

client提出檔案訪問請求之後即相當於一台server,可以接收任意dataserver發起的串連而接收資料。它設定一個等待逾時,超過該時間沒有任何data server與這串連,說明這個檔案是不存在的,client返回讀檔案失敗

為了實現多次尋找的最佳化。client請求時有一個參數,記錄上次訪問成功的節點作為參考,如果附加了這一欄位,檔案訪問時會優先尋找該主機,以便實現更快的尋找。同時接入的server會緩衝成功的串連,並在一定時間後失效,這樣做的目的是如果檔案訪問比較頻繁,省去了多次尋找的麻煩。

data server轉寄時每次轉寄3台主機,總體上經過8次轉寄,就可以覆蓋6500多台主機。但是要考慮如何避免請求的重複發送。

 

儲存:

client接入任意一個data server即可寫檔案。首先發送寫請求,該data server直接將檔案寫入本機,並發送備份給上行和下行的不同主機,檔案描述資訊和檔案備份的儲存位置一同儲存,至少三份寫完之後,client成功返回。

data server定期與儲存自己檔案備份的data server列表中的伺服器通訊,當有節點失效沒有響應時,該data server就廣播失效的節點。接收到失效通知的節點,包括上述節點,發送缺失備份的檔案資訊到其他的節點並更新備份資訊。

 

查詢:

查詢檔案系統中檔案大小、是否存在、所有者,許可權等資訊時,只需要傳送檔案請求廣播,收到請求的節點將檔案描述資訊,而不用返迴文件資料。

本檔案系統主要是依據檔案名稱存取,檔案夾可通過檔案名稱加分隔字元的形式實現。當查詢檔案夾下有哪些檔案時,需要使用通配方式返迴文件描述資訊。

 

修改:

以同樣的機制尋找到檔案位置之後,data server對檔案執行增刪改等操作,並根據自身檔案的儲存分布新增或釋放(最終由駐守進程回收磁碟空間),當所有儲存檔案備份的data server返回成功資訊時,client成功返回。

 

刪除:

首先廣播尋找檔案位置,應答的dataserver刪除檔案標記,並根據檔案記錄的備份資訊發送刪除通知,當data server接收到第一個響應地關閉監聽,接收到3個響應時成功返回。

 

——負載平衡

當節點訪問量較大時選擇只接收可承載的服務,被拒絕的檔案訪問請求經過轉寄自動發送到其他備份節點,並由這些節點發送資料給client

 

 

問題:

如何載入頻繁被訪問的檔案的訪問速度?包括固定client頻繁訪問和大規模頻繁訪問?

   client訪問時攜帶上次成功訪問的dataserver資訊,接收請求的server可據此快速定位。從而實現single client快速存取

    接收client的data server的出口節點緩衝成功的串連列表,當大量client通過該data server入口訪問時,可快速定位

 

如何應對掃描,重新命名,空間計算等標準檔案系統需要的操作?

    訪問檔案時支援萬用字元,擷取檔案夾下的檔案清單可通過該方式解決。除此之外,檔案頭儲存檔案的容量,儲存塊地址(節點地址),檔案名稱等資訊,重新命名等不涉及檔案資料的操作時只需要修改這部分資訊

 

如何應對大檔案和小檔案的儲存要求?

    大檔案。大檔案分成多個塊存在不同的位置,訪問檔案時只需找到存放檔案頭資訊的節點,該節點資料發送完成之後再通知下一個儲存資料的節點繼續發送,原理同記憶體中的非連續地址的連續訪問

小檔案以長字串形式儲存成大塊,請求訪問時定位到該大檔案,通過大檔案頭儲存檔案資訊將檔案資料發送給client

 

實現

每個data server上獨立運行如下幾個進程:

狀態監控進程status:監控節點狀態

用於監控dataserver自身的磁碟佔用、CPU負載、網路輸送量、溫度等資訊。用於機身狀態異常警示,以及在使用者查詢叢集狀態時響應。

 

檔案資訊維護進程filecontrolers:維護節點檔案目錄資訊

響應其他node發來的檔案訪問請求,並查詢和更新本機儲存檔案的資訊,可以是多個進程。dataserver儲存的檔案資訊都儲存在記憶體中,並通過該進程進行維護。

 

檔案資料轉寄進程filetransfers:傳輸資料

對於檔案資訊維護進程確認的檔案通訊任務,如讀檔案操作,節點將傳輸任務交給該進程,該進程負責與client發起串連並傳輸資料,確保資料完整性,在傳輸結束之後中斷連線。

 

叢集心跳進程heartbeat:檢測失效節點

節點上儲存了許多檔案,每個檔案都有在不同節點上的備份,該進程與這些儲存備份的節點定時通訊,當有節點失效時,尋找缺失備份的檔案並傳輸到新的節點恢複檔案。

 

磁碟空間管理進程diskmanager:管理節點磁碟空間

節點上的檔案動態地添加和刪除,會在磁碟空間上留下不連續的磁碟空間,該進程在系統負載較低時掃描檔案,整理磁碟空間



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.