初窺weedfs分布式文件系統(tǒng)

介紹

Seaweedfs是一個(gè)簡單偷俭,高擴(kuò)展性的分布式文件系統(tǒng)抄淑,它的兩個(gè)目標(biāo)分別是:

  1. 存儲(chǔ)數(shù)十億級(jí)的文件

  2. 快速響應(yīng)文件衩婚。

seaweedfs選擇以鍵值對(duì)(key->file)的實(shí)現(xiàn)方式剔应,這有點(diǎn)像“NoSQL",你可以陳其為”NoFS“。

seaweedfs的中心節(jié)點(diǎn)(center master)并不會(huì)管理所有文件的元數(shù)據(jù)而僅僅管理文件卷(file volmume)熬拒,文件及其元數(shù)據(jù)的管理是由volume server實(shí)現(xiàn)的爷光。這可以緩解center master的并發(fā)壓力,并且將文件元數(shù)據(jù)分配到volume server可以實(shí)現(xiàn)更快的文件訪問(只需一次磁盤讀取操作)澎粟。

架構(gòu)

通常蛀序,分布式文件系統(tǒng)將每個(gè)文件拆分為塊,中央主服務(wù)器保持文件名活烙,到塊句柄的塊索引以及每個(gè)塊服務(wù)器具有的塊徐裸。

主要缺點(diǎn)是中央主服務(wù)器無法高效地處理許多小文件,并且由于所有讀請(qǐng)求都需要通過塊主服務(wù)器啸盏,所以對(duì)于許多并發(fā)用戶來說可能無法很好地?cái)U(kuò)展重贺。

SeaweedFS管理主服務(wù)器中的數(shù)據(jù)卷,而不是管理塊。每個(gè)數(shù)據(jù)卷大小為32GB气笙,并且可以容納大量文件次企。每個(gè)存儲(chǔ)節(jié)點(diǎn)可以有很多數(shù)據(jù)卷。所以主節(jié)點(diǎn)只需要存儲(chǔ)關(guān)于卷的元數(shù)據(jù)健民,這是相當(dāng)少量的數(shù)據(jù)抒巢,并且通常是穩(wěn)定的贫贝。

實(shí)際的文件元數(shù)據(jù)存儲(chǔ)在卷服務(wù)器上的每個(gè)卷中秉犹。由于每個(gè)卷服務(wù)器只管理自己磁盤上的文件的元數(shù)據(jù),每個(gè)文件的元數(shù)據(jù)只有16個(gè)字節(jié)稚晚,因此所有文件訪問都可以從內(nèi)存中讀取文件元數(shù)據(jù)崇堵,只需要一次磁盤操作即可實(shí)際讀取文件數(shù)據(jù)。

主服務(wù)器(master server)和卷服務(wù)器(volmue server)

該架構(gòu)非常簡單客燕。實(shí)際數(shù)據(jù)存儲(chǔ)在存儲(chǔ)節(jié)點(diǎn)的卷上鸳劳。一個(gè)卷服務(wù)器可以有多個(gè)卷,并且都可以支持基本認(rèn)證的讀寫訪問也搓。

所有卷由主服務(wù)器管理赏廓。主服務(wù)器包含卷ID到卷服務(wù)器映射。這是相當(dāng)靜態(tài)的信息傍妒,可以輕松緩存幔摸。

在每個(gè)寫入請(qǐng)求上,主服務(wù)器還會(huì)生成一個(gè)file key颤练,這是一個(gè)不斷增長的64位無符號(hào)整數(shù)既忆。由于寫入請(qǐng)求通常不如讀取請(qǐng)求頻繁,因此一臺(tái)主服務(wù)器應(yīng)該能夠很好地處理并發(fā)

讀寫文件

當(dāng)客戶端發(fā)送寫入請(qǐng)求時(shí)嗦玖,主服務(wù)器為該文件返回(volume id, file key, file cookie, volume node url)患雇。客戶端然后聯(lián)系卷節(jié)點(diǎn)并發(fā)送文件的內(nèi)容宇挫。

當(dāng)客戶端需要根據(jù)(volume id, file key, file cookie)讀取文件時(shí)苛吱,它可以通過卷標(biāo)id詢問主服務(wù)器(volume node url, volume node public url),或從緩存中檢索器瘪。然后客戶端可以獲取內(nèi)容翠储,或者只是在網(wǎng)頁上呈現(xiàn)URL并讓瀏覽器獲取內(nèi)容。

