最近在調(diào)研文件的分布式存儲及高可用浙宜,在GITHUB上面,發(fā)現(xiàn)了這個SeaweedFS項目不錯炕贵。
SeaweedFS是基于go語言開發(fā)的高可用文件存儲系統(tǒng)梆奈,兩大特性
1 成存儲上億的文件(最終受制于你的硬盤大小)
2 速度剛剛的
Seaweedfs的設(shè)計原理是基于 Facebook 的一篇圖片存儲系統(tǒng)的論文Facebook-Haystack
雖然我還沒有看称开,不過我覺得亩钟。肯定是NBHH的鳖轰。今天就只說一下環(huán)境相關(guān)的清酥。
安裝:
第一步,GO的運行環(huán)境(還可以參考官網(wǎng)的https://golang.org/doc/install)
wget https://storage.googleapis.com/golang/go1.6.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.6.1.linux-amd64.tar.gz
第二步蕴侣,配置環(huán)境變量 /etc/profile
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/usr/webserver/go/
export PATH=$PATH:$GOPATH/bin
第三步 安裝git
sudo apt-get install git
第四步 安裝mercurial
apt-get install?mercurial
第五步焰轻,編譯安裝
go get github.com/chrislusf/seaweedfs/go/weed ?((此處需要vpn))
生活在天朝,沒有VPN昆雀,可以直接下載它的運行包辱志,直接解壓蝠筑,就可以運行了(我就是這樣做的,如果這樣揩懒,etc/profile里面的gopath這一項就不需要了)
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$GOPATH/bin
sudo wget ?https://bintray.com/artifact/download/chrislusf/seaweedfs/weed_0.70beta_linux_amd64.tar.gz
(https://dl.bintray.com/chrislusf/seaweedfs/weed_0.70beta_linux_amd64.tar.gz)
tar zxvf weed_0.70beta_linux_amd64.tar.gz
服務(wù)啟動:
1 進入weed的解壓目錄什乙,我的是這樣的。
root@ubuntu:~/webserver/weed_0.70beta_linux_amd64# ./weed master
注意看已球,它是啟動了一個服務(wù)臣镣,端口是9333,這是它的默認端口智亮。
2 啟動文件存儲服務(wù)
root@ubuntu:~/webserver/weed_0.70beta_linux_amd64# ./weed volume -dir="/root/webserver/weed_0.70beta_linux_amd64/data" -max=5 -mserver="localhost:9333" -port=9080 &
3 提交一個存儲請求忆某,這個時候weed先要分配一個全局的文件ID
curl -X POST http://localhost:9333/dir/assign
4 存儲一張圖片
curl -X PUT -F file=@/root/webserver/weed_0.70beta_linux_amd64/error.jpg http://127.0.0.1:9080/5,019d90e98a
5 訪問測試
因為我的服務(wù)器地址是192.168.1.47,http://192.168.1.47:9080/5,019d90e98a.jpg
甚至阔蛉,你還可以加上尺寸弃舒,動態(tài)獲取相應(yīng)圖片的大小
確實不錯♀珊觯看了以上的截圖棒坏,你會發(fā)現(xiàn)它的文件ID,至始至終都存在遭笋。這就是文件的唯一標識。其實這個ID是每3部分存在的徒探。
其中"fid":"5,019d90e98a"就是 Fid瓦呼,F(xiàn)id 由三個部分組成 【VolumeId, NeedleId, Cookie】 組成。
VolumeId: 1? ? ? ? ? 32bit? ? ? 存儲的物理卷的Id
NeedleId: 01? ? ? ? 64bit? ? ? 全局唯一NeedleId测暗,每個存儲的文件都不一樣(除了互為備份的)央串。
Cookie: 9d90e98a? ? 32bit? ? ? Cookie值,為了安全起見碗啄,防止惡意攻擊质和。
以上這些,只能說是用過curl的方式稚字,作為JAVA開發(fā)人員饲宿。還是需要封裝一個這些API,方便訪問胆描。
weed java client這是一個老外寫的瘫想,雖然代碼老了點,不過還是很不錯昌讲。準備看看国夜,拿過來用一下。
網(wǎng)上看了若干的文章
http://blogread.cn/it/article/7721
http://www.sqshi.com/a/270607.html(Bilibili的毛劍是參考了weed而寫的BFS)
不過短绸,我覺得车吹,要真正理解這個weed,還是看它的GITHUB官網(wǎng)吧筹裕。
SeaweekFS:seaweedfs