IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

淘宝图片存储架构

技术 总结 记录 生活 工作 2010-06-28 23:55:50 累计浏览 10,961 次
本机暂存

    今天中午花一小时看了下章文嵩博士写的<淘宝海量图片存储与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. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 浅析http协议、cookies和session机制、浏览器缓存 (累计阅读 17,446)
  2. 从谷歌宕机事件认识互联网工作原理 (累计阅读 8,746)
  3. Buffer和cache的区别是什么? (累计阅读 7,940)
  4. TT的作者出新作品鸟:kyoto tycoon (累计阅读 7,953)
  5. 学习:一个并发的Cache (累计阅读 6,103)
  6. PHP 性能优化技巧-google (累计阅读 6,042)
  7. fatcache源码浅析 (累计阅读 6,052)
  8. 当网站使用CDN后获取客户端真实IP的方法 (累计阅读 5,972)
  9. 分享会-高性能nosql数据库redis (累计阅读 5,733)
  10. [调优] Squid 不同版本的性能对比 (累计阅读 5,591)