FastDFS文件上傳原理

FastDFS文件上傳原理


文件上傳原理

文件上傳的原理如下圖所示

在這裏插入圖片描述

  1. client詢問tracker可以上傳到哪一個storage,或者指定獲取某個組的storage
  2. tracker返回一臺可用的storage
  3. client直接和storage通訊完成文件上傳
  4. storage保存文件以後給client返回組名(volume)和文件名稱

文件上傳服務端內部處理的詳細機制如下:

選擇tracker

當集羣中有多個tracker時,由於tracker之間是完全對等的關係,因此客戶端在upload文件時可以任意選擇一個trakcer

選擇group

當客戶端沒有指定group時,由服務端tracker自動指定。當tracker接收到upload file的請求時,會爲該文件分配一個可以存儲該文件的group,支持如下選擇group的規則:

  1. Round robin,所有的group間輪詢
  2. Specified group,指定某一個確定的group
  3. Load balance,剩餘存儲空間多多group優先

選擇storage

當選定group後,tracker會在group內選擇一個storage節點給客戶端,支持如下選擇storage的規則:

  1. Round robin,在group內的所有storage間輪詢
  2. First server ordered by ip,按ip排序
  3. First server ordered by priority,按優先級排序(優先級在storage上配置)

選擇storage path

當分配好storage server後,客戶端將向storage發送寫文件請求,storage將會爲文件分配一個數據存儲目錄,支持如下規則:

  1. Round robin,多個存儲目錄間輪詢
  2. 剩餘存儲空間最多的優先

生成Fileid

選定存儲目錄之後,storage會爲文件生一個Fileid:

  1. storage server ip(32位整數)
  2. 文件創建時間(unix時間戳,32位整數)
  3. 文件大小
  4. 文件crc32校驗碼
  5. 隨機數(這個字段用來避免文件重名)

Fileid由上述部分拼接而成,然後將這個二進制串進行base64編碼,轉換爲可打印的字符串

選擇文件子目錄

當選定存儲目錄之後,storage會爲文件分配一個fileid,每個存儲目錄下有兩級256*256的子目錄,storage會按文件fileid進行兩次hash,路由到其中一個子目錄,然後將文件以fileid爲文件名存儲到該子目錄下

生成文件名返回客戶端

當文件存儲到某個子目錄後,即認爲該文件存儲成功,接下來會爲該文件生成一個文件名返回客戶端,文件名由下述幾個部分構成

  1. group name-文件上傳後所在的存儲組名稱
  2. 存儲目錄 - 存儲服務器配置的虛擬路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推
  3. 數據兩級目錄 - 存儲服務器在每個虛擬磁盤路徑下創建的兩級目錄,用於存儲數據文件
  4. fileid
  5. 文件後綴名(由客戶端指定,主要用於區分文件類型)拼接而成

生成的文件名需返回到客戶端,需要由客戶端進行保存。

其他篇章文章

1. FastDFS文件系統簡介與架構原理
2. 文件上傳原理
3. 文件下載原理
4. FastDFS文件同步原理與文件目錄簡介
5. 服務端與客戶端之間的通訊協議(自定義的通訊協議)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章