文件存储的选择

谭明智 2013-5-30 8:41:45   
为啥不使用成熟的文件系统呢,还可以更方便的管理图片,图片多了,还可以分布式部署,对前端调用没有任何的影响。很多文件系统还可以追加其他信息,保存图片的时候可以将一些元数据保存起来,说不定以后可能就用到了呢。
我们利用文件系统做的文件存储,又增加了一个管理端,能对图片进行修改和删除,同时能对图片进行二次组织,从而在未来可能会衍生出其他的产品,比如图册、搜图等等。
我的想法是,分布式文件系统做集中存储,nginx做缓存加速,两层架构。
宋黎晓 2013-5-30 13:45:20   
@谭明智 :你说的成熟文件系统是指的什么?GridFS?
重点不一样,我想要的不是文件存储和管理,而是文件上传的效率和访问的加速负载均衡等。而且图片的缩放,对目前的项目也很需要。 有了这些,相关的代码就不需要大家来写了。
再就我不想把图片放到数据库里面,看起来太不直观,虽然可以有客户端。要做客户端,我的方式也可以做客户端。
分布式部署其实也不成问题,根据用途或者根据时间,只是个路由配置。Nginx来做也很简单。
谭明智 2013-5-31 9:19:52   
@宋黎晓 :用的比较多的是moogefs,现在有很多人开始使用gfs和hadoop的hdfs来做了。上传的效率我认为可以不需要太特别关注,因为本身上传的频率不会太高,而且都是图片这种小文件。主要是访问的速度,访问速度不管用磁盘存储还是用文件系统存储,都不能有本质的改善。影响图片加载效率的因素主要是带宽和线路,如果规模大,最好的加速方式是采用CDN,利用内容分发网络做多结点缓存。
对于我们来说我认为最重要的是还是做到可管理的,可重复利用的存储。
我们提取的文件服务,解决了三个问题,第一是存储,可管理的存储,可扩展的存储,很容易分布式部署,也非常容易做容灾备份,这些都是利用文件系统本身的能力,只需要简单配置即可。第二是统一访问,所有的图片访问都交给该服务来做,所有的优化也是在这个服务上优化,可以采用两级缓存,在最前端缓存到内存,用nginx+memcached,缓存热点图片,在tomcat提供的读取服务,可以缓存到磁盘,第三层就是集中式的文件存储,前面两层的数据全部删掉,也保证了集中存储完整的数据存在。第三,提供图片的简单的处理,就是你说的,切图、缩图、加水印等功能,各个应用也可以不用做这些工作。以上三点在我们现有的文件系统上都已经基本支持了。
我更倾向采用文件系统来做,主要考虑到文件的集中存储后规模扩大,可以很容易的利用文件系统的特性做分布式扩展,同时利用文件系统的安全机制,做容灾备份,一个节点如果出现问题,服务可以很容易的平滑切换。其次,我看了很多的网站他们的图片都进行了二次利用,扩展到搜图、弄成图集,这些会衍生出其他的产品,所以我们增加了对图片的管理,文件系统不仅可以存储图片,而且可以追加很多属性,这样就可以保证存储到文件系统的图片不仅仅是一张图,而是一个有含义的内容,方便二次利用。
如果只是做存储和读取,我也倾向nginx,甚至直接存储本地,分布式后可采用ftp分发。我可能考虑的有点多,从项目考虑很多东西现在还用不上,但是代价也不大,就这么做了。而且nginx有个直接读取GridFS的模块,可以直接由nginx直接读取后端存储的,文件系统都有索引,并且不会像直接存储磁盘会形成很多碎片,IO压力不大,nginx辅助缓存,效率应该也不是问题。
只是分享了一下我的思路,这么长,可以写一篇文章出来了,呵呵。
谭明智 2013-5-31 9:29:15   
@宋黎晓 :http://www.oecp.cn/hi/yongtree/blog/2575  以前做电子商务时的思路,又翻出来了,我现在做的文件服务算是这个思路的实现吧。
宋黎晓 2013-5-31 13:06:41   
@谭明智 :原来成熟的文件系统是说的你们自己做的啊?
我这个就是自己搭一个主要功能都有,简单易用的。满足项目需要就是了,没时间和精力去搞那么一套东西。说那么多不如有现成的共享出来,我们也用用。
谭明智 2013-6-3 8:54:00   
@宋黎晓 :文件系统不是我们自己做的,我们做的只是针对gridfs做的服务,方便项目调用直接存储,同时做了一个统一的读取文件的端和管理端。
访问www.doctorpda.com和www.med330.cn等所有的医师在线网站的图片和文件,基本上使用的是我们同一套服务,图片的切图,缩图,水印,基本上隐含在文件路径上。本来一直想整理一下做个分享,一直没也没抽出时间,而且这个服务还不完善,很多想法还没实现。访问http://static.med626.com.cn/admin可以访问文件服务后台,简单贴几个图看看吧,以后再完整的分享一下。


游客 2013-12-8 19:44:46  
你好楼主,我原来是用java+tomcat,但是压力一上来nginx老报后端连接超时,所以想改为楼主这种方案,希望能抗压谢谢f分享
游客 2014-7-18 10:23:07  
怎么没有看到数据库处理的部分?楼主能不能说明一下啊?谢谢
宋黎晓 2014-7-18 12:42:11   
数据库处理部分需要自己的程序来完成,Nginx不做这个操作。文件上传后会把文件信息,包括文件名,路径,md5值等转发到指定的callback URL,这个URL就是我们自己写的程序,接收到转发和参数后,需要自己把文件信息保存到数据库中。
吴辉 2014-8-27 16:17:11  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值