對(duì)于我來(lái)說(shuō)蕊肥,就是一個(gè)文件存儲(chǔ)系統(tǒng)。
tracker-storge-client
tracker調(diào)度
storege真正存儲(chǔ)文件
分析一下別的文章
在生產(chǎn)中我們一般希望文件系統(tǒng)能幫我們解決以下問(wèn)題,如:1.超大數(shù)據(jù)存儲(chǔ)在抛;2.數(shù)據(jù)高可用(冗余備份)褥伴;3.讀/寫(xiě)高性能;4.海量數(shù)據(jù)計(jì)算逮走。最好還得支持多平臺(tái)多語(yǔ)言鸠蚪,支持高并發(fā)。
由于單臺(tái)服務(wù)器無(wú)法滿足以上要求师溅,這就迫使開(kāi)發(fā)者不得不考慮使用其他方式解決此類問(wèn)題茅信。分布式文件系統(tǒng)就在這樣迫切的需求下孕育而生。
今天為什么把標(biāo)題定為“分布式文件系統(tǒng)”呢墓臭?是因?yàn)槲蚁胪ㄟ^(guò)此次分享(FastDFS原理介紹)蘸鲸,和大家去做更多關(guān)于分布式文件系統(tǒng)的研究和分享。我想這項(xiàng)研究應(yīng)該會(huì)是一個(gè)“系列”性的專題窿锉。在本文之后還計(jì)劃分享“FastDFS源碼分析”酌摇,“FastDFS擴(kuò)容及資源優(yōu)化”膝舅。
——————————————————>我是分隔線<——————————————————————-
什么是FastDFS?
FastDFS是一個(gè)開(kāi)源的輕量級(jí)分布式文件系統(tǒng)窑多。它解決了大數(shù)據(jù)量存儲(chǔ)和負(fù)載均衡等問(wèn)題仍稀。特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務(wù),如相冊(cè)網(wǎng)站埂息、視頻網(wǎng)站等等技潘。在UC基于FastDFS開(kāi)發(fā)向用戶提供了:網(wǎng)盤,社區(qū)耿芹,廣告和應(yīng)用下載等業(yè)務(wù)的存儲(chǔ)服務(wù)崭篡。
FastDFS架構(gòu):
FastDFS服務(wù)端有三個(gè)角色:跟蹤服務(wù)器(tracker server)、存儲(chǔ)服務(wù)器(storage server)和客戶端(client)吧秕。
tracker server:跟蹤服務(wù)器琉闪,主要做調(diào)度工作,起負(fù)載均衡的作用砸彬。在內(nèi)存中記錄集群中所有存儲(chǔ)組和存儲(chǔ)服務(wù)器的狀態(tài)信息颠毙,是客戶端和數(shù)據(jù)服務(wù)器交互的樞紐。相比GFS中的master更為精簡(jiǎn)砂碉,不記錄文件索引信息蛀蜜,占用的內(nèi)存量很少。
storage server:存儲(chǔ)服務(wù)器(又稱:存儲(chǔ)節(jié)點(diǎn)或數(shù)據(jù)服務(wù)器)增蹭,文件和文件屬性(meta data)都保存到存儲(chǔ)服務(wù)器上滴某。Storage?server直接利用OS的文件系統(tǒng)調(diào)用管理文件。
client:客戶端滋迈,作為業(yè)務(wù)請(qǐng)求的發(fā)起方霎奢,通過(guò)專有接口,使用TCP/IP協(xié)議與跟蹤器服務(wù)器或存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互饼灿。
Tracker Server:跟蹤服務(wù)器幕侠,主要做調(diào)度工作,在訪問(wèn)上起負(fù)載均衡的作用碍彭。
Storage Server:存儲(chǔ)服務(wù)器(又稱數(shù)據(jù)服務(wù)器)晤硕。
ps:這樣的架構(gòu)具有以下特點(diǎn):1.輕量級(jí)(相比GFS簡(jiǎn)化了master角色,不再管理meta數(shù)據(jù)信息)庇忌。2.對(duì)等結(jié)構(gòu)舞箍。3.分組方式。
FastDFS協(xié)議:
FastDFS角色間是基于TCP/IP協(xié)議進(jìn)行通信皆疹,協(xié)議包格式為:header + body创译。具體結(jié)構(gòu)如圖:
FastDFS各節(jié)點(diǎn)間都是通過(guò)tcp/ip的方式來(lái)進(jìn)行通信的。
協(xié)議包由兩部分組成:header和body
上傳機(jī)制:
同步時(shí)間管理:
當(dāng)一個(gè)文件上傳成功后墙基,客戶端馬上發(fā)起對(duì)該文件下載請(qǐng)求(或刪除請(qǐng)求)時(shí)软族,tracker是如何選定一個(gè)適用的存儲(chǔ)服務(wù)器呢刷喜?
其實(shí)每個(gè)存儲(chǔ)服務(wù)器都需要定時(shí)將自身的信息上報(bào)給tracker,這些信息就包括了本地同步時(shí)間(即立砸,同步到的最新文件的時(shí)間戳)掖疮。而tracker根據(jù)各個(gè)存儲(chǔ)服務(wù)器的上報(bào)情況,就能夠知道剛剛上傳的文件颗祝,在該存儲(chǔ)組中是否已完成了同步浊闪。同步信息上報(bào)如下圖:
下載機(jī)制:
精巧的FID:
說(shuō)到下載就不得不提文件索引(又稱:FID)的精巧設(shè)計(jì)了。文件索引結(jié)構(gòu)如下圖螺戳,是客戶端上傳文件后存儲(chǔ)服務(wù)器返回給客戶端搁宾,用于以后訪問(wèn)該文件的索引信息。文件索引信息包括:組名倔幼,虛擬磁盤路徑盖腿,數(shù)據(jù)兩級(jí)目錄,文件名损同。
ps:
組名:文件上傳后所在的存儲(chǔ)組名稱翩腐,在文件上傳成功后有存儲(chǔ)服務(wù)器返回,需要客戶端自行保存膏燃。
虛擬磁盤路徑:存儲(chǔ)服務(wù)器配置的虛擬路徑茂卦,與磁盤選項(xiàng)store_path*對(duì)應(yīng)。
數(shù)據(jù)兩級(jí)目錄:存儲(chǔ)服務(wù)器在每個(gè)虛擬磁盤路徑下創(chuàng)建的兩級(jí)目錄组哩,用于存儲(chǔ)數(shù)據(jù)文件等龙。
文件名:與文件上傳時(shí)不同。是由存儲(chǔ)服務(wù)器根據(jù)特定信息生成伶贰,文件名包含:源存儲(chǔ)服務(wù)器IP地址蛛砰、文件創(chuàng)建時(shí)間戳、文件大小幕袱、隨機(jī)數(shù)和文件拓展名等信息暴备。
快速定位文件:
知道FastDFS FID的組成后悠瞬,我們來(lái)看看FastDFS是如何通過(guò)這個(gè)精巧的FID定位到需要訪問(wèn)的文件们豌。
通過(guò)組名tracker能夠很快的定位到客戶端需要訪問(wèn)的存儲(chǔ)服務(wù)器組,并將選擇合適的存儲(chǔ)服務(wù)器提供客戶端訪問(wèn)浅妆;
存儲(chǔ)服務(wù)器根據(jù)“文件存儲(chǔ)虛擬磁盤路徑”和“數(shù)據(jù)文件兩級(jí)目錄”可以很快定位到文件所在目錄望迎,并根據(jù)文件名找到客戶端需要訪問(wèn)的文件。
本次分享的主要內(nèi)容包含:FastDFS各角色的任務(wù)分工/協(xié)作凌外,文件索引的原理設(shè)計(jì)以及文件上傳/下載操作的流程辩尊。通過(guò)此次學(xué)習(xí)我們對(duì)FastDFS有了初步的了解,如:
FastDFS只有三個(gè)角色康辑;且跟蹤服務(wù)器和存儲(chǔ)服務(wù)器均不存在單點(diǎn)摄欲。
跟蹤服務(wù)器被動(dòng)的接收存儲(chǔ)服務(wù)器匯報(bào)轿亮,對(duì)存儲(chǔ)服務(wù)器進(jìn)行分組管理;并為客戶端選定適用的存儲(chǔ)服務(wù)器胸墙。同一存儲(chǔ)服務(wù)器可以同時(shí)向多臺(tái)跟蹤服務(wù)器匯報(bào)狀態(tài)信息我注。
存儲(chǔ)服務(wù)器組內(nèi)所有存儲(chǔ)服務(wù)器是對(duì)等關(guān)系,存儲(chǔ)的數(shù)據(jù)一一對(duì)應(yīng)且相同迟隅;所有的存儲(chǔ)服務(wù)器均是同時(shí)在線服務(wù)但骨,極大的提高的服務(wù)器的使用率,分擔(dān)了數(shù)據(jù)訪問(wèn)壓力智袭。