分布式文件系統(tǒng)FastDFS詳解_第1頁
分布式文件系統(tǒng)FastDFS詳解_第2頁
分布式文件系統(tǒng)FastDFS詳解_第3頁
分布式文件系統(tǒng)FastDFS詳解_第4頁
分布式文件系統(tǒng)FastDFS詳解_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 分布式文件系統(tǒng)FastDFS詳解目錄 TOC o 1-3 h z u HYPERLINK l _Toc503791082 為什么要使用分布式文件系統(tǒng) PAGEREF _Toc503791082 h 3 HYPERLINK l _Toc503791083 單機(jī)時(shí)代 PAGEREF _Toc503791083 h 3 HYPERLINK l _Toc503791084 獨(dú)立文件服務(wù)器 PAGEREF _Toc503791084 h 3 HYPERLINK l _Toc503791085 分布式文件系統(tǒng) PAGEREF _Toc503791085 h 4 HYPERLINK l _Toc50379

2、1086 FastDFS PAGEREF _Toc503791086 h 4 HYPERLINK l _Toc503791087 什么是FastDFS PAGEREF _Toc503791087 h 4 HYPERLINK l _Toc503791088 FastDFS相關(guān)概念 PAGEREF _Toc503791088 h 5 HYPERLINK l _Toc503791089 上傳機(jī)制 PAGEREF _Toc503791089 h 8 HYPERLINK l _Toc503791090 下載機(jī)制 PAGEREF _Toc503791090 h 11 HYPERLINK l _Toc503

3、791091 同步時(shí)間管理 PAGEREF _Toc503791091 h 12 HYPERLINK l _Toc503791092 精巧的文件ID-FID PAGEREF _Toc503791092 h 14為什么要使用分布式文件系統(tǒng)單機(jī)時(shí)代初創(chuàng)時(shí)期由于時(shí)間緊迫,在各種資源有限的情況下,通常就直接在項(xiàng)目目錄下建立靜態(tài)文件夾,用于用戶存放項(xiàng)目中的文件資源。如果按不同類型再細(xì)分,可以在項(xiàng)目目錄下再建立不同的子目錄來區(qū)分。例如:resourcesstaticfile、resourcesstaticimg等。優(yōu)點(diǎn):這樣做比較便利,項(xiàng)目直接引用就行,實(shí)現(xiàn)起來也簡單,無需任何復(fù)雜技術(shù),保存數(shù)據(jù)庫記錄和訪

4、問起來也很方便。缺點(diǎn):如果只是后臺(tái)系統(tǒng)的使用一般也不會(huì)有什么問題,但是作為一個(gè)前端網(wǎng)站使用的話就會(huì)存在弊端。一方面,文件和代碼耦合在一起,文件越多存放越混亂;另一方面,如果流量比較大,靜態(tài)文件訪問會(huì)占據(jù)一定的資源,影響正常業(yè)務(wù)進(jìn)行,不利于網(wǎng)站快速發(fā)展。獨(dú)立文件服務(wù)器隨著公司業(yè)務(wù)不斷發(fā)展,將代碼和文件放在同一服務(wù)器的弊端就會(huì)越來越明顯。為了解決上面的問題引入獨(dú)立圖片服務(wù)器,工作流程如下:項(xiàng)目上傳文件時(shí),首先通過ftp或者ssh將文件上傳到圖片服務(wù)器的某個(gè)目錄下,再通過ngnix或者apache來訪問此目錄下的文件,返回一個(gè)獨(dú)立域名的圖片URL地址,前端使用文件時(shí)就通過這個(gè)URL地址讀取。優(yōu)點(diǎn):圖

5、片訪問是很消耗服務(wù)器資源的(因?yàn)闀?huì)涉及到操作系統(tǒng)的上下文切換和磁盤I/O操作),分離出來后,Web/App服務(wù)器可以更專注發(fā)揮動(dòng)態(tài)處理的能力;獨(dú)立存儲(chǔ),更方便做擴(kuò)容、容災(zāi)和數(shù)據(jù)遷移;方便做圖片訪問請(qǐng)求的負(fù)載均衡,方便應(yīng)用各種緩存策略(HTTP Header、Proxy Cache等),也更加方便遷移到CDN。缺點(diǎn):單機(jī)存在性能瓶頸,容災(zāi)、垂直擴(kuò)展性稍差分布式文件系統(tǒng)通過獨(dú)立文件服務(wù)器可以解決一些問題,如果某天存儲(chǔ)文件的那臺(tái)服務(wù)突然down了怎么辦?可能你會(huì)說,定時(shí)將文件系統(tǒng)備份,這臺(tái)down機(jī)的時(shí)候,迅速切換到另一臺(tái)就OK了,但是這樣處理需要人工來干預(yù)。另外,當(dāng)存儲(chǔ)的文件超過100T的時(shí)候怎么