存儲(chǔ)大小

在當(dāng)前的實(shí)現(xiàn)中娱局,每個(gè)卷可以是8x2 ^ 32個(gè)字節(jié)(32GiB)彰亥。這是因?yàn)閷?nèi)容對(duì)齊到8個(gè)字節(jié)。通過更改2行代碼衰齐,可以輕松地將其增加到64G或128G任斋,或者更多,代價(jià)是由于對(duì)齊而導(dǎo)致的一些浪費(fèi)的填充空間。

可以有2 ^ 32卷废酷。因此總系統(tǒng)大小為8 x 2 ^ 32字節(jié)x 2 ^ 32 = 8 x 4GiB x 4Gi = 128EiB(2 ^ 67字節(jié)或128 exbibytes)瘟檩。

每個(gè)單獨(dú)的文件大小都受限于卷大小。

使用示例

本示例簡單搭建一個(gè)集群澈蟆,集群規(guī)劃如下

Master Server :
192.168.0.193

Volmue Server:
192.168.0.191
192.168.0.193
192.168.0.195
192.168.0.196

啟動(dòng)Master Server

./weed master -ip=192.168.0.193

啟動(dòng)Volume Server

./weed volume -dir=/weedfs_data  -mserver=192.168.0.193:9333 -port=8083 -ip=`hostname -i`

文件寫入

要上傳文件:首先墨辛,向/ dir / assign發(fā)送HTTP POST,PUT或GET請(qǐng)求以獲取fid和卷服務(wù)器url

> curl -X POST http://192.168.0.193:9333/dir/assign
{"fid":"8,081df3da0dce77","url":"192.168.0.196:8083","publicUrl":"192.168.0.196:8083","count":1}

其次趴俘,要存儲(chǔ)文件內(nèi)容睹簇,請(qǐng)向響應(yīng)中的url +'/'+ fid發(fā)送HTTP多部分PUT或POST請(qǐng)求:

> curl -X PUT -F file=@./test.log http://192.168.0.196:8083/8,081df3da0dce77
{"name":"test.log","size":8}

更新文件,只需使用新的文件內(nèi)容再次發(fā)送一個(gè)PUT或POST請(qǐng)求寥闪。

刪除文件太惠,只需發(fā)送HTTP DELETE請(qǐng)求到相同的URL +'/'+ fid URL:

> curl -X DELETE http://192.168.0.196:8083/8,081df3da0dce77

文件讀取

首先通過文件的volumeId查找volume server

> curl -X get http://192.168.0.193:9333/dir/lookup?volumeId=8
{"volumeId":"8","locations":[{"url":"192.168.0.196:8083","publicUrl":"192.168.0.196:8083"}]}

現(xiàn)在您可以使用公共URL從卷服務(wù)器讀取

http://192.168.0.196:8083/8,081df3da0dce77 

性能

使用weedfs自動(dòng)的命令對(duì)搭建的四個(gè)數(shù)據(jù)節(jié)點(diǎn)的集群進(jìn)行了簡單的性能測試
使用50萬大小為50KB的文件進(jìn)行讀寫操作,測試命令及結(jié)果如下:

在寫的過程中由于194節(jié)點(diǎn)磁盤滿了導(dǎo)致有極少一部分寫入請(qǐng)求失敗疲憋,不過不影響測試結(jié)果凿渊,各位就將就一下吧

