開源分布式文件系統(tǒng)FastDFS和MogileFS對(duì)比
FastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),她對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊(cè)網(wǎng)站、視頻網(wǎng)站等等。
FastDFS服務(wù)端有兩個(gè)角色:跟蹤器(tracker)和存儲(chǔ)節(jié)點(diǎn)(storage)。跟蹤器主要做調(diào)度工作,在訪問上起負(fù)載均衡的作用。
存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)文件,完成文件管理的所有功能:存儲(chǔ)、同步和提供存取接口,F(xiàn)astDFS同時(shí)對(duì)文件的metadata進(jìn)行管理。所謂文件的meta data就是文件的相關(guān)屬性,以鍵值對(duì)(key valuepair)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個(gè)鍵值對(duì)。
FastDFS系統(tǒng)結(jié)構(gòu)如下圖所示:
跟蹤器和存儲(chǔ)節(jié)點(diǎn)都可以由一臺(tái)多臺(tái)服務(wù)器構(gòu)成。跟蹤器和存儲(chǔ)節(jié)點(diǎn)中的服務(wù)器均可以隨時(shí)增加或下線而不會(huì)影響線上服務(wù)。其中跟蹤器中的所有服務(wù)器都是對(duì)等的,可以根據(jù)服務(wù)器的壓力情況隨時(shí)增加或減少。
為了支持大容量,存儲(chǔ)節(jié)點(diǎn)(服務(wù)器)采用了分卷(或分組)的組織方式。存儲(chǔ)系統(tǒng)由一個(gè)或多個(gè)卷組成,卷與卷之間的文件是相互獨(dú)立的,所有卷的文件容量累加就是整個(gè)存儲(chǔ)系統(tǒng)中的文件容量。一個(gè)卷可以由一臺(tái)或多臺(tái)存儲(chǔ)服務(wù)器組成,一個(gè)卷下的存儲(chǔ)服務(wù)器中的文件都是相同的,卷中的多臺(tái)存儲(chǔ)服務(wù)器起到了冗余備份和負(fù)載均衡的作用。
在卷中增加服務(wù)器時(shí),同步已有的文件由系統(tǒng)自動(dòng)完成,同步完成后,系統(tǒng)自動(dòng)將新增服務(wù)器切換到線上提供服務(wù)。
當(dāng)存儲(chǔ)空間不足或即將耗盡時(shí),可以動(dòng)態(tài)添加卷。只需要增加一臺(tái)或多臺(tái)服務(wù)器,并將它們配置為一個(gè)新的卷,這樣就擴(kuò)大了存儲(chǔ)系統(tǒng)的容量。
FastDFS中的文件標(biāo)識(shí)分為兩個(gè)部分:卷名和文件名,二者缺一不可。
FastDFS file upload
上傳文件交互過程:
1. client詢問tracker上傳到的storage,不需要附加參數(shù);
2. tracker返回一臺(tái)可用的storage;
3. client直接和storage通訊完成文件上傳。
FastDFS file download
下載文件交互過程:
1. client詢問tracker下載文件的storage,參數(shù)為文件標(biāo)識(shí)(卷名和文件名);
2. tracker返回一臺(tái)可用的storage;
3. client直接和storage通訊完成文件下載。
需要說明的是,client為使用FastDFS服務(wù)的調(diào)用方,client也應(yīng)該是一臺(tái)服務(wù)器,它對(duì)tracker和storage的調(diào)用均為服務(wù)器間的調(diào)用。
google code地址:http://code.google.com/p/fastdfs/
google code下載地址:http://code.google.com/p/fastdfs/downloads/list#p#
MogileFS一個(gè)開源的分布式文件系統(tǒng)
1.應(yīng)用層——沒有特殊的組件要求
2.無單點(diǎn)失敗——MogileFS啟動(dòng)的三個(gè)組件(存儲(chǔ)節(jié)點(diǎn)、跟蹤器、跟蹤用的數(shù)據(jù)庫),均可運(yùn)行在多個(gè) 機(jī)器上,因此沒有單點(diǎn)失敗。(你也可以將跟蹤器和存儲(chǔ)節(jié)點(diǎn)運(yùn)行在同一臺(tái)機(jī)器上,這樣你就沒有必要用4臺(tái)機(jī)器)推薦至少兩臺(tái)機(jī)器。
3.自動(dòng)的文件復(fù)制——文件是基于他們的“類”,文件可以自動(dòng)的在多個(gè)存儲(chǔ)節(jié)點(diǎn)上復(fù)制,這是為了盡量少的復(fù)制,才使用“類”的。加入你有的圖片站點(diǎn)有 三份JPEG圖片的拷貝,但實(shí)際只有1or2份拷貝,那么Mogile可以重新建立遺失的拷貝數(shù)。用這種辦法,MogileFS(不做RAID)可以節(jié)約 在磁盤,否則你將存儲(chǔ)同樣的拷貝多份,完全沒有必要。
4.“比RAID好多了”——在一個(gè)非存儲(chǔ)區(qū)域網(wǎng)絡(luò)的RAID(non-SAN RAID)的建立中,磁盤是冗余的,但主機(jī)不是,如果你整個(gè)機(jī)器壞了,那么文件也將不能訪問。 MogileFS在不同的機(jī)器之間進(jìn)行文件復(fù)制,因此文件始終是可用的。
5.傳輸中立,無特殊協(xié)議——MogileFS客戶端可以通過NFS或HTTP來和MogileFS的存儲(chǔ)節(jié)點(diǎn)來通信,但首先需要告知跟蹤器一下。
6.簡單的命名空間——文件通過一個(gè)給定的key來確定,是一個(gè)全局的命名空間。你可以自己生成多個(gè)命名空間,只要你愿意,但是這樣可能在同一MogileFS中,會(huì)造成沖突key。
7.不用共享任何東西——MogileFS不需要依靠昂貴的SAN來共享磁盤,每個(gè)機(jī)器只用維護(hù)好自己的磁盤。
8.不需要RAID——在MogileFS中的磁盤可以是做了RAID的也可以是沒有,如果是為了安全性著想的話RAID沒有必要買了,因?yàn)镸ogileFS已經(jīng)提供了。
9.不會(huì)碰到文件系統(tǒng)本身的不可知情況——在MogileFS中的存儲(chǔ)節(jié)點(diǎn)的磁盤可以被格式化成多種格(ext3,reiserFS等等)。MogilesFS會(huì)做自己內(nèi)部目錄的哈希,所以它不會(huì)碰到文件系統(tǒng)本身的一些限制,比如一個(gè)目錄中的最大文件數(shù)。你可以放心的使用。#p#
FastFDS和MogileFS的對(duì)比
FastDFS設(shè)計(jì)時(shí)借鑒了MogileFS的一些思路。FastDFS是一個(gè)完善的分布式文件存儲(chǔ)系統(tǒng),通過客戶端API對(duì)文件進(jìn)行讀寫??梢哉f,MogileFS的所有功能特性FastDFS都具備,MogileFS網(wǎng)址:http://www.danga.com/mogilefs/。
另外,相對(duì)于MogileFS,F(xiàn)astDFS具有如下特點(diǎn)和優(yōu)勢:
1. FastDFS完善程度較高,不需要二次開發(fā)即可直接使用;
2. 和MogileFS相比,F(xiàn)astDFS裁減了跟蹤用的數(shù)據(jù)庫,只有兩個(gè)角色:tracker和storage。FastDFS的架構(gòu)既簡化了系統(tǒng),同時(shí)也消除了性能瓶頸;
3. 在系統(tǒng)中增加任何角色的服務(wù)器都很容易:增加tracker服務(wù)器時(shí),只需要修改storage和client的配置文件(增加一行tracker配置);增加storage服務(wù)器時(shí),通常不需要修改任何配置文件,系統(tǒng)會(huì)自動(dòng)將該卷中已有文件復(fù)制到該服務(wù)器;
4. FastDFS比MogileFS更高效。表現(xiàn)在如下幾個(gè)方面:
1)參見上面的第2點(diǎn),F(xiàn)astDFS和MogileFS相比,沒有文件索引數(shù)據(jù)庫,F(xiàn)astDFS整體性能更高;
2)從采用的開發(fā)語言上看,F(xiàn)astDFS比MogileFS更底層、更高效。FastDFS用C語言編寫,代碼量不到2萬行,沒有依賴其他開源軟件或程序包,安裝和部署特別簡潔;而MogileFS用perl編寫;
3)FastDFS直接使用socket通信方式,相對(duì)于MogileFS的HTTP方式,效率更高。并且FastDFS使用sendfile傳輸文件,采用了內(nèi)存零拷貝,系統(tǒng)開銷更小,文件傳輸效率更高。
5. FastDFS有著詳細(xì)的設(shè)計(jì)和使用文檔,而MogileFS的文檔相對(duì)比較缺乏。
6. FastDFS的日志記錄非常詳細(xì),系統(tǒng)運(yùn)行時(shí)發(fā)生的任何錯(cuò)誤信息都會(huì)記錄到日志文件中,當(dāng)出現(xiàn)問題時(shí)方便管理員定位錯(cuò)誤所在。
7. FastDFS還對(duì)文件附加屬性(即meta data,如文件大小、圖片寬度、高度等)進(jìn)行存取,應(yīng)用不需要使用數(shù)據(jù)庫來存儲(chǔ)這些信息。
8. FastDFS從V1.14開始支持相同文件內(nèi)容只保存一份,這樣可以節(jié)省存儲(chǔ)空間,提高文件訪問性能。