二、事例:淘宝图片存储与CDN系统
图片存储与CDN系统全貌
2007年之前的图片存储系统
商用产品无法满足需求
•系统需求
淘宝的影响越来越大,数据的安全也更加重要
数据存储量以每年二倍的速度增长(即原来的三倍)
•商用存储产品
对小文件的存储无法优化
文件数量大,网络存储设备无法支撑
连接的服务器越来越多,网络连接数已经到达了网络存储设备的极限
扩容成本高,10T的存储容量需要几百万¥
单点,容灾和安全性无法得到很好的保证
TFS1.0简介
TFS1.0 2007年6月 淘宝自主开发的分布式的文件系统, TFS(Taobao File System)1.0上线运行
主要解决海量小文件的分布式存储
集群规模:200台PC Server(146G*6 SAS 15K Raid5)
文件数量: 亿级别
系统部署存储容量: 140 TB
实际使用存储容量: 50 TB
单台支持随机IOPS200+,流量3MBps
TFS1.0的特性
•集群由一对Name Server和多台Data Server构成
•Data Server运行在挂很多硬盘的Linux主机上
•以block文件的形式存放数据文件(一般64M一个block)
•文件名内置元数据信息,用户自己保存TFS文件名与实际文件的对照关系–使得元数据量特别小
•如T2auNFXXBaXXXXXXXX_!!140680281.jpg,名字中含有逻辑的block_no和object_no等
•block存多份保证数据安全
•利用ext3文件系统存放数据文件
•磁盘raid5做数据冗余
TFS1.3 2009年6月 TFS(TaobaoFile System)1.3上线运行 集群规模(2010.8.22)
440台PC Server (300G*12 SAS 15K RPM) + 30台PC Server (600G*12 SAS 15K RPM)
文件数量:百亿级别
系统部署存储容量:1800 TB
当前实际存储容量:995TB
单台Data Server支持随机IOPS900+,流量15MB+
目前Name Server运行的物理内存是217MB(服务器使用千兆网卡)
2010下半年开始部署PC Server (1T SATA * 12)
TFS1.3的特性
TFS1.3提供了一些重要的功能特性
所有的元数据全部都内存化
清理磁盘空洞
容量和负载的均衡策略
平滑的扩容
数据安全性的冗余保证
几秒内完成Name Server故障自动切换
容灾策略
性能大幅提升
淘宝CDN系统介绍
•CDN服务的图片规模(2011.5)
–约500T容量的原图+ 500T容量的缩略图
–约573亿左右的图片数,平均图片大小是17.45K
–8K以下图片占图片数总量的61%,占存储容量的11%
•CDN部署规模
–55个节点,部署在网民相当密集的中心城市
–每个节点目前处理能力在10G或以上
–CDN部署的总处理能力已到550G以上
–目前承载淘宝流量高峰时318G流量
CDN节点的架构对比-老架构
CDN节点的架构对比-新架构
CDN节点的架构对比
•流量分布均匀性:所有的频道统一调度到128台squid,而不是将squid按频道分组,可提高命中率2%以上
•扩展能力:在一个VIP上新架构可以扩展到近100G的流量(当然要用万兆网卡)
•灵活性:一致性Hash调度方法使得增加和删除服务器非常方便,只有1/(n+1)的对象需要迁移
Squid改进和优化
•在COSS存储系统基础上实现了TCOSS,FIFO加上按一定比例保留热点对象,支持1T大小的文件
•Squid内存优化,一台Squid服务器若有一千万对象,大约节省1250M内存,更多的内存可以用作memory cache
•用sendfile来发送缓存在硬盘上的对象,加上page cache,充分利用操作系统的特性
•针对SSD硬盘,可以采用DIRECT_IO方式访问,将内存省给SAS/SATA硬盘做page cache
•在Squid服务器上使用SSD+SAS+SATA混合存储,实现了类似GDSF算法,图片随着热点变化而迁移
热点迁移的数据对比(1)
•简单按对象大小划分:小的进SSD,中的放SAS,大的存SATA
•SSD + 4 * SAS + SATA上的访问负载如下:
[root@cache161 ~]# iostat-x -k 60 | egrep-v -e “sd.[1-9]”
其中:黑色为SATA,绿色为SSD,红色为SAS
4块SAS硬盘上的访问量和超过SSD硬盘上的访问量
热点迁移的数据对比(2)
按对象访问热点进行迁移:最热的进SSD,中等热度的放SAS,轻热度的存SATA
•SSD + 4 * SAS + SATA上的访问负载如下:
[root@cache161 ~]# iostat-x -k 60 | egrep-v -e “sd.[1-9]”
其中:黑色为SATA,绿色为SSD,红色为SASSSD硬盘上的访问量是4块SAS硬盘上访问量之和的5倍以上,SAS和SATA的硬盘利用率低了很多
节点运行情况(1)
•节点规模:32台DELL R710服务器
•逻辑结构:2 LVS + 32 Haproxy+ 64 Squid
•时间:2009.12.21上线运行
•理论最大负载能力:16Gbps以上
•单台R710服务器可到500Mbps以上的小图片流量
•单squid最大object数目:1800万
•Cache请求命中率:97%
•Cache字节命中率:97%
•最重要的是命中率提高,大大改善用户的访问体验
节点运行情况(2)
•节点规模:30台DELL PowerEdge2950服务器
•逻辑结构:2 LVS + 30 Haproxy+ 60 Squid
•时间:2010年5月上线运行
•理论最大负载能力:12Gbps
•单台2950服务器可到400Mbps的吞吐率
•单台存储:160G SSD + 143G SAS * 4 + 1T SATA
•单squid最大object数目:3000万
•Cache请求命中率:97.5%
•Cache字节命中率:97.5%
•最重要的是命中率提高,大大改善用户的访问体验
经验
•商用软件不能满足大规模系统的需求
•采用开源软件与自主开发相结合,有更好的可控性和更大的优化空间,系统上有更高的可扩展性
•规模效应,研发投入都是值得的