分布式文件系统选型
文章目录
花了近三周的时间鼓捣分布式文件系统,从比较现有系统的优缺点,到动手部署实验真是感受颇多啊,今天记录下来希望能给感兴趣的朋友带来的帮助。
困难一、系统选择
不搜不知道,一搜吓一跳。Google一下“分布式文件系统”各式各样的文件系统真是看得人眼花。Hadoop、FastDFS、mogileFS、mooseFS、ceph等等这里应该有你比较眼熟的吧。具体选择哪个好呢?请先看看这篇《流行的开源分布式文件系统比较》,作者最后的结论是mooseFS,尽管它有单点依赖。看完后我没有冲动的下载mooseFS并安装部署,《MooseFS与MogileFS性能测试对比》让我开始进一步开始关注mogileFS,结果《开源分布式文件系统FastDFS和MogileFS》又让我转向了我们自己牛人写的FastDFS,就冲国产的东东我也得支持一下,不比了就用它了(其实据搜索结论FastDFS确实很牛)。开始下载安装。
困难二、部署后的困惑
下载安装(安装指南请看这里)后才发现,我的天文件虽然没有被分块,但是上传后返回给我的是一个让人看着就害怕的URL地址,形如这样:
这么长而且没有语义,就算是把它存在数据库里我也觉得不爽,不光地址是这样存放数据的文件夹就更吓人了,类似于SVN存放数据的文件夹各种数字字母的文件夹层层嵌套,还有一点最重要的是它不能实现逻辑上的目录结构,也正式这点让我不得不放弃使用它。以上说的并不是说FastDFS的存储方式不好,因为我存放的文件是要有目录结构的,如果你存放的文件都是单独存在的如网站的图片,那用起来完全可以。
在此期间,由于觉得存储地址不好,我还试图自己写一个Scoket应用,来完成我所需要的分布式系统。大概思路是这样的:客户端程序通过文件名Hash值%可用服务器端数直接得到可存放或下载文件的服务端标识,然后连接,进行操作;服务器端程序只负责接受数据存放文件或读取文件返回数据。思路很简单,实现起来却并不那么简单。如果您觉得这个想法可行并且有这方面的能力,请自行实现。或许张子阳同学的《C#网络编程》系列可以对你有所帮助。
困难三、大应用大手笔
即使上面的哪些系统你都没有听说,Hadoop这个词你应该看着有点眼熟吧。我没有在最初选择Hadoop就是因为我觉得它太大了,如果一个可以称作大应用,无论是其实现的功能还是兼容的各个方面必然导致它的部署、使用起来相对要复杂一些。苦于那些轻量级的系统不能适用我的开发要求,最后只能选择Hadoop了。
Hadoop的部署要比我想象的简单些,如果你也想体验一把请参照这里。最让人头疼的是Hadoop是Java实现的,不直接支持其他语言的API连接访问HDFS。虽然官方的Wiki给出了多种解决方案HadoopStreaming、DistributedLucene、MountableHDFS、HDFS-APIs、HDFS-RAID等,那么多语言都支持,唯独没有直接对接C#的,我就无语了。经一番选择thrift的做法还是不错的,服务端的jar包已经在Hadoop的安装文件里了,路径为:Hadoop_Home/src/contrib/thriftfs/lib/,
还有一个相应的sh文件在Hadoop_Home\src\contrib\thriftfs\scripts\start_thrift_server.sh
就先到这吧,后边的还得等我把整个应用部署完了再继续了。
文章作者 古道
上次更新 2012-06-06