實際開發(fā)中的問題
在實際項目開發(fā)中我們一般希望文件系統(tǒng)能幫我們解決以下問題,如:1.超大數(shù)據(jù)存儲佛致;2.數(shù)據(jù)高可用(冗余備份)讶凉;3.讀/寫高性能;4.海量數(shù)據(jù)計算瘫辩。最好還得支持多平臺多語言伏嗜,支持高并發(fā)。
由于單臺服務器無法滿足以上要求伐厌,這就迫使開發(fā)者不得不考慮使用其他方式解決此類問題承绸。分布式文件系統(tǒng)就在這樣迫切的需求下孕育而生。
什么是FastDFS
FastDFS是一個開源的輕量級分布式文件系統(tǒng)挣轨。它解決了大數(shù)據(jù)量存儲和負載均衡等問題军熏。特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務,如相冊網(wǎng)站刃唐、視頻網(wǎng)站等等。在UC上就有基于FastDFS開發(fā)向用戶提供了:網(wǎng)盤界轩,社區(qū)画饥,廣告和應用下載等業(yè)務的存儲服務。
FastDFS架構
FastDFS服務端有三個角色:跟蹤服務器(tracker server)浊猾、存儲服務器(storage server)和客戶端(client)
tracker server:跟蹤服務器抖甘,主要做調(diào)度工作,起負載均衡的作用葫慎。在內(nèi)存中記錄集群中所有存儲組和存儲服務器的狀態(tài)信息衔彻,是客戶端和數(shù)據(jù)服務器交互的樞紐薇宠。相比GFS中的master更為精簡,不記錄文件索引信息艰额,占用的內(nèi)存量很少澄港。
storage server:存儲服務器(又稱:存儲節(jié)點或數(shù)據(jù)服務器),文件和文件屬性(meta data)都保存到存儲服務器上柄沮。Storage server直接利用OS的文件系統(tǒng)調(diào)用管理文件回梧。
-
client:客戶端,作為業(yè)務請求的發(fā)起方祖搓,通過專有接口狱意,使用TCP/IP協(xié)議與跟蹤器服務器或存儲節(jié)點進行數(shù)據(jù)交互。
FastDFS架構 這樣的架構具有以下特點:
- 輕量級(相比GFS簡化了master角色拯欧,不再管理meta數(shù)據(jù)信息)详囤。
- 對等結構。
- 分組方式镐作。
FastDFS協(xié)議
FastDFS角色間是基于TCP/IP協(xié)議進行通信藏姐,協(xié)議包格式為:header + body。具體結構如圖:
上傳機制
下載機制
同步時間管理:
- 當一個文件上傳成功后滑肉,客戶端馬上發(fā)起對該文件下載請求(或刪除請求)時包各,tracker是如何選定一個適用的存儲服務器呢?
-
其實每個存儲服務器都需要定時將自身的信息上報給tracker靶庙,這些信息就包括了本地同步時間(即问畅,同步到的最新文件的時間戳)。而tracker根據(jù)各個存儲服務器的上報情況六荒,就能夠知道剛剛上傳的文件护姆,在該存儲組中是否已完成了同步。同步信息上報如下圖:
同步信息上報
精巧的FID
說到下載就不得不提文件索引(又稱:FID)的精巧設計了掏击。文件索引結構如下圖卵皂,是客戶端上傳文件后存儲服務器返回給客戶端,用于以后訪問該文件的索引信息砚亭。文件索引信息包括:組名灯变,虛擬磁盤路徑,數(shù)據(jù)兩級目錄捅膘,文件名添祸。
- 組名:文件上傳后所在的存儲組名稱,在文件上傳成功后有存儲服務器返回寻仗,需要客戶端自行保存刃泌。
- 虛擬磁盤路徑:存儲服務器配置的虛擬路徑,與磁盤選項store_path*對應。
- 數(shù)據(jù)兩級目錄:存儲服務器在每個虛擬磁盤路徑下創(chuàng)建的兩級目錄耙替,用于存儲數(shù)據(jù)文件亚侠。
- 文件名:與文件上傳時不同。是由存儲服務器根據(jù)特定信息生成俗扇,文件名包含:源存儲服務器IP地址硝烂、文件創(chuàng)建時間戳、文件大小狐援、隨機數(shù)和文件拓展名等信息钢坦。
快速定位文件:
知道FastDFS FID的組成后,我們來看看FastDFS是如何通過這個精巧的FID定位到需要訪問的文件啥酱。
- 通過組名tracker能夠很快的定位到客戶端需要訪問的存儲服務器組爹凹,并將選擇合適的存儲服務器提供客戶端訪問;
-
存儲服務器根據(jù)“文件存儲虛擬磁盤路徑”和“數(shù)據(jù)文件兩級目錄”可以很快定位到文件所在目錄镶殷,并根據(jù)文件名找到客戶端需要訪問的文件禾酱。
定位文件
主要內(nèi)容包含:FastDFS各角色的任務分工/協(xié)作,文件索引的原理設計以及文件上傳/下載操作的流程绘趋。通過此次學習我們對FastDFS有了初步的了解颤陶,如:
- FastDFS只有三個角色;且跟蹤服務器和存儲服務器均不存在單點陷遮。
- 跟蹤服務器被動的接收存儲服務器匯報滓走,對存儲服務器進行分組管理;并為客戶端選定適用的存儲服務器帽馋。同一存儲服務器可以同時向多臺跟蹤服務器匯報狀態(tài)信息搅方。
- 存儲服務器組內(nèi)所有存儲服務器是對等關系,存儲的數(shù)據(jù)一一對應且相同绽族;所有的存儲服務器均是同時在線服務姨涡,極大的提高的服務器的使用率,分擔了數(shù)據(jù)訪問壓力吧慢。
參考:
taotao商城項目中FastDFS中安裝配置
Java程序員眼中的Linux