MogileFS和FastDFS分佈式文件系統

一、分佈式文件系統

爲了應對海量數據的存儲和處理,分佈式文件系統應運而生。
那什麼是分佈式文件系統?分佈式文件系統將數據在物理上分佈到多個存儲節點上存儲,並對這些存儲節點進行同一管理和分配,向用戶提供文件系統訪問接口。node

分佈式文件系統具備的特性

  • 高擴展性:可簡單快速添加數據節點進行擴容操做c++

  • 冗餘性:同一數據在多個節點上擁有多個副本,保證某一節點宕機數據不會丟失數據庫

  • 數據複製:文件系統可自行完成數據副本的建立服務器

  • 空間平衡:保持多個存儲節點的存儲空間使用率均衡負載均衡

  • 高IO能力:因爲數據分散在多個節點存儲,並行操做IO能力強於單機系統dom

  • 廉價性異步

二、MogileFS介紹

MogileFS是一個開源的分佈式文件系統,用於組建分佈式文件集羣,由 LiveJournal 旗下 Danga Interactive 公司開發,Danga 團隊開發了包括 Memcached、MogileFS、Perlbal 等不錯的開源項目:(注:Perlbal 是一個強大的 Perl 寫的反向代理服務器)。MogileFS很是適用於存儲海量小文件,好比圖片,小段視頻。分佈式

2.1 MogileFS角色介紹

Application:

存儲和下載的客戶端性能

Tracker:

運行的進程爲mogilefsd。基於事件模型的父進程負責管理全部來自客戶端的請求,均衡請求發送到各個查詢線程,處理子進程間的全部通訊。mogilefsd下的子進程包含:編碼

  • Replication :自動複製數據副本

  • Deletion:刪除線程

  • Query:應答客戶端請求

  • Reaper:某節點失敗後,自動補充丟失的數據副本到其餘節點上

  • Monitor:監控節點和存儲設備的健康和狀態

Database:

MogileFS的元數據存儲在數據庫中,元數據包含命名空間和文件存儲位置信息

Storage Nodes:

運行進程爲mogstored,依賴於Perbal。存儲數據的節點。Tracker與Storage Nodes 通訊採用http協議。
圖片描述

2.2 MogileFS 基本概念

domain:

上傳的每個文件對應一個fid,等同於key的概念。MogileFS容許定義多個域來存放數據,每一個域中的key值必須惟一,不一樣的域中的key能夠相同。

class:

class是每一個域中最小數據副本複製的最小單元,也即數據副本是按class進行總體複製。同時也定義了文件屬性,如數據副本的數量等等。

二、FastDFS

FastDFS是國人使用c++研發的一款輕量級分佈式文件系統,一樣適合存儲海量小文件。

2.1 FastDFS角色介紹

Tracker:

Tracker在客戶端與存儲節點之間扮演協調者角色,它負責管理全部storage node 和group,在多個group間負載均衡數據存儲以及接受客戶端的數據請求。每一個storage啓動以後向tracker彙報本身所屬group及健康信息,由此,在內存中tracker維護這些不多的元數據,即group與storage的映射關係。
這使得tracker的擴展十分容易,全部的tracker都會接收來自storage的報告信息,生成元數據以後提供讀寫服務。

Storage:

存儲數據的節點,保存文件的元數據信息,完成客戶端的數據請求。storage是以group爲單位組織起來的,一個group包含至少一個storage,group內的storage互爲備份存儲相同的數據,作到冗餘功能。每一個storage下容許掛載多個目錄,數據存儲在本地文件系統上。

client:

數據請求者,以特定協議與tracker和storage通訊,並保存上傳文件後storage返回的key。
圖片描述

2.2 一個上傳流程

前提是storage不斷向tracker彙報狀態信息,當客戶端向tracker提交上傳請求,tracker根據調度規則挑選一個group,並把group中一個storage的地址信息返回給客戶端,客戶端繼而將文件上傳至該storage中,storage根據規則選擇一個目錄存儲數據,storage存儲成功後返回一個文件存儲路徑信息。路徑信息由多個字段拼接而成。其中fileid包含了豐富信息,上傳的源storageIP地址,文件建立時間戳,文件大小,文件後綴,再加上文件crc32和一個隨機數,而後進行base64編碼而成。具體返回的路徑信息以下:
圖片描述
須要注意的是,文件在一個storage存儲完成以後便認爲上傳成功,以後源storage向group內其餘storage提供文件元數據信息,其餘節點自行復制數據。假如在同步的過程當中,源storage失敗,則本次上傳的數據將丟失,若是想要避免這種風險,須要在客戶端寫好雙重寫代碼。
圖片描述

2.3 一個下載流程

客戶端向tracker發送路徑地址提交下載請求,tracker解析路徑地址獲得group信息,源storageIP,時間戳等信息後,根據規則挑選一個最佳storage地址信息返回給客戶端,客戶端再發送請求到指定storage,storage檢索到後將數據發送給客戶端。
在下載流程中,tracker挑選storage的細節:因爲同一group內storage以異步形式存儲數據,因此當源storage存儲數據完成後,客戶端立刻請求剛剛上傳的數據,這時其餘storage節點頗有可能沒有完成數據同步,因此tracker須要根據時間戳信息進行判斷哪些storage可接受客戶端的數據請求。
圖片描述

三、MogileFS和FastDFS比較

FastDFS的性能要優於MogileFS,緣由在於,FastDFS採用c++較爲底層的語言實現,效率要比perl編寫的MogileFS高,並且FastDFS裁剪了DB這一角色,將元數據直接保存在storage中更加提高了性能。FastDFS缺點在於,當一個storage中的某一目錄掛載的磁盤損壞的話,不能進行自動恢復,須要手動恢復比較麻煩。

相關文章
相關標籤/搜索