6、辦?單臺(tái)服務(wù)器的性能問題?這個(gè)時(shí)候我們就應(yīng)該考慮分布式文件系統(tǒng)了。業(yè)務(wù)繼續(xù)發(fā)展,單臺(tái)服務(wù)器存儲(chǔ)和響應(yīng)也很快到達(dá)了瓶頸,新的業(yè)務(wù)需要文件訪問具有高響應(yīng)性、高可用性來支持系統(tǒng)。分布式文件系統(tǒng),一般分為三塊內(nèi)容來配合,服務(wù)的存儲(chǔ)、訪問的仲裁系統(tǒng),文件存儲(chǔ)系統(tǒng),文件的容災(zāi)系統(tǒng)來構(gòu)成,仲裁系統(tǒng)相當(dāng)于文件服務(wù)器的大腦,根據(jù)一定的算法來決定文件存儲(chǔ)的位置,文件存儲(chǔ)系統(tǒng)負(fù)責(zé)保存文件,容災(zāi)系統(tǒng)負(fù)責(zé)文件系統(tǒng)和自己的相互備份。優(yōu)點(diǎn):擴(kuò)展能力: 毫無疑問,擴(kuò)展能力是一個(gè)分布式文件系統(tǒng)最重要的特點(diǎn);高可用性: 在分布式文件系統(tǒng)中,高可用性包含兩層,一是整個(gè)文件系統(tǒng)的可用性,二是數(shù)據(jù)的完整和一致性;彈性存儲(chǔ): 可以根據(jù)業(yè)

