如何设计一个较大规模的分布式图片存储方案

网站目前有很多图片,大概300g,目前的存储是直接放在硬盘的,url记录在数据库,多个主机之间使用nfs共享。 但是现在想使用分布式存储来代替nfs。 网上搜了下 豆瓣的beansdb 可以存储图片,并且多节点备份。但是beansdb java方面的资料太少,如何保存图片的也没有找到介绍资料。 有哪位大神有过分布式保存图片的经验或者对beansdb有研究的,能否指点一下小弟。

刘锡涛
刘锡涛
281
编辑于2012-08-21
评论 (3)链接2012-03-09 
  • 0 支持
    i奇艺,在用mongodb GridFS做图片存储,资料的话你可以找找他们的PPT – xiaomi 2012-03-09
  • 0 支持
    用hadoop中hdfs吧,很好用的,自己写个客户端就ok了,支持分布式 – threejin 2012-08-31
  • 0 支持
    fastdfs是个简单廉价的nfs替代方案 – 劣头翔 2012-10-16

MongoDB的GridFS我们以前用过,不论是自己写代码读(PHP,Java通过MongoDB Driver)还是直接配到让Nginx读,效率都损失蛮大的。
300G的图片不算大,PC机都能单机存下,没必要分布式存储,做好备份就行了。上了十来T并确认增长很快再说吧。
如果不是经常变化的图片,前面租个CDN拦着就行了,避免静态资源消耗过多服务器性能。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-05-27
  1. 如果图片比较小,比如不到1M,可以使用当下流行的分布式存储架构,例如有人提到的TFS、HDFS。
  2. 这些架构有些共同特点:三层结构(客户端、NameNode,DataNode);NameNode负责Block和DataNode之间的映射,是实现管理功能的节点,采用HA结构,一主一副实现容灾;DataNode实现实际的存储,多个图片文件组成一个block存放在DataNode服务器上。
  3. NameNode和DataNode之间通过心跳机制通信,既可以实现映射关系的更新,又可以支持平滑扩容,只需要新加入的DataNode服务器向NameNode报告block信息就可以了。另外,每份数据在DataNode上都保存3份防止数据损毁。
  4. 每次读写操作时,客户端首先询问NameNode服务器,给出所需图片的名称,这个名称由BlockID和FileID组成,然后NameNode返回DataNode编号(会考虑到负载均衡选择一个合适的DataNode),最后客户端和这个DataNode实现读写交互。
  5. 一般来说,这样的架构可以支持并发读,但是不支持并发写。
  6. 另外,如果静态图片比较多,可以在架构的前端增加cache缓存或者CDN(内容分发网络),将部分使用比较频繁的静态图片存储在缓存或者CDN中,这样可以满足实时性比较强的应用场景。
  7. 在架构的后端可以补充的是当前比较流行的NoSQL,采用(Key,Value)方式存储图片,作为文件系统的候补。
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-10-24

用mongodb的GridFS做图片存储吧,支持分布式。
设计思路:图片存储唯一;只存原始图;首次请求生成缩略图并生成静态文件;url固定,根据不同url产生缩略图,参照Abusing Amazon images

你可以参考下这里,基于Mongo's GridFS的分布式图片存储服务

卢小明
卢小明
3
编辑于 2012-10-11
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-03-09

用又拍云吧,很多用过的都推荐。。
PHP Mongodb Gridfs 请参见
http://tmkook.com/blog/archives/images-system

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-06-06

可以采用淘宝的TFS,已经开源且有java客户端,支持分布式,而且效率很高,淘宝的图片都存在TFS中的。你可以参考一下官方的wiki:TFS

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-08-21

建议使用fastdfs来做,分布式,负载均衡都支持,和nginx配合比较方便,提供各种语言接口,扩展方便,开发难度低

冯义军
冯义军
14.03K
编辑于 2013-03-28
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2013-03-28
  • 0 支持
    fastdfs是个不错的选择 – 农民工 2013-03-28
德问是一个专业的编程问答社区,请 登录注册 后再提交答案