高并发应对:淘宝CDN缓存服务器部署探秘
转自:http://server.chinabyte.com/6/12663506.shtml
“好,时间到,开抢!”坐在电脑前早已等待多时的宋兰(化名)一看时间已到2011年11月11日零时,便迫不及待地投身于淘宝网一年一度的大型网购促销活动——“淘宝双11”购物狂欢节。
宋兰不知道,就在11日零点过后的这一分钟内,全国有342万人和她一起涌入淘宝网。当然,她更不知道,此时此刻,在淘宝公司杭州总部的一间办公室里,淘宝技术部核心系统负责人兼高级研究员章文嵩和淘宝的一群技术高手们,正在黑板上纷纷写下注,看谁能最准确地猜中“淘宝双11”CDN流量峰值和全天的交易总额。
不过,看似轻松的氛围下,章文嵩和他的同事们内心多少有些忐忑:本次网购盛会对淘宝的各个服务系统而言都是一次巨大的考验,其中最大的考验则是对章文嵩所负责的,刚刚上线的,基于英特尔凌动(ATOM)处理器定制的低功耗服务器而新搭建的CDN系统。因为,虽然已有测试证明该CDN系统可以应付超大流量,但那毕竟是测试结果,真实情况会怎样,谁都没底。

淘宝技术部核心系统负责人兼高级研究员 章文嵩
24小时之后,淘宝网和淘宝商城高达52亿的交易额让淘宝笑了,而章文嵩的心也终于落定。
始自节能之需
对互联网相关技术比较熟悉的人大概都了解CDN。CDN全称Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
在淘宝,章文嵩表示,为了保障近四亿淘宝用户的购物体验,该公司已在全网部署了103个用于加速的CDN节点,单节点服务能力大于10Gbps,CDN Web Cache服务器数量超过4000台。
当然,支撑整个淘宝日常运营的远不止这几千台CDN web cache服务器。这些服务器每天的耗电量非常惊人,在淘宝网运营成本中占据了相当比重并逐年上升。因此,节约服务器用电量,已经成为不得不考虑的问题。而最直接的方法,就是在满足性能要求的前提下,采用比传统服务器省电的低功耗服务器。
低功耗服务器之所以比传统服务器的省电,主要在于采用了低功耗CPU。低功耗CPU在带来低功耗的同时,也损失了处理速度。因此,消耗CPU资源少的应用是低功耗服务器首要应用场景。而从淘宝整个服务器体系来看,满足这一要求的恰好是CDN Web Cache服务器,最终,该公司决定在CDN节点尝试使用定制低功耗服务器来替换传统服务器,并于2009年底正式启动绿色低功耗服务器定制项目。
“不只是攒个机器”
“定制低功耗服务器,表面上看是攒个机器,不过实际上并非如此简单。”章文嵩告诉记者。
市场上传统的低功耗处理器,其节省功耗的原理,是在原有高性能处理器的基础上,通过控制处理器在闲时的主频和耗电,同时简化乱序处理的逻辑模块,来减少不必要的消耗。但该方式受限于原有的高性能架构,整体功耗降低效果并不明显,特别是在IO密集型的业务上。而淘宝网用于静态内容加速的CDN Web Cache服务器,主要功能正是对静态的网页和图片进行读写操作,属于IO密集型业务。
“因此,针对IO密集型业务,我们需要寻找区别于以往传统的、更低功耗的处理器和服务器方案。”章文嵩说。
项目启动之初,淘宝选择某知名芯片平台供应商作为合作伙伴,并于2010年6月制作出原型机,但遗憾的是,该原型机未能通过线上测试。因此,2010年8月,淘宝选择在整机解决方案方面比较有经验的美国超微公司和英特尔。最终,在三方的努力下,基于凌动处理器D525的低功耗服务器定制成功,并于2011年6月开始在淘宝实施规模化部署。

