相關網站
- 軟體包位址:
https://sourceforge.net/projects/fastdfs/files/
- 源碼包位址:
https://github.com/happyfish100/fastdfs
簡介
- 輕量級的開源分布式檔案系統
- 主要解決大容量的檔案存儲和高并發通路的問題,檔案存取時實作了負載均衡
- 實作軟體方式的RAID,可以使用廉價的IDE硬碟進行存儲
- 支援存儲伺服器線上擴容
- 支援相同内容的檔案隻儲存一份,節約磁盤空間
- 隻能通過Client API通路,不支援POSIX通路方式
- 特别适合大中型網站使用,用來存儲資源檔案(如:圖檔、文檔、音頻、視訊等等)
- 開發語言C
架構圖
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csQTVU90dVpmYs5kMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2YDN1ETOwcTM0AzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
相關術語
- Tracker Server:跟蹤伺服器,主要做排程工作,在通路上起負載均衡的作用。記錄storage server的狀态,是連接配接Client和Storage server的樞紐。
- Storage Server:存儲伺服器,檔案和meta data都儲存到存儲伺服器上
- group:組,也可稱為卷。同組内伺服器上的檔案是完全相同的
- 檔案辨別:包括兩部分:組名和檔案名(包含路徑)
- meta data:檔案相關屬性,鍵值對(Key Value Pair)方式,如:width=1024,heigth=768
同步機制
- 同一組内的storage server之間是對等的,檔案上傳、删除等操作可以在任意一台storage server上進行
- 檔案同步隻在同組内的storage server之間進行,采用push方式,即源伺服器同步給目标伺服器
- 源頭資料才需要同步,備份資料不需要再次同步,否則就構成環路
- 上述第二條規則有個例外,就是新增加一台storage server時,由已有的一台storage server将已有的所有資料(包括源頭資料和備份資料)同步給該新增伺服器
通信協定
- 協定包由兩部分組成:header和body
-
header共10位元組,格式如下:
8 bytes body length
1 byte command
1 byte status
- body資料包格式由取決于具體的指令,body可以為空
流程圖
- 上傳檔案流程圖
FastDFS-00介紹 1. client詢問tracker上傳到的storage,不需要附加參數
2. tracker傳回一台可用的storage
3. client直接和storage通訊完成檔案上傳
- 下載下傳檔案流程圖
FastDFS-00介紹 1. client詢問tracker下載下傳檔案的storage,參數為檔案辨別(組名和檔案名)
2. tracker傳回一台可用的storage
3. client直接和storage通訊完成檔案下載下傳
運作目錄結構
- tracker server
${base_path} |__data | |__storage_groups.dat:存儲分組資訊 | |__storage_servers.dat:存儲伺服器清單 |__logs |__trackerd.log:tracker server日志檔案
- storage server
${base_path} |__data | |__.data_init_flag:目前storage server初始化資訊 | |__storage_stat.dat:目前storage server統計資訊 | |__sync:存放資料同步相關檔案 | | |__binlog.index:目前的binlog檔案索引号 | | |__binlog.###:存放更新操作記錄(日志) | | |__${ip_addr}_${port}.mark:存放同步的完成情況 | | | |__一級目錄:256個存放資料檔案的目錄,如:00, 1F | |__二級目錄:256個存放資料檔案的目錄 |__logs |__storaged.log:storage server日志檔案