FastDFS文件名策略及對(duì)小文件的優(yōu)化
FastDFS是一個(gè)應(yīng)用級(jí)分布式文件存儲(chǔ)服務(wù),其采用中心型結(jié)構(gòu)(類似GFS、HDFS、TFS等),主要用于大中型網(wǎng)站存儲(chǔ)資源文件。FastDFS具有輕量級(jí),支持高并發(fā)放訪問,負(fù)載均衡,可擴(kuò)展等優(yōu)點(diǎn)。而FastDFS最大的亮點(diǎn)就是對(duì)小文件的存儲(chǔ)性能較好,這主要來自于其文件名策略。
1.小文件存儲(chǔ)性能優(yōu)化
小文件的性能瓶頸主要來自于對(duì)元數(shù)據(jù)服務(wù)器(如FastDFS中的TrackerServer或TFS中的NameServer)的訪問,因?yàn)楫?dāng)文件本身大小很小時(shí),元數(shù)據(jù)存儲(chǔ)所占空間與文件內(nèi)容存儲(chǔ)所占空間的比例就變得較大,訪問元數(shù)據(jù)所消耗資源與訪問文件內(nèi)容所消耗資源的比例也變得較大。因此,通常對(duì)小文件存儲(chǔ)的優(yōu)化方法主要有兩大類思路:一是減少訪問元數(shù)據(jù)的次數(shù),比如Cache預(yù)??;二是減少元數(shù)據(jù)所占的存儲(chǔ)空間,比如FastDFS使用的文件名策略。
2. FastDFS文件名策略
FastDFS中的文件名是在向StorageServer存儲(chǔ)文件時(shí)由系統(tǒng)指定的,文件名中包含了VolumeID和FileID。也就是說,當(dāng)客戶要讀取某個(gè)文件時(shí),通過在客戶端對(duì)文件名進(jìn)行解析,就可以知道該文件存儲(chǔ)在哪個(gè)Volume上和它在StorageServer中的FileID。但是此時(shí)用戶還不能讀取文件,因?yàn)樗恢繴olume內(nèi)各個(gè)StorageServer的ip地址,也不知道應(yīng)該從Volume內(nèi)的哪個(gè)StorageServer中讀取。所以用戶需手持欲訪問的文件的VolumeID向TrackerServer詢問,TrackerServe會(huì)均衡當(dāng)前各StorageServer的IO負(fù)載狀況,返回一個(gè)最佳的StorageServer的ip地址。最后用戶與該StorageServer連接,出示欲訪問文件的FileID,StorageServer上會(huì)維持一個(gè)FileID對(duì)應(yīng)偏移量的表,從而得到欲訪問文件的偏移量。
可見,F(xiàn)astDFS的文件名策略將文件存儲(chǔ)位置信息隱含在文件名中,從而減少了元數(shù)據(jù)量,達(dá)到了優(yōu)化小文件存儲(chǔ)性能的作用。