天天看點

分布式檔案系統FastDFS的簡介

傳統的範式存儲檔案和第三方檔案存儲差別:

分布式檔案系統FastDFS的簡介
​FastDFS 是一個開源的高性能分布式檔案系統(DFS)。
FastDFS 為網際網路量身定制,充分考慮了備援備份、負載均衡、線性擴容等機制,并注重高可用、高性能等名額,使用 FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳、下載下傳等服務。主要解決了海量資料存儲問題,特别适合以中小檔案(建議範圍:4KB < file_size <500MB)為載體的線上服務。

FastDFS 架構包括 Tracker server 和 Storage server。用戶端請求 Tracker server 進行檔案上傳、下載下傳,通過 Tracker server 排程最終由 Storage server 完成檔案上傳和下載下傳。

1. Tracker server 作用是負載均衡和排程,通過 Tracker server 在檔案上傳時可以根據一些政策找到 Storage server 提供檔案上傳服務。可以将 tracker 稱為追蹤伺服器或排程伺服器。
2. Storage server 作用是檔案存儲,用戶端上傳的檔案最終存儲在 Storage 伺服器上,Storageserver 沒有實作自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以将storage稱為存儲伺服器。
           
分布式檔案系統FastDFS的簡介
服務端兩個角色:
Tracker:管理叢集,tracker 也可以實作叢集。每個 tracker 節點地位平等。收集 Storage 叢集的狀态。
Storage:實際儲存檔案   Storage 分為多個組,每個組之間儲存的檔案是不同的。每個組内部可以有多個成員,組成員内部儲存的内容是一樣的,組成員的地位是一緻的,沒有主從的概念。
           

檔案上傳和下載下傳的流程

檔案上傳

分布式檔案系統FastDFS的簡介
檔案上傳的過程:
1.Storage Server會定時向Tracker Server上傳狀态資訊.當Tracker Server Cluster中的Tracker Server不止一個時,各個Tracker之間的關系是對等的,是以用戶端上傳時可以選擇任意一個Tracker。
2-4.當用戶端上傳檔案時,發送請求到Tracker Server,Tracker Server會将該檔案配置設定一個Stacker的IP和端口(叢集)可以存儲檔案的group,将資訊傳回到用戶端
5-8. 當用戶端向Storage Server發送寫檔案請求時,Storage Server會生成一個file_id.将上傳的檔案寫入磁盤
9.最後将上面生成的檔案資訊當做檔案名存儲.
注: 每次上傳檔案後都會傳回一個位址,使用者需要自己儲存此位址。
​
用戶端上傳檔案後存儲伺服器将檔案 ID 傳回給用戶端,此檔案 ID 用于以後通路該檔案的索引資訊。檔案索引資訊包括:組名,虛拟磁盤路徑,資料兩級目錄,檔案名。
例:檔案索引:group1/M00/02/44/wKgDrE34E8wAAAjakljd1223.sh

* 組名:檔案上傳後所在的 storage 組名稱,在檔案上傳成功後有 storage 伺服器傳回,需要用戶端自行儲存。
* 虛拟磁盤路徑:storage 配置的虛拟路徑,與磁盤選項 store_path*對應。如果配置了store_path0 則是 M00,如果配置了store_path1 則是 M01,以此類推。
* 資料兩級目錄:storage 伺服器在每個虛拟磁盤路徑下建立的兩級目錄,用于存儲資料檔案。
* 檔案名:與檔案上傳時不同。是由存儲伺服器根據特定資訊生成,檔案名包含:源存儲伺服器 IP 位址、檔案建立時間戳、檔案大小、随機數和檔案拓展名等資訊。
           

檔案下載下傳

分布式檔案系統FastDFS的簡介
檔案下載下傳過程:
    當檔案上傳成功後,用戶端就會生成一個檔案位址(檔案名),當下載下傳的時候就會用到該檔案名來擷取.
    1. Storage Server會定時向Tracker Server上傳狀态資訊.
    2-4. 當用戶端向Tracker Server發送下載下傳請求時,Tracker Server就會查詢storage Server(檢測同步狀态),查詢一個Storage Server的IP和端口号來傳回給用戶端
    5.當用戶端需要下載下傳哪個檔案時,就會将自己本地的file_id(組名,路徑,檔案名)傳到Storage Server上,來進行查找檔案  (file_id是通過檔案上傳得到的儲存到本地的,下載下傳時是需要從本地擷取)
    6. 當Storage Server查找到該檔案時,傳回給用戶端file_content.
           

檔案合并

小檔案合并存儲主要解決的問題:
1. 本地檔案系統inode數量有限,存儲小檔案的數量受到限制
2. 多級目錄+目錄裡很多檔案,導緻通路檔案的開銷很大(可能導緻很多次IO)
3. 按小檔案存儲,備份和恢複效率低 
​
     FastDFS 提供合并存儲功能,預設建立的大檔案為 64MB,然後在該大檔案中存儲很多小檔案; 大檔案中容納一個小檔案的空間稱作一個 Slot,規定 Slot 最小值為 256 位元組,最大為 16MB,即小于 256 位元組的檔案也要占用 256 位元組,超過 16MB 的檔案獨立存儲;
    為了支援檔案合并機制,FastDFS生成的檔案file_id需要額外增加16個位元組;每個trunk file 由一個id唯一辨別,trunk file由group内的trunk server負責建立(trunk server是tracker 選出來的),并同步到group内其他的storage,檔案存儲合并存儲到trunk file後,根據其檔案偏移量就能從trunk file中讀取檔案.
           

繼續閱讀