1. 程式人生 > >FastFDS 分散式檔案系統(圖片,靜態資源之類的)

FastFDS 分散式檔案系統(圖片,靜態資源之類的)

https://www.cnblogs.com/chiangchou/p/fastdfs.html



FastDFS是由C語言編寫,輕量級開源的分散式檔案系統,在跨境通等B2C商城的專案之中作為圖片伺服器使用,用來儲存商家的Logo,商品的圖片等圖片資源,github地址: https://github.com/happyfish100/fastdfs

FastDFS中有三個角色.Tracker Storage Client.見名知意

Tracker:
翻譯過來是追蹤者,本身並不是作為儲存的角色,而是作為排程者的角色而存在的,也有負載均衡的理念在裡面.Tracker管理所有的Storage和Group.

Storage:
Storage是儲存的角色,每個Storage啟動時會連線Tracker告知自身所屬的Group並且報紙週期心跳Tracker則以此來建立Group到Storage的對映資訊.同一個Group中的Storage中內容相同,互為備份.Group中Storage的容量以當前組中最小的為準,所以配置的時候要注意最好是設定成相同的大小,避免空間浪費.

Client:
這個就不都說了,一看名字就知道是客戶端.和Redis之類的中介軟體一樣都需要一個客戶端來訪問.

說了那麼多 畫一下FastDFS的架構圖吧.FastDFS架構圖

如圖所示Client訪問Tracker,請求對應的檔案地址,Tracker中包含了Storage所屬的分組資訊,並且通過對應的分組去訪問分組中的某個Storage獲取到對應的檔案資訊.
Tracker和Storage都可以搭建叢集,這樣帶來的好處是,可以避免單點故障,讓服務可以可靠地提供.Group眾多的情況下可以提升系統的QPS.特別適合中小型檔案的儲存,一般在4KB到500MB之間.

FastDFS對外提供檔案的訪問介面,如upload,download,append,delete等,通過客戶端庫的方式提供.

檔案上傳概述:
檔案上傳分為選擇Tracker,選擇Group,選擇Storage,生成Field,選擇兩級目錄,生成檔名這麼幾個步驟.現在網際網路專案,為了保證服務可靠性,都會搭建叢集,所以按照這種方式來總結.

選擇Tracker:
Tracker叢集中所有的Tracker地位都是對等的,客戶端上傳檔案時會任意選擇一個Tracker.

選擇Group:
Tracker收到上傳請求之後,會分配一個Group來儲存檔案,提供的規則有:輪詢所有的Group,指定一個Group,負載均衡(剩餘空間多的優先)

選擇Storage:
分配好Group之後,Tracker會在Group中選擇一個Storage,提供的規則有:輪詢所有的Storage,根據ip排序,根據Storage優先順序排序.

在選定好了Storage之後客戶端向Storage傳送寫入檔案請求,Storage為檔案分配一個數據儲存目錄,提供的規則有:儲存目錄輪詢,負載均衡

生成Field:
選擇好儲存目錄之後,Storage為檔案分配一個Field,由Storage的ip + 檔案建立的時間戳 + 檔案大小 + 檔案crc32校驗後+一個隨機數拼接而成.再將這個二進位制串進行Base64編碼轉換成String.

選擇兩級目錄:生成field之後,每個儲存目錄下會有兩級256*256的子目錄,Storage會按照field進行第一次hash,路由到第一級子目錄,再進行第二次hash,儲存到對應的子目錄下.

生成檔名:
當檔案儲存完成後,會為其建立一個檔名,建立規則為:Group + 儲存目錄 + 兩級子目錄 + field + 檔案拓展名拼接而成
例如:
group12/M00/00/0F/xjkRbWxx1T0BBDDTTDAuSQUghg128824.jpg

檔案下載和訪問只需要按照這個路徑即可..