淘宝产品经理 何燕锋
在杭州华数机房,负责该服务器定制的产品经理何燕锋带领记者实地参观了一处由该低功耗服务器所搭建的CDN节点机群。其中,一个2U空间里能放8台凌动低功耗服务器(8台服务器共享一个机箱),单台服务器功耗仅25W,也就是说,这8台低功耗服务器的总体功耗也才200瓦。这200瓦是什么概念呢?何燕锋指着该CDN节点机群中一台服务器,告诉我们说,那就是市面上的普通服务器,主要负责调度功能,其功耗为150W,占1U空间。两相对比,低功耗服务器的低功耗高密度的优势十分明显。
值得一提的是,章文嵩和他的同事发现,淘宝CDN缓存对象具有的特征是:18KB以下的对象数量占总数量的80%,而存储量只有不到40%;同时,80%被访问对象所占用的存储空间不到20%。这意味着“热数据”(访问频次高的内容)占的空间其实很小,而“冷数据”(访问频次低的内容)所需存储量很大。因此,淘宝特意为该低功耗服务器引入分层存储机制,所以单台低功耗服务器的硬盘其实是由一块80GB的SSD盘和两块500GB的SATA盘组成。这样,“热数据”存放在SSD盘上,“冷数据”就存放在SATA盘上,从而兼顾速度、容量与成本。而分层存储调度软件则由淘宝独立开发。
2011年2月,该凌动低功耗服务器投入量产。随即,淘宝人又紧锣密鼓地开始了系统优化工作。章文嵩告诉记者,在没有优化之前,单台低功耗服务器的QPS(每秒查询率)数大约在900左右,离他们既定的目标(1000QPS)还差一点。然而,当他们将硬盘访问模式改为ACHI/RAID之后,QPS立刻跃升至1300;再通过优化IO、网络、SMP affinity等工作,QPS数到达1700,大大超过原来的预期。
“我们正在重写一个轻量级Cache软件,希望能将OPS数提升到1900。” 章文嵩说。
据悉,目前淘宝一共部署了十多个低功耗CDN节点机群,共部署了约800台凌动低功耗服务器。大部分凌动节点都服务到了上联链路的限制值——10Gbps,此时的单台低功耗服务器的服务QPS数在1200以上,而CPU负载不超过70%,整体的I/O也不过50%左右,且整体缓存服务的响应时间都在20毫秒以下。
“本次淘宝‘双11’购物狂欢节,我们CDN承受了全网近90%以上的流量,这一天的CDN带宽峰值到达800多Gbps,可以说真正通过了考验。”章文嵩说。之后的淘宝“双12”带来了更大的流量“洪峰”,淘宝CDN亦安然承受。
此外,何燕锋亦透露,他们还拿到了英特尔SandyBridge(15W)低功耗处理器(英特尔在微服务器上的主打处理器之一)样片,并在CDN缓存应用上进行了性能测试。
“SandyBrige(15W)低功耗处理器采用双核架构,主频只有1.2GHz,但L3的缓存有3MB。如果单看主频的话,很难想象这样的处理器能有多么卓越的性能,测试结果却出乎意外,单台服务器的性能能够到4500QPS, 几乎是我们现在这款低功耗服务器的3倍,而功耗则相差不到2W。”何燕锋说。
因此,只要该款处理器价格合适,淘宝将在下一代低功耗服务器中采用SandyBrige(15W)处理器。
心系环保、践行开源
“我们定制服务器跟传统的定制不一样。传统的定制是一种买断形式,例如,我向你(厂家)定制了服务器,你不能卖给第三方。而我们淘宝是一种开源的心态,我们觉得尽管这款低功耗服务器是针对淘宝的CDN需求而定制,但低功耗服务器环保节能,同时CDN系统是整个互联网服务的基础,所以淘宝将它开源出去并鼓励厂家将这款产品卖给别人,一方面促进整个互联网“绿色”服务器产业的发展,另外一方面也彰显淘宝的开发策略。”何燕峰告诉记者。

