FastDFS分布式文件系統架構學習
1. FastDFS簡介
FastDFS是一個開源的輕量級分布式文件系統,由淘寶資深架構師余慶設計并開發。它專為互聯網應用量身定制,特別適合以中小文件(如圖片、文檔、音視頻等)為載體的在線服務。FastDFS不支持POSIX文件訪問語義,只能通過專有API訪問,無需支持文件隨機修改等復雜功能,因此可以大幅簡化設計,提高系統的性能和擴展性。
2. 系統架構
FastDFS采用了C/S架構,由兩個主要角色組成:
2.1 Tracker Server(跟蹤服務器)
- 功能: 負責調度和負載均衡
- 特點:
- 作為集群訪問入口,不存儲文件
- 提供集群狀態管理
- 執行存儲策略選擇
- 可水平擴展部署多個節點形成集群
2.2 Storage Server(存儲服務器)
- 功能: 實際存儲文件
- 特點:
- 按Group(組)管理,同組內服務器互為備份
- 組內文件同步,保證數據一致性
- 可水平擴展,支持海量存儲
2.3 架構圖
+------------------+ +------------------+
| Client | | Tracker Server |
| (上傳/下載應用) | <-> | (調度和負載均衡) |
+------------------+ +------------------+|| 調度v
+--------------------------------------------------+
| Storage集群 |
| +----------------+ +----------------+ |
| | Storage Group1 | <----> | Storage Group2 | |
| | (存儲服務器組) | | (存儲服務器組) | |
| +----------------+ +----------------+ |
+--------------------------------------------------+
3. 工作流程
3.1 文件上傳流程
- 客戶端連接Tracker服務器,請求上傳文件
- Tracker根據負載均衡策略選擇一個Storage服務器
- 客戶端連接選定的Storage服務器并上傳文件
- Storage服務器生成文件ID并返回給客戶端
- 如果同組內有多個Storage,則自動進行文件同步復制
3.2 文件下載流程
- 客戶端帶著文件ID請求Tracker服務器獲取可用的Storage
- Tracker返回可用的Storage服務器IP列表
- 客戶端選擇一個Storage服務器進行連接
- 客戶端發送文件ID給Storage服務器
- Storage服務器根據文件ID查找并返回文件內容
4. 存儲策略
FastDFS采用了兩種存儲策略:
4.1 組內存儲
- 同一個文件組內的Storage服務器互為備份,文件會在組內自動同步
- 組內服務器存儲相同的文件,提高了可用性
4.2 分組存儲
- 不同組的Storage服務器存儲不同的文件
- 通過增加組數量可以線性擴展系統的存儲容量
5. 文件標識
FastDFS對每個文件生成一個文件ID,格式為:
group_name/filename
例如:group1/M00/00/00/wKgBaFYrGb-AfL48AAATIDVoHqQ788.jpg
這里:
group1
: 文件所在的Storage組名M00
: Storage服務器ID00/00
: 存儲路徑wKgBaFYrGb-AfL48AAATIDVoHqQ788.jpg
: 文件名(含時間戳等信息)
6. FastDFS的優勢
- 高可用性: 通過文件冗余實現高可用
- 高性能: 支持高并發訪問
- 易擴展: 可以通過增加Storage節點線性擴展存儲容量
- 負載均衡: Tracker服務器自動進行負載均衡
- 高效率: 專為處理小文件而設計的高效率文件系統
7. 應用場景
- 圖片服務器: 電商、社交媒體的圖片存儲
- 視頻存儲: 短視頻平臺、在線教育的視頻存儲
- 文檔管理系統: 企業文檔的集中存儲和管理
- 大數據存儲: 分布式應用的數據存儲
8 安裝FastDFS
git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs
./make.sh
./make.sh install
8配置Tracker服務器
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
# 編輯tracker.conf配置文件,設置base_path等參數
# 啟動tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
8 配置Storage服務器
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
# 編輯storage.conf配置文件,設置base_path、store_path等參數
# 啟動storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
10. 結合Nginx使用
為了提高FastDFS的訪問性能,通常會結合Nginx使用:
- 安裝fastdfs-nginx-module
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
# 配置Nginx時添加此模塊
- 配置nginx.conf
location /group1/M00 {root /fastdfs/storage/data;ngx_fastdfs_module;
}2025-5-18學習記錄