MogileFS與FastDFS的見解

MogileFS與FastDFS的個人見解

MogileFS & FastDFS 爲兩個開源分佈式文件系統,都主要適用於互聯網文件共享,上傳,下載等功能,主要用於多上傳和下載,不經常修改的操作。M和F部署架構都比較類似,設計中都避免的cluster中某一個環節的單點問題。

 MogileFS

————————-
官網https://code.google.com/p/mogilefs/
基本架構:TrackerServer(Tracker + DataBase) + StorageServer

[ Mogilefs的組成部分 ]

1. 數據庫(MySQL)部分
你可以用mogdbsetup程序來初始化數據庫。數據庫保存了Mogilefs的所有元數據,你可以單獨拿數據庫服務器來做,也可以跟其他程序跑在一起,數據庫 部分非常重要,類似郵件系統的認證中心那麼重要,如果這兒掛了,那麼整個Mogilefs將處於不可用狀態。因此最好是HA結構。

2. storageServer(存儲節點)
mogstored 程序的啓動將使本機成爲一個存儲節點。啓動時默認去讀/etc/mogilefs/mogstored.conf ,具體配置可以參考配置部分。mogstored啓動後,便可以通過mogadm增加這臺機器到cluster中。一臺機器可以只運行一個mogstored作爲存儲節點即可,也可以同時運行其他程序。

3. trackersServer(跟蹤器)
mogilefsd即 trackers程序,類似mogilefs的wiki上介紹的,trackers做了很多工作,Replication ,Deletion,Query,Reaper,Monitor等等。mogadm,mogtool的所有操作都要跟trackers打交 道,Client的一些操作也需要定義好trackers,因此最好同時運行多個trackers來做負載均衡。trackers也可以只運行在一臺機器 上,也可以跟其他程序運行在一起,只要你配置好他的配置文件即可,默認在/etc/mogilefs/mogilefsd.conf。

4. 工具
主要就是mogadm,mogtool這兩個工具了,用來在命令行下控制整個mogilefs系統以及查看狀態等等。
如果使用其他語言調用接口,需要二次開發。

5. Client
Client實際上是一個Perl的pm,可以寫程序調用該pm來使用mogilefs系統,對整個系統進行讀寫操作。

[ 邏輯原理 ]

每次文件的上傳和讀取,都經過前端TrackerServer服務器,trackerServer服務器受到client端的請求,查詢數據庫,返回一個上傳或者是讀取的可用的後端StorageServer的地址,然後由client端直接操作後端StorageServer服務器。upload操作返回就是成功或者失敗的結果,read操作就是返回對應的查詢數據。

====================================

FastDFS

————————-
官網:https://code.google.com/p/fastdfs/
基本架構:TrackerServer + StorageServer

[ FastDFS的組成部分 ] 

1. Storage server
在其他文件系統中通常稱作Trunk server或Data server。Storage server直接利用OS的文件系統存儲文件。FastDFS不會對文件進行分塊存儲,客戶端上傳的文件和Storage server上的文件一一對應。

2. TrackerServer
Tracker server作爲中心結點,其主要作用是負載均衡和調度。Tracker server在內存中記錄分組和Storage server的狀態等信息,不記錄文件索引信息,佔用的內存量很少。另外,客戶端(應用)和Storage server訪問Tracker server時,Tracker server掃描內存中的分組和Storage server信息,然後給出應答。

[ 邏輯原理 ]

StorageServer作爲主動方,在服務起來之後,會定時(時間可以配置)向他對應的tracker發佈自己的狀態和相關信息。TrackerServer服務只是會記錄相對於的group對應的服務器IP,以便在read的時候直接 返回服務器IP。TrackerServer裏面存儲着每一個group的server列表,server列表裏面的storage服務器都是實時相互備份操作。

在單個tracker,多個storage的架構的環境中,首先是upload操作:
client端將upload的請求直接發送給tracker服務器,tracker收到之後,會根據自己的一套定義的規則(可以配置),將回復可以上傳的storage服務器IP,client將文件upload至storage服務器,完成操作。
read操作:
client端發送需要get的URL地址,tracker根據URL中的group來劃分屬於哪些storage服務器,然後返回可以訪問的服務器IP地址。
client直接訪問指定storage服務器,此storage服務器已經部署Nginx類似的HTTP服務,並加載fastdfs的模塊,需提前進行域名跳轉的設定,完成文件的讀取。