7、務(wù)需要靈活地增加或縮減數(shù)據(jù)存儲(chǔ)以及增刪存儲(chǔ)池中的資源,而不需要中斷系統(tǒng)運(yùn)行缺點(diǎn):系統(tǒng)復(fù)雜度稍高,需要更多服務(wù)器FastDFS毫無疑問FastDFS就屬于我們上面介紹的分布式文件系統(tǒng),下面我們來詳細(xì)了解一下:什么是FastDFSFastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng)。它解決了大數(shù)據(jù)量存儲(chǔ)和負(fù)載均衡等問題。特別適合以中小文件(建議范圍:4KB file_size storage server list的映射表。Tracker需要管理的元信息很少,會(huì)全部存儲(chǔ)在內(nèi)存中;另外tracker上的元信息都是由storage匯報(bào)的信息生成的,本身不需要持久化任何數(shù)據(jù),這樣使得tracker非常容易擴(kuò)展

8、,直接增加tracker機(jī)器即可擴(kuò)展為tracker cluster來服務(wù),cluster里每個(gè)tracker之間是完全對(duì)等的,所有的tracker都接受stroage的心跳信息,生成元數(shù)據(jù)信息來提供讀寫服務(wù)。storage server:存儲(chǔ)服務(wù)器(又稱:存儲(chǔ)節(jié)點(diǎn)或數(shù)據(jù)服務(wù)器),文件和文件屬性(meta data)都保存到存儲(chǔ)服務(wù)器上。Storage server直接利用OS的文件系統(tǒng)調(diào)用管理文件。Storage server(后簡稱storage)以組(卷,group或volume)為單位組織,一個(gè)group內(nèi)包含多臺(tái)storage機(jī)器,數(shù)據(jù)互為備份,存儲(chǔ)空間以group內(nèi)容量最小的sto

9、rage為準(zhǔn),所以建議group內(nèi)的多個(gè)storage盡量配置相同,以免造成存儲(chǔ)空間的浪費(fèi)。以group為單位組織存儲(chǔ)能方便的進(jìn)行應(yīng)用隔離、負(fù)載均衡、副本數(shù)定制(group內(nèi)storage server數(shù)量即為該group的副本數(shù)),比如將不同應(yīng)用數(shù)據(jù)存到不同的group就能隔離應(yīng)用數(shù)據(jù),同時(shí)還可根據(jù)應(yīng)用的訪問特性來將應(yīng)用分配到不同的group來做負(fù)載均衡;缺點(diǎn)是group的容量受單機(jī)存儲(chǔ)容量的限制,同時(shí)當(dāng)group內(nèi)有機(jī)器壞掉時(shí),數(shù)據(jù)恢復(fù)只能依賴group內(nèi)地其他機(jī)器,使得恢復(fù)時(shí)間會(huì)很長。group內(nèi)每個(gè)storage的存儲(chǔ)依賴于本地文件系統(tǒng),storage可配置多個(gè)數(shù)據(jù)存儲(chǔ)目錄,比如有10

10、塊磁盤,分別掛載在/data/disk1-/data/disk10,則可將這10個(gè)目錄都配置為storage的數(shù)據(jù)存儲(chǔ)目錄。storage接受到寫文件請(qǐng)求時(shí),會(huì)根據(jù)配置好的規(guī)則(后面會(huì)介紹),選擇其中一個(gè)存儲(chǔ)目錄來存儲(chǔ)文件。為了避免單個(gè)目錄下的文件數(shù)太多,在storage第一次啟動(dòng)時(shí),會(huì)在每個(gè)數(shù)據(jù)存儲(chǔ)目錄里創(chuàng)建2級(jí)子目錄,每級(jí)256個(gè),總共65536個(gè)文件,新寫的文件會(huì)以hash的方式被路由到其中某個(gè)子目錄下,然后將文件數(shù)據(jù)直接作為一個(gè)本地文件存儲(chǔ)到該目錄中。client:客戶端,作為業(yè)務(wù)請(qǐng)求的發(fā)起方,通過專有接口,使用TCP/IP協(xié)議與跟蹤器服務(wù)器或存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互。FastDFS向使用

11、者提供基本文件訪問接口,比如upload、download、append、delete等,以客戶端庫的方式提供給用戶使用。另外兩個(gè)概念:group :組, 也可稱為卷。 同組內(nèi)服務(wù)器上的文件是完全相同的 ,同一組內(nèi)的storage server之間是對(duì)等的, 文件上傳、 刪除等操作可以在任意一臺(tái)storage server上進(jìn)行 。meta data :文件相關(guān)屬性,鍵值對(duì)( Key Value Pair) 方式,如:width=1024,heigth=768 。Tracker相當(dāng)于FastDFS的大腦,不論是上傳還是下載都是通過tracker來分配資源;客戶端一般可以使用ngnix等靜態(tài)服務(wù)

12、器來調(diào)用或者做一部分的緩存;存儲(chǔ)服務(wù)器內(nèi)部分為卷(或者叫做組),卷于卷之間是平行的關(guān)系,可以根據(jù)資源的使用情況隨時(shí)增加,卷內(nèi)服務(wù)器文件相互同步備份,以達(dá)到容災(zāi)的目的。上傳機(jī)制首先客戶端請(qǐng)求Tracker服務(wù)獲取到存儲(chǔ)服務(wù)器的ip地址和端口,然后客戶端根據(jù)返回的IP地址和端口號(hào)請(qǐng)求上傳文件,存儲(chǔ)服務(wù)器接收到請(qǐng)求后生產(chǎn)文件,并且將文件內(nèi)容寫入磁盤并返回給客戶端file_id、路徑信息、文件名等信息,客戶端保存相關(guān)信息上傳完畢。內(nèi)部機(jī)制如下:1、選擇tracker server當(dāng)集群中不止一個(gè)tracker server時(shí),由于tracker之間是完全對(duì)等的關(guān)系,客戶端在upload文件時(shí)可以任意選

13、擇一個(gè)trakcer。選擇存儲(chǔ)的group當(dāng)tracker接收到upload file的請(qǐng)求時(shí),會(huì)為該文件分配一個(gè)可以存儲(chǔ)該文件的group,支持如下選擇group的規(guī)則:1、Round robin,所有的group間輪詢 2、Specified group,指定某一個(gè)確定的group 3、Load balance,剩余存儲(chǔ)空間多多group優(yōu)先2、選擇storage server當(dāng)選定group后,tracker會(huì)在group內(nèi)選擇一個(gè)storage server給客戶端,支持如下選擇storage的規(guī)則: 1、Round robin,在group內(nèi)的所有storage間輪詢 2、First

14、 server ordered by ip,按ip排序 3、First server ordered by priority,按優(yōu)先級(jí)排序(優(yōu)先級(jí)在storage上配置)3、選擇storage path當(dāng)分配好storage server后,客戶端將向storage發(fā)送寫文件請(qǐng)求,storage將會(huì)為文件分配一個(gè)數(shù)據(jù)存儲(chǔ)目錄,支持如下規(guī)則: 1、Round robin,多個(gè)存儲(chǔ)目錄間輪詢 2、剩余存儲(chǔ)空間最多的優(yōu)先4、生成Fileid選定存儲(chǔ)目錄之后,storage會(huì)為文件生一個(gè)Fileid,由storage server ip、文件創(chuàng)建時(shí)間、文件大小、文件crc32和一個(gè)隨機(jī)數(shù)拼接而成,然后

15、將這個(gè)二進(jìn)制串進(jìn)行base64編碼,轉(zhuǎn)換為可打印的字符串。選擇兩級(jí)目錄當(dāng)選定存儲(chǔ)目錄之后,storage會(huì)為文件分配一個(gè)fileid,每個(gè)存儲(chǔ)目錄下有兩級(jí)256*256的子目錄,storage會(huì)按文件fileid進(jìn)行兩次hash(猜測),路由到其中一個(gè)子目錄,然后將文件以fileid為文件名存儲(chǔ)到該子目錄下。5、生成文件名當(dāng)文件存儲(chǔ)到某個(gè)子目錄后,即認(rèn)為該文件存儲(chǔ)成功,接下來會(huì)為該文件生成一個(gè)文件名,文件名由group、存儲(chǔ)目錄、兩級(jí)子目錄、fileid、文件后綴名(由客戶端指定,主要用于區(qū)分文件類型)拼接而成。下載機(jī)制客戶端帶上文件名信息請(qǐng)求Tracker服務(wù)獲取到存儲(chǔ)服務(wù)器的ip地址和端口

16、,然后客戶端根據(jù)返回的IP地址和端口號(hào)請(qǐng)求下載文件,存儲(chǔ)服務(wù)器接收到請(qǐng)求后返回文件給客戶端。跟upload file一樣,在download file時(shí)客戶端可以選擇任意tracker server。tracker發(fā)送download請(qǐng)求給某個(gè)tracker,必須帶上文件名信息,tracke從文件名中解析出文件的group、大小、創(chuàng)建時(shí)間等信息,然后為該請(qǐng)求選擇一個(gè)storage用來服務(wù)讀請(qǐng)求。由于group內(nèi)的文件同步時(shí)在后臺(tái)異步進(jìn)行的,所以有可能出現(xiàn)在讀到時(shí)候,文件還沒有同步到某些storage server上,為了盡量避免訪問到這樣的storage,tracker按照如下規(guī)則選擇grou

17、p內(nèi)可讀的storage。1、該文件上傳到的源頭storage - 源頭storage只要存活著,肯定包含這個(gè)文件,源頭的地址被編碼在文件名中。2、文件創(chuàng)建時(shí)間戳=storage被同步到的時(shí)間戳 且(當(dāng)前時(shí)間-文件創(chuàng)建時(shí)間戳) 文件同步最大時(shí)間(如5分鐘) - 文件創(chuàng)建后,認(rèn)為經(jīng)過最大同步時(shí)間后,肯定已經(jīng)同步到其他storage了。 3、文件創(chuàng)建時(shí)間戳 同步延遲閥值(如一天)。 - 經(jīng)過同步延遲閾值時(shí)間,認(rèn)為文件肯定已經(jīng)同步了。同步時(shí)間管理當(dāng)一個(gè)文件上傳成功后,客戶端馬上發(fā)起對(duì)該文件下載請(qǐng)求(或刪除請(qǐng)求)時(shí),tracker是如何選定一個(gè)適用的存儲(chǔ)服務(wù)器呢?其實(shí)每個(gè)存儲(chǔ)服務(wù)器都需要定時(shí)將自身的信

18、息上報(bào)給tracker,這些信息就包括了本地同步時(shí)間(即,同步到的最新文件的時(shí)間戳)。而tracker根據(jù)各個(gè)存儲(chǔ)服務(wù)器的上報(bào)情況,就能夠知道剛剛上傳的文件,在該存儲(chǔ)組中是否已完成了同步。同步信息上報(bào)如下圖:寫文件時(shí),客戶端將文件寫至group內(nèi)一個(gè)storage server即認(rèn)為寫文件成功,storage server寫完文件后,會(huì)由后臺(tái)線程將文件同步至同group內(nèi)其他的storage server。每個(gè)storage寫文件后,同時(shí)會(huì)寫一份binlog,binlog里不包含文件數(shù)據(jù),只包含文件名等元信息,這份binlog用于后臺(tái)同步,storage會(huì)記錄向group內(nèi)其他storage同

19、步的進(jìn)度,以便重啟后能接上次的進(jìn)度繼續(xù)同步;進(jìn)度以時(shí)間戳的方式進(jìn)行記錄,所以最好能保證集群內(nèi)所有server的時(shí)鐘保持同步。storage的同步進(jìn)度會(huì)作為元數(shù)據(jù)的一部分匯報(bào)到tracker上,tracke在選擇讀storage的時(shí)候會(huì)以同步進(jìn)度作為參考。比如一個(gè)group內(nèi)有A、B、C三個(gè)storage server,A向C同步到進(jìn)度為T1 (T1以前寫的文件都已經(jīng)同步到B上了),B向C同步到時(shí)間戳為T2(T2 T1),tracker接收到這些同步進(jìn)度信息時(shí),就會(huì)進(jìn)行整理,將最小的那個(gè)做為C的同步時(shí)間戳,本例中T1即為C的同步時(shí)間戳為T1(即所有T1以前寫的數(shù)據(jù)都已經(jīng)同步到C上了);同理,根據(jù)上述規(guī)則,tr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論