淘宝部署在杭州华数机房的CDN节点
需要指出的是,淘宝低功耗服务器定制项目在业界是相当超前的,其价值不言而喻。另一方面,虽然目前国内外有不少研究机构、企业正在研发低功耗服务器,但象淘宝这样将低功耗服务器项目(设计规格和应用数据)无私开源的,用章文嵩的话来说:“全世界也是第一家 ”。
并且,淘宝不只是简单地将其低功耗服务器定制项目开源,而是以此为出发点,联合英特尔、超微等厂商,共同发起了“开源绿色计算”项目(http://www.greencompute.org/)。章文嵩强调,该项目的目标是推动互联网整体硬件基础设施(包括服务器、网络设备、IDC机房、机架和电源等)的节能环保。
目前在开源绿色计算网站上还只有凌动低功耗服务器这一款定制化的“绿色”产品,章文嵩殷切地希望更多的同行能加入进来,共同推动“绿色计算”产业的发展。
高并发应对:淘宝CDN缓存服务器部署探秘的更多相关文章
- 淘宝CDN系统架构
存储与架构分论坛上,淘宝网技术委员会主席,淘宝网核心工程师章文嵩向我们详细介绍了淘宝网图片处理与存储系统的架构.章文嵩博士的演 讲日程包括了 淘宝的整个系统架构.淘宝图片存储系统架构,淘宝网 ...
- 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度
2011年11月26日 ? Web服务器架构 ? 评论数 2 案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现 ...
- m2014-architecture-imgserver->利用Squid反向代理搭建CDN缓存服务器加快Web访问速度
案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户打开ww ...
- [转]高并发访问下避免对象缓存失效引发Dogpile效应
避免Redis/Memcached缓存失效引发Dogpile效应 Redis/Memcached高并发访问下的缓存失效时可能产生Dogpile效应(Cache Stampede效应). 推荐阅读:高并 ...
- Linux下利用Shell使PHP并发采集淘宝产品
上次项目中用到<<PHP采集淘宝商品>> 此方法有一个缺点,就是执行效率问题.一个商品采集平均需要0.8秒.那10000个商品采集完需要2个半小时. 首先想到的解决办法是并发. ...
- Nodejs 高并发长链接TCP链接的服务器设计问题
最近有个项目比较棘手,nodejs的tcp服务,目前的服务器支持3W左右的客户端连接,但是客户希望能够支持30W左右,原先的模型是让客户端请求一个地址分发服务器,然后再tcp链接到不同的地址上实现高并 ...
- 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...
- 淘宝开源Web服务器Tengine安装教程
简介Tengine是由淘宝核心系统部基于Nginx开发的Web服务器,它在Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,淘宝商 ...
- 浅谈android中只使用一个TextView实现高仿京东,淘宝各种倒计时
今天给大家带来的是只使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.近期公司一直加班也没来得及时间去整理,今天难得歇息想把这个分享给大家.只求共同学习,以及自己兴许 ...
随机推荐
- Change Data template dynamically
1. Attached Property bound to task state. Any change will dynamically set data template.2. Visual St ...
- How to deal with "Could not find component on update server. Contact VMware Support or your system administrator." in Vmware.
手动将vmware安装目录下的vmtools镜像文件,windows.iso文件放到虚拟机的光区里. 再进入虚拟机的系统,在系统里打开光盘进行安装
- 字符串分隔 ->连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100 ...
- 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装
第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...
- e832. 从JTabbedPane中移动卡片
To move a tab, it must first be removed and then reinserted into the tabbed pane as a new tab. Unfor ...
- C# 计算代码运行时间
Stopwatch watch = new Stopwatch(); watch.Start(); int num = myhelper.MySQLExecuteNonQuery(comlist); ...
- 数据源(HikariCP)
HikariCP 是一个高性能的 JDBC 连接池组件.下图是性能的比较测试结果: 自从看到了这张图,我就对于我之前一直在使用了 c3p0 产生了深深的怀疑,迫切的期望得到对应的数据来优化我的代码. ...
- com.panie 项目开发随笔_爬虫初识(2017.2.7)
(一) 本章打算研究一下爬虫.我想用爬虫简单的爬取几篇文章,以及收集一下常用网站的信息. (二) 以开源项目 JAVA爬虫 WebCollector 为源码研究.在此基础上改为适合自己项目的代码. ( ...
- 环境变量PATH/cp命令/mv命令/文档查看cat/more/less/head/tail
2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看cat/more/less/head/tail which rmdir 可以查到命令的路径 例如: ls 命令是 ...
- VS2010 正则批量替换头文件路径
最近在项目实践中,需要统一对工程头文件进行重构,具体要求是,将之前 #include "../../abc/def.h" 类似的头文件引用路径 替换为#include &q ...