關於多tracker和多storage的系統架構設計
根據fastdfs的架構描述,tracker和storage都是可以橫向無限延伸,現還未有一個比較標準的一個tracker和storage配對的模式,只是說個人建議在一個group中,storage儘量保證在2-3臺存儲服務器,配對的tracker保持2臺即可。
對於一個cluster的模式,大概可以這樣去設計系統架構:
2臺Nginx最前端的服務器,用於client端的read請求,主要作用是用來做負載均衡服務,熱備操作,最好在nginx的config配置裏面加入location設置,根據groupname直接跳轉到對應的storage服務器。
2臺tracker服務器,用於write操作的分發,也可以做熱備操作,後端的storage服務器配置中tracker設置需要將2臺服務器都綁定上去。
N臺storage服務器,一個group配備2-3臺服務器,可以根據數據量的大小,從小的規模做起,如有新的擴容,直接新增新的group和storage服務器即可,這樣只需修改前端那nginx服務配置,其他都不用調整。

====================================

MogileFS VS FastDFS

[ 類似點 ]

1. 架構都比較雷同,都具備tracker和storage兩個部分的cluster架構,可以都很方便進行橫向擴張。
2. 對於storageServer方面一旦有某機器宕機,硬盤損壞情況,都能自動完成修復功能。
3. 架構設計都無單點失敗問題,cluster中服務器都無需採用raid服務,避免出現類似hadoop設計的cluster中前端mapreduce宕機,整個系統失效的問題
4. 文件存儲都不能對大文件拆分(hadoop可以實現),所以如果單個文件超過一臺存儲物理機的存儲空間,就不能使用此係統存儲
5. 文件系統的存儲格式都不是原文存儲,就算你登陸到文件服務器也無法獲取到系統中的數據,必須經過一定的接口才能獲取

[ 不同點 ]

1. FastDFS完善程度較高,不需要二次開發即可直接使用;
2. 和MogileFS相比,FastDFS裁減了跟蹤用的數據庫,只有兩個角色:tracker和storage。FastDFS的架構既簡化了系統,同時也消除了性能瓶頸;
3. 在系統中增加任何角色的服務器都很容易:增加tracker服務器時,只需要修改storage和client的配置文件(增加一行tracker配置);增加storage服務器時,通常不需要修改任何配置文件,系統會自動將該卷中已有文件複製到該服務器;
4. FastDFS比MogileFS更高效。表現在如下幾個方面:
1)參見上面的第2點,FastDFS和MogileFS相比,沒有文件索引數據庫,FastDFS整體性能更高;
2)從採用的開發語言上看,FastDFS比MogileFS更底層、更高效。FastDFS用C語言編寫,代碼量不到2萬行,沒有依賴其他開源軟件或程序包,安裝和部署特別簡潔;而MogileFS用perl編寫;
3)FastDFS直接使用socket通信方式,相對於MogileFS的HTTP方式,效率更高。並且FastDFS使用sendfile傳輸文件,採用了內存零拷貝,系統開銷更小,文件傳輸效率更高。
5. FastDFS有着詳細的設計和使用文檔,而MogileFS的文檔相對比較缺乏。
6. FastDFS的日誌記錄非常詳細,系統運行時發生的任何錯誤信息都會記錄到日誌文件中,當出現問題時方便管理員定位錯誤所在。
7. FastDFS還對文件附加屬性(即meta data,如文件大小、圖片寬度、高度等)進行存取,應用不需要使用數據庫來存儲這些信息。

附錄01

mogadm class listdomain               class                mindevcount   replpolicy
——————– ——————– ————- ————
toast                byhost                    2        MultipleHosts()
toast                default                   2        MultipleHosts()
toast                four                      4        MultipleHosts()
toast                fourbynamenet             1        HostsPerNetwork(near=2,far=1)
mogadm class add toast twoontwonets –replpolicy “HostsPerNetwork(near=2,far=2)”
mogadm class modify toast twoontwonets –replpolicy “HostsPerNetwork(near=3,far=3)”



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章