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

介紹

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

  1. 存儲數(shù)十億級的文件

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

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

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

架構(gòu)

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

主要缺點是中央主服務(wù)器無法高效地處理許多小文件,并且由于所有讀請求都需要通過塊主服務(wù)器,所以對于許多并發(fā)用戶來說可能無法很好地擴展。

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

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

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

該架構(gòu)非常簡單。實際數(shù)據(jù)存儲在存儲節(jié)點的卷上。一個卷服務(wù)器可以有多個卷,并且都可以支持基本認證的讀寫訪問。

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

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

讀寫文件

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

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

存儲大小

在當(dāng)前的實現(xiàn)中,每個卷可以是8x2 ^ 32個字節(jié)(32GiB)。這是因為將內(nèi)容對齊到8個字節(jié)。通過更改2行代碼,可以輕松地將其增加到64G或128G,或者更多,代價是由于對齊而導(dǎo)致的一些浪費的填充空間。

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

每個單獨的文件大小都受限于卷大小。

使用示例

本示例簡單搭建一個集群,集群規(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

啟動Master Server

./weed master -ip=192.168.0.193

啟動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請求以獲取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}

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

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

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

刪除文件,只需發(fā)送HTTP DELETE請求到相同的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自動的命令對搭建的四個數(shù)據(jù)節(jié)點的集群進行了簡單的性能測試
使用50萬大小為50KB的文件進行讀寫操作,測試命令及結(jié)果如下:

在寫的過程中由于194節(jié)點磁盤滿了導(dǎo)致有極少一部分寫入請求失敗,不過不影響測試結(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ù)副本,以及副本的級別
  • master servers失敗自動漂移-杜絕但點故障
  • 根據(jù)文件的mime類型自動進行g(shù)zip壓縮(linux查看文件的mime類型,file --mime-type)
  • 刪除及更新操作之后通過壓縮實現(xiàn)自動的磁盤空間回收
  • 集群中的服務(wù)器之間可以存在不同的磁盤空間,文件系統(tǒng),操作系統(tǒng)
  • 添加/刪除服務(wù)不會導(dǎo)致數(shù)據(jù)的重新平衡
  • 可選擇修復(fù)jpeg圖片的方向
    以下特性還沒有研究,后期再補上吧
  • 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)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,643評論 2 380

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

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