輕量級分散式檔案系統fastDFS

LinvingCode發表於2016-12-11

FastDFS主要解決了大容量的檔案(主要是圖片、視訊、音訊等小檔案 512M以內最好)儲存和高併發訪問的問題,並在檔案存取時實現了負載均衡。

FastDFS的結構比較簡單,主要由Client、Tracker server和Storage server三部分組成。Client通過Tracker server得到Storage server的資訊,然後直接與Storage server通訊訪問檔案,避免了Tracker server成為瓶頸。容易構建叢集和解決高併發,高可用問題。

Tracker server

Tracker server類似於GFS中的Master或TFS中的Name server,但與他們很不同的一點是,Tracker server的主要作用是負載均衡和排程,而不負責檔案索引和對映。Tracker server在記憶體中記錄分組和Storage server的狀態等資訊,不記錄檔案索引資訊,其佔用的記憶體量也很少。Tracker server可以只有一個,也可以有多個組成Tracker cluster,這樣的好處是可以提高對使用者的響應能力和增加容災性,此時各Tracker server相互對等,冗餘備份,由應用端來輪流選擇進行訪問。

Storage server

Storage server完成檔案管理的所有功能:儲存、同步和提供存取介面,檔案和metadata都儲存在其上。Storage server類似於GFS中的Chunk server或TFS中的Data server,通常一個Storage server即一臺機器,Storage server可以動態新增和刪除。FastDFS的儲存部分即Storage cluster,分為多個Volume,每個Volume中包括多個Storage server。同一Volume內的各Storage server之間是對等的,儲存的內容相同,起冗餘容錯的作用。檔案上傳、下載、刪除等操作可在Volume內任意一臺 Storage server上進行。一個Volume的儲存容量取決於該Volume內最小的Storage server的容量,因此Volume內各Storage server的軟硬體配置最好是一致的。採用這種分Volume的儲存方式的好處是靈活、可控性較強。比如上傳檔案時,可以由客戶端直接指定上傳到哪個Volume。當某個Volume的訪問壓力較大時,可以在該Volume內增加Storage server來擴充服務能力(縱向擴容)。當系統總容量不足時,可以增加Volume來擴充儲存容量(橫向擴容)。

Storage server直接利用OS的檔案系統儲存檔案。FastDFS不會對檔案進行分塊儲存,客戶端上傳的檔案和Storage server上的檔案一一對應。

關於Storage server的同步,不同Volume的Storage server之間不會相互通訊,同Volume內的Storage server之間會相互連線進行檔案同步。檔案同步採用push方式,接受更新操作的檔案稱為原始檔,其所在server稱為源伺服器,其它檔案稱為備份檔案,其它server稱為目標伺服器。當檔案更新操作發生時,源伺服器向目標伺服器發起同步,對所有備份檔案進行更新。當有新Storage server加入本Volume時,由已有的一臺 Storage server將其上的所有檔案同步給該新增伺服器。具體的同步實現在Storage server中由專門執行緒根據binlog進行,binlog記錄了檔案上傳、刪除等更新操作。為了最大程度地避免相互影響以及出於系統簡潔性考慮,Storage server對同Volume內除自己以外的每臺伺服器都會啟動一個執行緒來負責檔案同步。

這種非同步的同步方式帶來了一致性問題,當原始檔尚未來得及將所有備份檔案同步更新時,訪問這些備份檔案將引發錯誤。檔案的訪問主要分為更新和下載兩種情況:FastDFS規定更新操作只能對原始檔進行,從而避免了同時對不同的備份檔案進行更新導致的衝突;檔案下載時,Tracker server記錄了各Storage server中各檔案的同步情況,會向Client提供同步後的檔案所在的Storage server。

FastDFS 叢集構建:
http://www.2cto.com/kf/201611/560911.html

相關文章