FastDFS分散式檔案系統 -- 工作原理
FastDFS介紹
FastDFS分散式檔案管理系統,是用 c 語言編寫的一款開源的分散式檔案系統。FastDFS 為網際網路量身定製, 充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用 FastDFS 很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。
FastDFS組成及其作用
FastDFS是一個開源的輕量級分散式檔案系統,由跟蹤伺服器(tracker server)、儲存伺服器(storage server)和客戶端(client)三個部分組成,主要解決了海量資料儲存問題,特別適合以中小檔案(建議範圍:4KB < file_size <500MB)為載體的線上服務。
Tracker server:
- 作用是負載均衡和排程,通過 Tracker server 在檔案上傳時可以根據一些 策略找到 Storage server
提供檔案上傳服務。可以將 tracker 稱為追蹤伺服器或排程伺服器。 - 管理叢集,tracker 也可以實現叢集。每個 tracker 節點地位平等。收集 Storage 叢集的狀態。
Storage server:
-
作用是檔案儲存,客戶端上傳的檔案最終儲存在 Storage 伺服器上, Storageserver
沒有實現自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以將 storage 稱為儲存伺服器; -
實際是用來儲存檔案, Storage 分為多個組,每個組之間儲存的檔案是不同的。每個組內部可以有多個成員,組成員內部儲存的內容是一樣的,組成員的地位是一致的,沒有 主從的概念。
工作原理/流程
上傳互動流程:
- Tracker會定期詢問storage的狀態,是否還有儲存空間,是否down機,是否還在執行;
- clinet上傳連線請求;
- Tracker查詢可用的storage;
- Tracker將可用storage的ip和埠返回給client;
- 客戶端將檔案的內容和檔案的屬性(file content, metadata)上傳到storage中;
- storage根據client上傳的檔案生成file_id;
- storage將上傳的內容儲存到本地;
- storage將file_id返回給client;
- 客戶端將file_id儲存在本地
file_id:
此檔案 ID 用於以後訪問該文 件的索引資訊。檔案索引資訊包括:
組名,虛擬磁碟路徑,資料兩級目錄,檔名
-
組名:檔案上傳後所在的 storage 組名稱,在檔案上傳成功後有 storage 伺服器返回, 需要客戶端自行儲存。
-
虛擬磁碟路徑:storage 配置的虛擬路徑,與磁碟選項 store_path*對應。如果配置了 store_path0 則是 M00,如果配置了 store_path1 則是 M01,以此類推。
-
資料兩級目錄:storage 伺服器在每個虛擬磁碟路徑下建立的兩級目錄,用於儲存資料 檔案。
-
檔名:與檔案上傳時不同。是由儲存伺服器根據特定資訊生成,檔名包含: 源儲存 伺服器 IP地址、檔案建立時間戳、檔案大小、隨機數和檔案拓展名等資訊。
下載互動流程:
- client詢問tracker下載檔案的storage,引數為檔案標識(卷名和檔名);
- tracker返回一臺可用的storage;
- client直接和storage通訊完成檔案下載。
在pycharm中,通過客戶端上傳圖片到FastDFS,並通過nginx來進行訪問獲取圖片的demo :