什么是FastDFS
很多以檔案為載體的在線服務,如相冊網站、視頻網站等,都需要對檔案進行管理,包括檔案的存盤、同步、訪問(檔案上傳、檔案下載)等,同時肯定會伴隨著大容量存盤和負載均衡的問題,
在日常的一些專案中,比如做用戶的KYC認證等,也需要存盤檔案、圖片、視頻等,此時可以選擇使用OSS云服務,也可以自己構建相對專業的檔案管理系統,
FastDFS是一個開源的輕量級分布式檔案系統,用于解決大資料量存盤和負載均衡等問題,并需要通過專有API進行訪問,滿足大容量檔案存盤問題,并保證高性能和高擴展性,它能夠很好的解決上述提到的業務場景,
FastDFS的特性
FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的檔案服務器集群提供檔案上傳、下載等服務,
優點:
- 檔案不分塊存盤,檔案和系統中的檔案一一對應,
- 對檔案內容做hash處理,避免出現重復檔案,節約磁盤空間,
- 下載檔案支持HTTP協議,可基于內置Web Server或外部Web Server,
- 支持在線擴容,動態添加卷,
- 支持檔案冗余備份和負載均衡,
- 存盤服務器上可以保存檔案屬性(meta-data)V2.0 網路通信采用libevent,支持大并發訪問,整體性能更好,
缺點:
- 直接按檔案存盤,可直接查看檔案內容,缺乏檔案安全性,
- 資料同步無校驗,存在靜默IO問題,降低系統可用性,
- 單執行緒資料同步,僅適合存盤小檔案(4KB到500MB之間),
- 備份數根據存盤分卷(分組)決定,缺乏檔案備份數設定靈活性,
- 單個掛載點例外會導致整個存盤節點下線,
- 缺乏多機房容災支持,
- 靜態的負載均衡機制,
優點與缺點并存,但針對中小型系統已經完全足夠使用了,
FastDFS的角色
初次接觸或部署FastDFS的朋友往往會有些疑惑,為什么要部署那么多服務才能使用FastDFS,這是由FastDFS的角色構成決定的,
FastDFS系統有三個角色:跟蹤服務器(Tracker Server)、存盤服務器(Storage Server)和客戶端(Client),
如果通過Http訪問,通常情況下,還需要部署Nginx服務,
Tracker Server:跟蹤服務器,主要做調度作業,起到均衡的作用;負責管理所有的storage server和group,每個storage在啟動后會連接 Tracker,同步自己所屬group等資訊,并保持周期性心跳,它是客戶端和資料服務器互動的樞紐,
Storage Server:存盤服務器,主要提供容量和備份服務;以group為單位,每個group內可以有多臺storage server,資料互為備份,檔案及屬性(Meta Data)都保存在該服務器上,
Client:客戶端,上傳下載資料請求的發起方,通過專有介面,使用TCP/IP協議與跟蹤器服務器或存盤節點進行資料互動,
下面通過一張圖來看看FastDFS的不同角色在整個流轉程序中的作用,

上圖中Tracker相當于一個調度中心,上傳和下載都通過它來進行分配指定,
上面我們提到Nginx,客戶端通常會使用Ngnix等靜態服務器來呼叫或者做一部分的快取,后面搭建環境時便是基于Nginx,
Storage cluster部分,由Volume1、Volume2……VolumeK組成,它們稱為卷(或者叫做組),卷與卷之間是平行的關系,可以根據資源的使用情況隨時增加,卷內服務器檔案相互同步備份,以達到容災的目的,
上傳程序
當服務啟動之后,Storage Server會定期的向Tracker Server發送存盤資訊,如果Tracker Server是集群形式,則每個Tracker之間的關系是對等的,客戶端上傳時選擇任意一個Tracker即可,
整體流程:當客戶端請求Tracker進行上傳操作時,會獲取存盤服務器相關資訊,主要包括IP和埠,根據回傳資訊上傳檔案,通過存盤服務器寫入磁盤,并回傳給客戶端file_id、路徑資訊、檔案名等資訊,
對應流程圖如下:

其中,當Tracker收到客戶端上傳檔案的請求時,會為該檔案分配一個可以存盤檔案的group,當選定了group后就要決定給客戶端分配group中的哪一個storage server,
當分配好storage server后,客戶端向storage發送寫檔案請求,storage將會為檔案分配一個資料存盤目錄,然后為檔案分配一個fileid,最后根據以上的資訊生成檔案名存盤檔案,
生成的檔案名基本格式如下:

下載程序
跟上傳一樣,在下載時客戶端可以選擇任意Tracker server,
客戶端帶檔案名資訊請求Tracker,Tracker從檔案名中決議出檔案的group、大小、創建時間等資訊,然后選擇一個storage用來服務處理請求,回傳對應檔案,
對應流程圖如下:

如果是基于Web的http請求,此處的Client可以是Nginx代理服務,下面這張圖更加形象的描述了相關的流程,

小結
關于FastDFS的基本特性和原理已經介紹完畢,重點關注三個角色和兩個流程,以及將三個角色融入到兩個流程中進行分析,明白了這個大的方向之后,至于執行的細節部分就可以逐步了解和掌握,
下一篇文章我們將來介紹基于Docker如何部署FastDFS,關注微信公眾號【程式新視界】獲得持續更新內容,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/138061.html
標籤:Java
上一篇:JavaScanner
下一篇:求FVC指紋的DB_a庫
