1. 程式人生 > >分散式圖片伺服器FastDFS介紹

分散式圖片伺服器FastDFS介紹

FastDFS是什麼
FastDFS是一個開源的輕量級分散式檔案系統,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合中小檔案(建議範圍:4KB < file_size <500MB),對以檔案為載體的線上服務,如相簿網站、視訊網站等。
FastDFS架構
下面來看一張FastDFS的架構圖,如下圖所示。
這裡寫圖片描述
FastDFS架構包括Tracker server(追蹤伺服器)和Storage server(儲存伺服器)以及Client(客戶端)

1)Tracker cluster中各個tracker server相互獨立,不進行相互通訊。

2)Storage cluster中各個storage組(或者卷)(Storage1,Storage2,…)相互獨立,不進行相互通訊,也就是說各個組之間儲存的資料是不相同的。
但是各個組中的storage server之間是屬於互相備份的關係,也就是說同一個組的storage server之間儲存的檔案是完全相同的,做叢集時往往一個組會有多臺伺服器,上傳一個檔案到同組內的一臺機器上後,FastDFS會將該檔案即時同步到同組內的其它所有機器上,起到備份的作用。

3)每個storage server會啟動一個單獨的執行緒主動向Tracker cluster中每個tracker server報告其狀態資訊,包括磁碟使用情況,檔案同步情況及檔案上傳下載次數統計等資訊。

客戶端請求Tracker server進行檔案上傳、下載,通過Tracker server排程最終由Storage server完成檔案上傳和下載。Tracker server的作用是負載均衡和排程,通過Tracker server在檔案上傳時可以根據一些策略找到Storage server提供檔案上傳服務。Storage server作用是檔案儲存,客戶端上傳的檔案最終儲存在Storage伺服器上,Storage server直接利用OS的檔案系統呼叫管理檔案。

我們從上圖還能看到,Client端可以有多個,也就是同時支援多個客戶端對FastDFS叢集服務進行訪問,Tracker是跟蹤器,負責協調Client與Storage之間的互動,為了實現高可用性,需要用多個Tracker來作為跟蹤器。Storage是專門用來儲存東西的,而且是分組進行儲存的,每一組可以有多臺裝置,這幾臺裝置儲存的內容完全一致,這樣做也是為了高可用性,當現有分組容量不夠時,我們可以水平擴容,即增加分組來達到擴容的目的。另外需要注意的一點是,如果一組中的裝置容量大小不一致,比如裝置A容量是80G,裝置B的容量是100G,那麼這兩臺裝置所在的組的容量會以小的容量為準,也就是說,當儲存的東西大小超過80G時,我們將無法儲存到該組中了。Client端在與Storage進行互動的時候也與Tracker cluster進行互動,說的通俗點就是Storage向Tracker cluster進行彙報登記,告訴Tracker現在自己哪些位置還空閒,剩餘空間是多大。

檔案上傳的流程
現給出一張檔案上傳的時序圖,如下圖所示:
這裡寫圖片描述
1)Client通過Tracker server將檔案上傳到Storage server。

2)Tracker server向Client返回一臺可用的Storage server的IP地址和埠號。

3)Client直接通過Tracker server返回的IP地址和埠與其中一臺Storage server建立連線並進行檔案上傳。

4)上傳完成,Storage server返回Client一個檔案ID,檔案上傳結束。

從中可以看到,Client想上傳圖片,它先向Tracker進行詢問,Tracker檢視一下登記資訊之後,告訴Client哪個storage當前空閒,Tracker會把IP和埠號都返回給Client,Client在拿到IP和埠號之後,便不再需要通過Tracker,直接便向Storage進行上傳圖片,Storage在儲存圖片的同時,會向Tracker進行彙報,告訴Tracker它當前是否還留有剩餘空間,以及剩餘空間大小。彙報完之後,Storage將伺服器上儲存圖片的地址返回給Client,Client可以拿著這個地址進行訪問圖片。說得更加細緻一點,客戶端上傳檔案後儲存伺服器將檔案ID返回給客戶端,此檔案ID用於以後訪問該檔案的索引資訊。檔案索引資訊包括:組名,虛擬磁碟路徑,資料兩級目錄,檔名,如下所示:
這裡寫圖片描述

組名:檔案上傳後所在的storage組名稱,在檔案上傳成功後由storage伺服器返回,需要客戶端自行儲存。
虛擬磁碟路徑:storage配置的虛擬路徑,與磁碟選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
資料兩級目錄:storage伺服器在每個虛擬磁碟路徑下建立的兩級目錄,用於儲存資料檔案。
檔名:與檔案上傳時不同。是由儲存伺服器根據特定資訊生成,檔名包含:源儲存伺服器IP地址、檔案建立時間戳、檔案大小、隨機數和檔案拓展名等資訊。
檔案下載的流程
現給出一張檔案下載的時序圖,如下圖所示:
這裡寫圖片描述
檔案下載的步驟可以是:
1)Client通過Tracker server下載指定Storage組中某個Storage server上的某個檔案,引數為檔案標識(組名和檔名)。

2)Tracker server向Client返回一臺可用的Storage server的IP地址和埠號。

3)Client直接通過Tracker server返回的IP地址和埠與其中一臺Storage server建立連線並進行檔案下載。