./weed benchmark -size=51200 -n=500000 -server=192.168.0.193:9333
------------ Writing Benchmark ----------
Concurrency Level:      16
Time taken for tests:   278.368 seconds
Complete requests:      499520
Failed requests:        480
Total transferred:      25591146326 bytes
Requests per second:    1794.46 [#/sec]
Transfer rate:          89778.15 [Kbytes/sec]

Connection Times (ms)
              min      avg        max      std
Total:        0.7      8.8       18660.8      106.4

Percentage of the requests served within a certain time (ms)
   50%      7.1 ms
   66%      8.4 ms
   75%      9.3 ms
   80%     10.0 ms
   90%     12.9 ms
   95%     16.3 ms
   98%     21.0 ms
   99%     24.6 ms
  100%    18660.8 ms
------------ Randomly Reading Benchmark ----------
Concurrency Level:      16
Time taken for tests:   196.642 seconds
Complete requests:      500000
Failed requests:        0
Total transferred:      25615722837 bytes
Requests per second:    2542.69 [#/sec]
Transfer rate:          127212.71 [Kbytes/sec]

Connection Times (ms)
              min      avg        max      std
Total:        0.2      6.2       219.8      4.2

Percentage of the requests served within a certain time (ms)
   50%      5.8 ms
   66%      7.5 ms
   75%      8.2 ms
   80%      8.7 ms
   90%     10.7 ms
   95%     14.0 ms
   98%     16.8 ms
   99%     18.6 ms
  100%    219.8 ms

其他特性

  • 可以選擇是否使用數(shù)據(jù)副本,以及副本的級(jí)別
  • master servers失敗自動(dòng)漂移-杜絕但點(diǎn)故障
  • 根據(jù)文件的mime類型自動(dòng)進(jìn)行g(shù)zip壓縮(linux查看文件的mime類型,file --mime-type)
  • 刪除及更新操作之后通過壓縮實(shí)現(xiàn)自動(dòng)的磁盤空間回收
  • 集群中的服務(wù)器之間可以存在不同的磁盤空間缚柳,文件系統(tǒng)埃脏,操作系統(tǒng)
  • 添加/刪除服務(wù)不會(huì)導(dǎo)致數(shù)據(jù)的重新平衡
  • 可選擇修復(fù)jpeg圖片的方向
    以下特性還沒有研究,后期再補(bǔ)上吧
  • Optional filer server provides "normal" directories and files via http
  • Support Etag, Accept-Range, Last-Modified, etc.
  • Support in-memory/leveldb/boltdb/btree mode tuning for memory/performance balance.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秋忙,一起剝皮案震驚了整個(gè)濱河市彩掐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翰绊,老刑警劉巖佩谷,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異监嗜,居然都是意外死亡谐檀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門裁奇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桐猬,“玉大人,你說我怎么就攤上這事刽肠±7荆” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵音五,是天一觀的道長惫撰。 經(jīng)常有香客問我,道長躺涝,這世上最難降的妖魔是什么厨钻? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上夯膀,老公的妹妹穿的比我還像新娘诗充。我一直安慰自己,他們只是感情好诱建,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布蝴蜓。 她就那樣靜靜地躺著,像睡著了一般俺猿。 火紅的嫁衣襯著肌膚如雪茎匠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天辜荠,我揣著相機(jī)與錄音汽抚,去河邊找鬼。 笑死伯病,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的否过。 我是一名探鬼主播午笛,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苗桂!你這毒婦竟也來了药磺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤煤伟,失蹤者是張志新(化名)和其女友劉穎癌佩,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體便锨,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡围辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了放案。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姚建。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吱殉,靈堂內(nèi)的尸體忽然破棺而出掸冤,到底是詐尸還是另有隱情,我是刑警寧澤友雳,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布稿湿,位于F島的核電站,受9級(jí)特大地震影響押赊,放射性物質(zhì)發(fā)生泄漏饺藤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望策精。 院中可真熱鬧舰始,春花似錦、人聲如沸咽袜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽询刹。三九已至谜嫉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凹联,已是汗流浹背沐兰。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔽挠,地道東北人住闯。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像澳淑,于是被迫代替她去往敵國和親比原。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理杠巡,服務(wù)發(fā)現(xiàn)量窘,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • FastDFS是用C語言編寫的一款開源的輕量級(jí)分布式文件系統(tǒng)氢拥。它對(duì)文件進(jìn)行管理蚌铜,功能包括:文件存儲(chǔ)、文件同步嫩海、文件...
    歡醉閱讀 4,035評(píng)論 3 12
  • feisky云計(jì)算冬殃、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,815評(píng)論 0 5
  • 初次看到這章母女同框照時(shí)大吃一驚,她們真的好像姐妹啊出革,能在女兒這么大年齡時(shí)還保持如此好的狀態(tài)真的很難得造壮。隨著年齡增...
    伊達(dá)生活筆記閱讀 340評(píng)論 3 4
  • 對(duì)于這樣的URL請(qǐng)求地址:http://www.abc.com?id=001,如何獲取傳入的id值呢骂束?...
    考考拉拉閱讀 1,084評(píng)論 0 0