分布式文件系統(tǒng)fastDFS-設(shè)計(jì)原理

一新博、分布式文件系統(tǒng)fastDFS-設(shè)計(jì)原理

FastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),由跟蹤服務(wù)器(tracker server)、存儲(chǔ)服務(wù)器(storage server)和客戶端(client)三個(gè)部分組成,

主要解決了海量數(shù)據(jù)存儲(chǔ)問題懈玻,特別適合以中小文件(建議范圍:4KB< file_size <500MB)為載體的在線服務(wù)。


image.png

1乾颁、Storage server

Storage server(后簡(jiǎn)稱storage)以組(卷涂乌,group或volume)為單位組織,一個(gè)group內(nèi)包含多臺(tái)storage機(jī)器英岭,數(shù)據(jù)互為備份湾盒,存儲(chǔ)空間以group內(nèi)容量最小的storage為準(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ì)很長(zhǎng)蚪战。

group內(nèi)每個(gè)storage的存儲(chǔ)依賴于本地文件系統(tǒng)牵现,storage可配置多個(gè)數(shù)據(jù)存儲(chǔ)目錄,比如有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ǔ)到該目錄中逗噩。

2掉丽、Tracker server

Tracker是FastDFS的協(xié)調(diào)者,負(fù)責(zé)管理所有的storage server和group异雁,每個(gè)storage在啟動(dòng)后會(huì)連接Tracker捶障,告知自己所屬的group等信息,并保持周期性的心跳片迅,tracker根據(jù) storage的心跳信息残邀,建立group==>[storage server list]的映射表皆辽。

Tracker需要管理的元信息很少柑蛇,會(huì)全部存儲(chǔ)在內(nèi)存中;另外tracker上的元信息都是由storage匯報(bào)的信息生成的驱闷,本身不需要持久化任何數(shù)據(jù)耻台,這樣使得tracker非常容易擴(kuò)展,直接增加tracker機(jī)器即可擴(kuò)展為tracker cluster來服務(wù)空另,cluster里每個(gè)tracker之間是完全對(duì)等的盆耽,所有的tracker都接受stroage的心跳信息,生成元數(shù)據(jù)信息來提供讀寫服務(wù)。

3摄杂、Uploadfile

FastDFS向使用者提供基本文件訪問接口坝咐,比如upload、download墨坚、append、delete等泽篮,以客戶端庫(kù)的方式提供給用戶使用柑船。


image.png

選擇tracker server

當(dāng)集群中不止一個(gè)tracker server時(shí)帽撑,由于tracker之間是完全對(duì)等的關(guān)系,客戶端在upload文件時(shí)可以任意選擇一個(gè)tracker鞍时。
選擇存儲(chǔ)的group

當(dāng)tracker接收到upload file的請(qǐng)求時(shí),會(huì)為該文件分配一個(gè)可以存儲(chǔ)該文件的group专筷,支持如下選擇group的規(guī)則:
1.Round robin,所有的group間輪詢
2.Specifiedgroup蒸苇,指定某一個(gè)確定的group
3.Load balance磷蛹,剩余存儲(chǔ)空間多的group優(yōu)先
選擇storage server

當(dāng)選定group后,tracker會(huì)在group內(nèi)選擇一個(gè)storage server給客戶端溪烤,支持如下選擇storage的規(guī)則:
1.Round robin,在group內(nèi)的所有storage間輪詢
2.First server ordered by ip槽驶,按ip排序
3.First server ordered by priority鸳兽,按優(yōu)先級(jí)排序(優(yōu)先級(jí)在storage上配置)
選擇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)先
生成Fileid(文件名)

選定存儲(chǔ)目錄之后戚嗅,storage會(huì)為文件生一個(gè)Fileid枢舶,由storage server ip替久、文件創(chuàng)建時(shí)間、文件大小蚯根、文件crc32和一個(gè)隨機(jī)數(shù)拼接而成,
然后將這個(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(猜測(cè)),
路由到其中一個(gè)子目錄允趟,然后將文件以fileid為文件名存儲(chǔ)到該子目錄下。
生成文件名(訪問url:路徑+文件名)

當(dāng)文件存儲(chǔ)到某個(gè)子目錄后涣楷,即認(rèn)為該文件存儲(chǔ)成功抗碰,接下來會(huì)為該文件生成一個(gè)文件名狮斗,
文件名由group弧蝇、存儲(chǔ)目錄、兩級(jí)子目錄沙峻、fileid鹃觉、文件后綴名(由客戶端指定睹逃,主要用于區(qū)分文件類型)拼接而成祷肯。


image.png

4疗隶、Download file

客戶端upload file成功后,會(huì)拿到一個(gè)storage生成的文件名蒋纬,接下來客戶端根據(jù)這個(gè)文件名即可訪問到該文件坚弱。

跟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ī)則選擇group內(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í)間戳< storage被同步到的時(shí)間戳。-同步時(shí)間戳之前的文件確定已經(jīng)同步了
    4.(當(dāng)前時(shí)間-文件創(chuàng)建時(shí)間戳)>同步延遲閥值(如一天)帮掉。-經(jīng)過同步延遲閾值時(shí)間,認(rèn)為文件肯定已經(jīng)同步了警绩。
    image.png

    5肩祥、文件同步

寫文件時(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同步的進(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)度作為參考

http://my.oschina.net/denglz/blog/488339

原文地址:https://blog.csdn.net/u010558660/article/details/52353481

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贸辈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奢啥,更是在濱河造成了極大的恐慌嘴拢,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赌结,死亡現(xiàn)場(chǎng)離奇詭異孝冒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)量承,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門穴店,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忧风,你說我怎么就攤上這事球凰。” “怎么了蚤霞?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵义钉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我夜畴,道長(zhǎng),這世上最難降的妖魔是什么贪绘? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任税灌,我火速辦了婚禮,結(jié)果婚禮上苞也,老公的妹妹穿的比我還像新娘粘秆。我一直安慰自己,他們只是感情好攻走,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布昔搂。 她就那樣靜靜地躺著,像睡著了一般巩趁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蠢古,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天别凹,我揣著相機(jī)與錄音,去河邊找鬼堕战。 笑死拍霜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祠饺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼记劈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼并巍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起懊渡,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤距贷,失蹤者是張志新(化名)和其女友劉穎吻谋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漓拾,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骇两,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了配阵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片示血。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡难审,死狀恐怖瘫拣,靈堂內(nèi)的尸體忽然破棺而出告喊,到底是詐尸還是另有隱情,我是刑警寧澤拢切,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布失球,位于F島的核電站,受9級(jí)特大地震影響实苞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聪轿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一猾浦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧金赦,春花似錦夹抗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至度液,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間已慢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蛇受, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厕鹃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓把将,卻偏偏與公主長(zhǎng)得像忆矛,于是被迫代替她去往敵國(guó)和親请垛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洽议,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容