IT技术博客大学习 共学习 共进步

淘宝图片存储架构

技术 总结 记录 生活 工作 2010-06-28 23:55:50 浏览 10,843 次

    今天中午花一小时看了下章文嵩博士写的<淘宝海量图片存储与CDN系统>,没有做过大容量的存储系统,也没有做过分布式的应用,只是从学习的角度去思考下未来可能学习的方向和一些点.

    对比公司的图片服务,其实在技术实现上都有共性:

    1:imageserver:

    (1)缓存和图片处理

    具体使用apache和nginx都无所谓,imageserver的负载在于图片的转换,以及部分中间缓存的读取.

    GraphicsMagick可以未来尝试使用,另外为提高imageserver的命中率通过lvs做七层的定位.

    最核心的是使用nginx编写的图片处理和具有缓存功能的模块.

    我们目前使用的是本地文件做缓存,稍微差了点.

    (2)压缩比

    imageserver核心的一个功能是图片处理,对于专业类的图片网站,是比较重视图片质量的.一般对于后缀名和动态gif压缩的时候都需要注意

    (3)L1缓存

    一般imageserver称为L1缓存,注意其的图片索引策略和读取磁盘方式.

    2:TFS

    图片服务最重要的就是后端的存储系统,有这么几个特点:

    (1)容量的无限增长.

    (2)读取量极大,高随机iops和吞吐量.

    (3)后端存储的备份,容灾,迁移策略.在数据量激增的情况下能够比较方便的扩容.

    (4)均衡策略,比如数据具体的存储和读取策略

    类似这样的需求一般可以购买高端的阵列来解决(我们公司就是这样做的),我想tfs的存在主要在于成本的解决.

    其中有二个重要特性:

    (1)元数据的使用:主要是图片meta数据同具体存储位置的定位,一般可以通过memcachedb和mysql来解决.

    元数据的存在能够是存储量大大减少(比如很多用户都会上传同样的图)

    (2)小文件存储的一些特点,经常听到块的概念(比如memcached)

    成本也是tfs存在的主要原因:主要通过普通pc做横向扩展,普通的exts文件系统,raid5做数据冗余

    查看下tfs2的计划:主要还在于锦上添花的功能,比如分配存储,分级存储机制...

    3:CDN

    开始有点疑惑,一直认为这是图片架构的一部分,其实是独立于图片架构的,说到底是前端的Squid.

    仔细看CDN,其实主要解决的是下面几个问题:

    (1)节点的可伸缩性

    (2)调度系统

    (3)灵活性:主要使用一致性hash

    (4)Squid的内存优化策略和淘汰策略优化

    其中比较有特点的是:

    (1)sendfile发送方式和SSD的使用.

    CDN主要的特点:

    (1)命中率

    (2)定制化和快速部署,离用户更近的小节点.

    4:产品层面,技术层面感兴趣的几点:

    (1)明天图片上传数量,平均图片大小,普遍图片策略

    (2)L1,L2和存储设备的iops和带宽,吞吐量.容量大下

    (3)各级缓存的命中率.

    几个概念:

    iops:每秒i/o操作次数

    sas:设备读取接口方式

    rpm:每分钟磁盘转速

    DELL R710

    后记:

    对于大型网站,主要处理的数据,所以一个后端存储系统的重要性不言自明.

建议继续学习

  1. HFile存储格式 (阅读 15,822)
  2. 图片动态局部毛玻璃模糊效果的实现 (阅读 14,701)
  3. 我对技术方向的一些反思 (阅读 11,144)
  4. 海量小文件存储 (阅读 9,702)
  5. 解决IE6从Nginx服务器下载图片不Cache的Bug (阅读 8,221)
  6. HBase技术介绍 (阅读 7,942)
  7. 存储基础知识之——硬盘接口简述 (阅读 7,404)
  8. 精于图片处理的10款jQuery插件 (阅读 7,260)
  9. When we`re only No.2, we try harder之聊天表情设计小探讨 (阅读 7,122)
  10. 通过php+imagick 创建PDF图片预览 (阅读 6,983)