FASTDFS開源分散式檔案系統介紹

jaymarco發表於2023-04-28

一、     前言

最近有一個專案有用到fastdfs分散式檔案系統,主要是用它來解決系統的影片和圖片等檔案的上傳和下載效能問題,後來我們對fastdfs應用級的開源分散式檔案系統做了一些研究。本次我會給大家詳細介紹一下這款開源分散式檔案系統相關技術原理,下次會著重介紹如何去搭建一套fastdfs分散式檔案系統叢集環境。

二、    簡介

FastDFS 的開發者是淘寶的架構師餘慶所開發,為我們提供了Nginx上使用的FastDFS模組(也可以叫FastDFS的Nginx模組) 。該專案共享到了github上面。可以自行下載下來玩。 專案地址:  

FastDFS 是一個輕量級的開源分散式檔案系統,主要解決了大容量的檔案儲存和高併發訪問的問題,檔案存取時實現了負載均衡。支援儲存伺服器線上擴容,支援相同的檔案只儲存一份,節約磁碟。 

   FastDFS 只能透過Client API訪問,不支援POSIX訪問方式。 

   FastDFS 適合中大型網站使用,用來儲存資原始檔(如:圖片、文件、影片等)

FastDFS 為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用FastDFS很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。

三、    FastDFS 系統架構圖

                                             

FastDFS 服務端有三個角色:跟蹤伺服器(tracker server)、儲存伺服器(storage server)和客戶端(client)。

·          tracker server :跟蹤伺服器,主要做排程工作,起負載均衡的作用。在記憶體中記錄叢集中所有儲存組和儲存伺服器的狀態資訊,是客戶端和資料伺服器互動的樞紐。相比GFS中的master更為精簡,不記錄檔案索引資訊,佔用的記憶體量很少。

·          storage server :儲存伺服器(又稱:儲存節點或資料伺服器),檔案和檔案屬性(meta data)都儲存到儲存伺服器上。Storage server直接利用OS的檔案系統呼叫管理檔案。

·          client :客戶端,作為業務請求的發起方,透過專有介面,使用TCP/IP協議與跟蹤器伺服器或儲存節點進行資料互動。

四、    FastDFS 原理

跟蹤器和儲存節點都可以由一臺多臺伺服器構成。跟蹤器和儲存節點中的伺服器均可以隨時增加或下線而不會影響線上服務。其中跟蹤器中的所有伺服器都是對等的,可以根據伺服器的壓力情況隨時增加或減少。

為了支援大容量,儲存節點(伺服器)採用了分卷(或分組)的組織方式。儲存系統由一個或多個卷組成,卷與卷之間的檔案是相互獨立的,所有卷的檔案容量累加就是整個儲存系統中的檔案容量。一個卷可以由一臺或多臺儲存伺服器組成,一個卷下的儲存伺服器中的檔案都是相同的,卷中的多臺儲存伺服器起到了冗餘備份和負載均衡的作用。

在卷中增加伺服器時,同步已有的檔案由系統自動完成,同步完成後,系統自動將新增伺服器切換到線上提供服務。當儲存空間不足或即將耗盡時,可以動態新增捲。只需要增加一臺或多臺伺服器,並將它們配置為一個新的卷,這樣就擴大了儲存系統的容量。

FastDFS 中的檔案標識分為兩個部分:卷名和檔名,二者缺一不可。

FastDFS 只有兩個角色:Tracker server和Storage server。Tracker server作為中心結點,其主要作用是負載均衡和排程。Tracker server在記憶體中記錄分組和Storage server的狀態等資訊,不記錄檔案索引資訊,佔用的記憶體量很少。另外,客戶端(應用)和Storage server訪問Tracker server時,Tracker server掃描記憶體中的分組和Storage server資訊,然後給出應答。由此可以看出Tracker server非常輕量化,不會成為系統瓶頸。 五、    檔案上傳和下載的互動過程

上傳機制                                              

上傳流程: 客戶端(client)詢問Tracker server上傳到的Storage server

1.client->Tracker server( 返回一臺可用的Storage server,返回的資料為該Storage server的IP地址和埠)

2.client 直接與返回的Storage server建立連線->檔案上傳成功後->Storage server會返回新生成的檔案ID->結束

 

下載機制:

下載流程: 客戶端(client)詢問Tracker server下載Storage server上面檔案

1. client 詢問Tracker server可以下載指定檔案的Storage server,引數為檔案ID(包含 名和檔名);

2. Tracker server 返回一臺可用的Storage server;

3. client 直接和該Storage server建立連線,完成檔案下載。

需要說明的是,client為使用FastDFS服務的呼叫方,client也應該是一臺伺服器,它對tracker和storage的呼叫均為伺服器間的呼叫。

五、    FastDFS 與集中儲存方式對比

fastdfs 與集中式儲存的對比透過這兩個指標顯示體現出它的優勢,FastDFS分散式檔案系統解決了集中式儲存無法線上擴容的問題,由於集中式儲存的熱備帶來高昂費用,而使用fastdfs大降低了成本。而fastdfs的高併發也要比集中式儲存效能強很多。

六、    總結

1 、高可靠性,無單點故障;

2 、高吞吐量,只要 Group 足夠多,資料流量是足夠分散的;

3 檔案上傳和刪除等操作,使用FastDFS client API,目前提供了C、PHP extension和Java的client API

4 、檔案下載採用HTTP方式,使用nginx或者apache擴充套件模組,不推薦使用FastDFS內建的web server

5 、磁碟不需要RAID,直接掛載單盤,每個硬碟作為一個mount point,提升磁碟整體IO吞吐量

6 跟蹤伺服器 的效能非常高,一個較大的叢集(比如上百個group)中有3個節點就能滿足生產需求。

7 、比較遺憾的是它沒有python的介面

8 、上傳的檔案不會分塊儲存,它和OS系統中的檔案是一一對應

9 、支援線上擴容,支援主從檔案


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2723374/,如需轉載,請註明出處,否則將追究法律責任。

相關文章