项目开发中经常有一些被嫌弃的小数据,现在全丢给 FastDFS
在我們開發(fā)項目的時候,經(jīng)常會遇到大塊數(shù)據(jù)的問題(2M-100M),比如說保存報表中1w個人的ID號,說實話,這些數(shù)據(jù)存儲在服務(wù)器哪里都被嫌棄,放在redis,mongodb中吧,一下子你就會收到報警信息,因為內(nèi)存滿了。。。放在mysql吧???你還得建立一個text字段,也沒人這么玩,而且還擔(dān)心受怕別人來一個 select * ,這速度你懂的。。。直接放到硬盤吧,沒擴展性,你1T大小的硬盤又能怎樣,照樣撐爆你,放在hadoop里面吧,對.net程序員來說,沒有這個緣分,好不容易微軟有一個.net hadoop sdk,說放棄就放棄了,兼具以上各種特性,最后目光只能落到FastDFS上了。
一:FastDFS
fastDFS的本意是一個分布式的文件系統(tǒng),所以大家可以上傳各種小文件,包括這篇聊到的那些一個點一個點的數(shù)據(jù),同樣你也可以認為是一些小文件,接下來我畫一下它的大概架構(gòu)圖:
我來解釋一下:
fastDFS是按照Group的形式對file進行分組存儲的,這里的group1你可以理解成C盤,group2理解成D盤,所有的數(shù)據(jù)都是在Group來劃分的。
為了提高讀取性能和熱備份,我們把group1放到了兩臺機器上,大概可能覺得有點浪費,對吧,事實就是這樣。
為了提高擴展性,因為單機是有存儲上限的,這時候你可以再新建一個group2,也就是D盤,放到另外機器上,這樣你就擴容了,對吧。
trackerServer主要用來保存group和storage的一些狀態(tài)信息,主要和client端進行交互,返回正確的storeage server地址,這個和hadoop的namenode其實是同一個角色的。
這里要注意的一個地方就是,client端在存儲file的時候,需要告訴trackerserver,你需要存儲到哪一個group中,比如group1還是group2?
二:下載安裝【CentOS】
為了方便測試,這里我部署到一臺CentOS上
1. 安裝步驟
1) 下載fastDFS基礎(chǔ)包:https://github.com/happyfish100/libfastcommon/releases
2) 然后下載fast源碼包:https://github.com/happyfish100/fastdfs/releases
3) wget之后,先把libfastcommon給安裝一下
tar?-xzvf?V1.0.36 cd?libfastcommon-1.0.36 ./make.sh?&&?./make.sh?install再把fastdfs安裝一下。
tar?-xzvf?V5.11 cd?fastdfs-5.11 ./make.sh?&&./make.sh?install這樣的話,我們的fast就算安裝好了,因為是默認安裝,所以配置文件是在 /etc/fdfs 目錄下,啟動服務(wù)在/etc/init.d下。
[root@localhost?~]#?cd?/etc/fdfs [root@localhost?fdfs]#?lsclient.conf?client.conf.sample?storage.conf.sample?storage_ids.conf.sample?tracker.conf.sample[root@localhost?fdfs]#?cd?/etc/init.d [root@localhost?init.d]#?ls fdfs_storaged??fdfs_trackerd??functions??netconsole??network??README [root@localhost?init.d]#然后再把兩個storage.conf.sample 和 tracker.conf.sample中copy出我們需要配置的文件。
[root@localhost?fdfs]#?cp?storage.conf.sample?storage.conf [root@localhost?fdfs]#?cp?tracker.conf.sample?tracker.conf [root@localhost?fdfs]#?ls client.conf??client.conf.sample??storage.conf??storage.conf.sample??storage_ids.conf.sample??tracker.conf??tracker.conf.sample [root@localhost?fdfs]#?4) tracker.conf 配置
這個配置文件,主要是配置里面的base_path。
#?the?base?path?to?store?data?and?log?files base_path=/usr/fast/fastdfs-5.11/data/tracker指定完路徑之后,我們創(chuàng)建一個data文件夾和tracker文件夾。
5) storage.conf 配置
這個配置文件,我們主要配置三樣?xùn)|西。
本storage服務(wù)器的groupname,大家看過架構(gòu)圖應(yīng)該也明白了,對吧。
為了提高磁盤讀寫,可以指定本groupname的file存儲在哪些磁盤上。
指定和哪一臺trackerserver進行交互。
然后在data目錄下創(chuàng)建storage和0文件夾
6) 啟動 FastDFS,可以看到22122的端口已經(jīng)啟動了,說明搭建成功
[root@localhost?~]#?/etc/init.d/fdfs_trackerd?start Starting?fdfs_trackerd?(via?systemctl):????????????????????[??OK??] [root@localhost?~]#?/etc/init.d/fdfs_storaged?start Starting?fdfs_storaged?(via?systemctl):????????????????????[??OK??] [root@localhost?0]#?netstat?-tlnp Active?Internet?connections?(only?servers) Proto?Recv-Q?Send-Q?Local?Address???????????Foreign?Address?????????State???????PID/Program?name???? tcp????????0??????0?0.0.0.0:22122???????????0.0.0.0:*???????????????LISTEN??????4346/fdfs_trackerd?? tcp????????0??????0?192.168.122.1:53????????0.0.0.0:*???????????????LISTEN??????1786/dnsmasq???????? tcp????????0??????0?0.0.0.0:22??????????????0.0.0.0:*???????????????LISTEN??????1129/sshd??????????? tcp????????0??????0?127.0.0.1:631???????????0.0.0.0:*???????????????LISTEN??????1128/cupsd?????????? tcp????????0??????0?0.0.0.0:23000???????????0.0.0.0:*???????????????LISTEN??????4171/fdfs_storaged?? tcp????????0??????0?127.0.0.1:25????????????0.0.0.0:*???????????????LISTEN??????1556/master????????? tcp6???????0??????0?:::22???????????????????:::*????????????????????LISTEN??????1129/sshd??????????? tcp6???????0??????0?::1:631?????????????????:::*????????????????????LISTEN??????1128/cupsd?????????? tcp6???????0??????0?::1:25??????????????????:::*????????????????????LISTEN??????1556/master????????? [root@localhost?0]#?三:使用C#客戶端
在github上有一個C#的客戶端,大概可以使用一下:https://github.com/smartbooks/FastDFS.Client ? 或者通過nuget上搜一下:
class?Program{static?void?Main(string[]?args){ConnectionManager.InitializeForConfigSection(new?FastDfsConfig(){FastDfsServer?=?new?List<FastDfsServer>(){new?FastDfsServer(){IpAddress="192.168.2.25",Port=22122}}});var?storageNode?=?FastDFSClient.GetStorageNode("group1");var?path?=?FastDFSClient.UploadFile(storageNode,?new?byte[10000],?".txt");var?rsp?=?FastDFSClient.DownloadFile(storageNode,?path);Debug.WriteLine("上傳的文件返回路徑:{0},?下載獲取文件大小:{1}",?path,?rsp.Length);}}好了,本篇就說這么多,希望對你有幫助。
總結(jié)
以上是生活随笔為你收集整理的项目开发中经常有一些被嫌弃的小数据,现在全丢给 FastDFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 Xunit.DependencyI
- 下一篇: 寻找性能更优秀的不可变小字典