fastdfs 服務端有兩個角色:tracker 與 storage,其中 tracker 主要做排程工作,有著負載均衡作用,storage 負責檔案訪問、同步等操作。
fastdfs 系統結構:
客戶端訪問 fastdfs 分布式儲存,一般為後端應用。
2.2、tracker
tracker 在 fastdfs 集群中有兩大作用:
client 訪問 storage 服務之前,必須先訪問 tracker,動態獲取到 storage 服務的連線資訊,有著負載均衡的作用。
2.3、storage
storage 是資料儲存伺服器,檔案和 meta data 都儲存在 storage 伺服器中。 有以下特點:
檔案上傳的原理如下圖:
client 詢問 tracker 可以上傳到哪個 storage。
tracker 返回一台可用的 storage 連線資訊。
client 直接與 storage 通訊,完成檔案上傳。
storage 儲存檔案以後,返回 client 檔案標識(組名、檔名)。
client 詢問 tracker 下文檔案的 storage,引數為檔案標識(組名、檔名)。
tracker 返回一台可用的 storage。
6.1、trackerserver
$
|__data
| |__storage_groups.dat:儲存分組資訊
| |__storage_servers.dat:儲存伺服器列表
|__logs
|__trackerd.log:tracker server日誌檔案
6.2、storageserver$
|__data
| |__.data_init_flag:當前storage server 初始化資訊
| |__storage_stat.dat:當前storage server統計資訊
| | |__binlog.index:當前的binlog檔案索引號
| | |__binlog.###:存放更新操作記錄(日誌)
| | |__$_$.mark:存放同步的完成情況
| |
| |__一級目錄:256個存放資料檔案的目錄,如:00, 1f
| |__二級目錄:256個存放資料檔案的目錄
|__logs
|__storaged.log:storage server日誌檔案
7.1、 通訊協議介紹
fastdfs 服務端與客戶端通訊時候採用的是自定義的通訊協議,如下圖所示:
協議包由兩部分組成:header 和 body
body 資料報格式取決於具體的命令,body 可以為空。
7.2、命令**和通訊狀態**
7.2.1、tracker 管理命令**
名稱命令
刪除 storage
93102
獲取更新節點 query_update
103不按組獲取儲存節點
101按組獲取儲存節點
104獲取組列表
91獲取儲存節點列表92
7.2.2、 store 檔案上傳命令**
名稱命令
說明檔案上傳
11一般的檔案上傳,上傳後為主檔案
上傳附屬檔案
21「上傳從檔案檔案,比如主檔案為 ***.jpg,從檔案(縮圖)為 ***-150_150.jpg」
刪除檔案
12刪除檔案
設定檔案元資料
13上傳檔案建立日期,標籤等
14獲取檔案元資料
15查詢檔案資訊
22查詢檔案資訊
建立支援斷點續傳的檔案
23建立乙個支援斷點續傳的檔案
斷點續傳
24上傳可斷點上傳的檔案,如將大檔案切為幾份,分開上傳
檔案修改
34修改支援斷點上傳的檔案
清除檔案
36擷取(清除)支援斷點上傳的檔案
7.2.3、報文通訊狀態**
名稱**
客戶端關閉連線命令
82連線狀態檢查命令
111服務端正確返回報文
100這個庫從 17 年 6 月 5 號之後就停止更新了,最近又開始更新**了,看樣子要維護了啊。
簡單的對客戶端進行了連線池的封裝,方便使用。
clawhub/fastdfs-pool
以下為核心**:
1.1、 初始化連線池
/**
* build fast dfs conn pool.
** @return the fast dfs conn pool
*/public fastdfsconnpool build() catch (ioexception | myexception e)
// 往執行緒池中新增預設大小的執行緒
trackerserver trackerserver;
for (int i = 0; i < minpoolsize; i )
}// 註冊心跳
new heartbeat(this).beat();
return this;
}
1.2、 客戶端執行請求/**
* 執行方式
** @param the type parameter
* @param invoke the invoke
* @return the t
*/public t processfdfs(callbackinvoke) catch (exception e)
}
1.3、 心跳/**
* 心跳任務
*/private class heartbeattask implements runnable else
} catch (exception e) }}
}
1.4、 使用方式//初始化連線池
fastdfsconnpool fastdfsconnpool = new fastdfsconnpool()
.conffilename("./config/fdfs_client.conf")
.maxpoolsize(8)
.minpoolsize(1)
.reconnnum(2)
.waittimes(2).build();
//使用客戶端
fastdfsclient client = new fastdfsclient(fastdfsconnpool);
//上傳 ilename 檔案全路徑 extname 副檔名,不包含(.) metas 檔案擴充套件資訊
string parts = client.processfdfs(storageclient -> storageclient.upload_file1("filename", "extname", new namevaluepair[0]));
byte bytes = client.processfdfs(storageclient -> storageclient.download_file1("fileid"));
//刪除 -1失敗,0成功
int result = client.processfdfs(storageclient -> storageclient.delete_file1("fileid"));
//獲取遠端伺服器檔案資源資訊 groupname 檔案組名 如:group1 remotefilename m00/00/00/wkgrsvjtwpsaxgwkaaaweeazrjw471.jpg
fileinfo fileinfo = client.processfdfs(storageclient -> storageclient.get_file_info("groupname", "remotefilename"));
fastdfs v5.12 分布式檔案系統介紹
tobato/fastdfs_client 的 wiki
分布式檔案儲存 FastDFS
7 fastdfs 和其他檔案儲存的簡單對比 寫操作 客戶端先是訪問tracker伺服器,由tracker伺服器幫我們尋找要寫入的卷 volume 一對主從備份為乙個卷,裡面可以有多台伺服器 然後返回可操作的storage server,這時客戶端訪問返回的storage server 進行寫操作 ...
FastDFS分布式檔案儲存
儲存能力是提供給上層業務系統以實現檔案訪問服務,這個儲存能力為xdfs,即可擴充套件的分布式檔案系統,實現的原理是封裝了第三方的分布式儲存系統實現的。目前封裝的第三方分布式系統包括fastdfs hadoop的hdfs,所提供的儲存介面如下 1 檔案上傳 2 檔案斷點上傳 5 檔案刪除 6 獲取檔案...
FastDFS分布式檔案儲存系統
負載均衡和排程,通過tracker server 在文上傳的時候可以根據一些策略找到storage server提供檔案上傳服務,可以將tracker 稱為追蹤伺服器或排程伺服器 檔案儲存,客戶端上傳的檔案最終儲存在storage 伺服器,storage server沒有實現自己的檔案系統而是利用作...