包云岗 。《数据中心与黑客帝国》(上)

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




包云岗中科院计算所副研究员,工作于计算机体系结构国家重点实验室与先进计算机系统研究中心,目前主要从事高效数据中心(Resource Efficient Datacenter)体系结构方面的研究。个人主页: http://asg.ict.ac.cn/baoyg/ ,新浪微博: @包云岗。


【8月13日主题分享精彩回放】

今天交流的话题是“数据中心与黑客帝国”,其实本来题目应该叫“数据中心与Matrix”,这里的Matrix是8月8号刚获得百度最高奖100万美元的“百度通用资源管理项目”的代号,但大家可能很自然地就会想到《黑客帝国》这部电影。于是@杨静Lillian 老师便将交流话题升级了一下,变得科幻了很多。但说实话,对于《黑客帝国》这部电影,虽看过但却未深究过,所以科幻话题更多是还是希望大家能多参与讨论。

我们还是先聊聊这个获百度最高奖的Matrix,这个项目是由百度数据中心管理团队开发的,要解决的是一个世界级难题(具体稍后解释)。这其实是他们数据中心管理团队第二次获得最高奖,2012年他们开发的“服务器潜能激发技术”也获得了百度最高奖。可见,百度对数据中心管理技术非常重视,因为正是百度数据中心的几十万台服务器在支撑着每年数百亿的收入(2013年总营收为320亿,2014年上半年就已达215亿)。

那百度的Matrix要想解决的是什么样的世界级难题呢?宏观上来讲,就是成本与收益之间的平衡,如何用尽可能少的成本来实现尽可能大的受益。具体到数据中心这个场景下,就是数据中心自身的成本与其所能带来的收益之间的平衡。

数据中心其实已经成为我们生活的一部分。比如我们使用各种手机App上网,如下图,是一个典型的“前端移动计算+后端云计算”的场景。我们在手机上触按屏幕后,手机就会将触按这个动作转变为一个网络请求,发送到后端运行云应用的数据中心进行处理,然后再通过网络传回来,在手机屏幕上显示。这个过程大概需要2~4秒,其中一大半时间都是消耗在数据中心内。也就是说,正是数据中心在支持着全世界数十亿网民的各种请求。

那让我们看一下几大著名公司的数据中心规模。2013年时任微软CEO的斯蒂夫.巴尔默在全球合作伙伴大会的主题演讲中提到,“我们(微软)的数据中心已超过100万台服务器,谷歌比我们更大一些,亚马逊比我们稍小一点。Yahoo!和Facebook等其他企业大概10万台的量级。所以真正理解和管理如此大规模数据中心、并提供公有云服务的企业是屈指可数的。”其实国内的几家互联网巨头也都拥有超过20万台服务器的规模,并且朝着100万规模快速发展。

那么100万台服务器的成本是多少?这里我们参考一位被称为文艺复兴式的黑客——詹姆斯·汉密尔顿在博客中的一些数据。汉密尔顿是负责亚马逊 AWS数据中心的杰出工程师,之前在微软负责Bing的数据中心。2013年《连线》网站上曾经有一篇文章《亚马逊为何聘用一名修车工管理云帝国?》(http://xw.qq.com/c/tech/20130221000114 )专门介绍了这位开着游艇掌管亚马逊价值数十亿美元数据中心的极客。

在微软CEO巴尔默透露出微软拥有100万台服务器数字后,詹姆斯·汉密尔顿写了一篇博客《Counting Servers isHard》(http://perspectives.mvdirona.com/2013/07/17/CountingServersIsHard.aspx),估算来估算100万台服务器的成本:如果每台服务器很便宜,只需2000美元的话,那么购买服务器需要20亿美元(约125亿人民币);此外还需要配备至少300MW的供电系统,还需要建15~30个机房。这些加起来大概需要22.5亿美元。所以100万台服务器的总建设成本大概是42.5亿美元(约260亿人民币)。

这些只是建设成本,另外还需要维护和服务器更新成本,包括每年要消耗掉约26亿度电(约15亿人民币),服务器一般3~5年就会淘汰,需要购置新服务器。所以,就算5年更新一轮,那么仅电费就需75亿,服务器更新又需要125亿。这相当于5年的运行维护成本是200亿,每年40亿。当然,这个估算还是比较便宜的服务器,其实一般用于计算的服务器价格都会在2万以上,所以仅购买服务器成本就会超过200亿。

但这么大规模的数据中心的利用率怎么样呢?我们来看一些谷歌公布的数据。下面这个图是2006年谷歌的5000台服务器的平均CPU利用率分布,这些服务器运行的是像搜索、gmail等在线应用。从这个图中可以看到这些服务器的平均CPU利用率约为30%。

也许大家会觉得2006年的数据已经太旧了,那我们来看一下2013年的数据。下面这个图是2013年1-3月份谷歌的2万台运行在线应用的服务器平均CPU利用率分布图。可以看到,7年过去了,并没有很显著的提高,仍然只有30%左右。这意味着,假设100万台服务器中有50万台利用率只有30%,那么相当于5年100亿人民币的运维成本中有70亿是浪费了,只有30亿才是真正产生了效益!

事实上,谷歌的数据中心技术是全世界领先的,他们开发了很多数据中心管理技术才能将“在线应用”(加引号埋个伏笔在这)服务器CPU利用率提高到了30%。而更多的企业还达不到这个水平,比如麦肯锡估计整个业界服务器平均利用率大约是6%,而Gartner的估计稍乐观一些,认为大概是12%。这两个数字跟我了解到的也基本吻合,比如国内某银行的数据中心利用率大概就是5%左右,而印度塔塔公司曾公布过他们的服务器利用率大概是12%。

我们都知道云计算。云计算不正是可以通过虚拟化技术在一台服务器上跑多个虚拟机来提高CPU利用率吗?为什么不用呢?其实谷歌等企业早就采用了类似的容器技术,2013年的那2万台服务器上已经是多个应用混合在一起运行后得到的结果了。事实上,谷歌将数据中心分为了两类,一类就是上面的那些包含在线应用的数据中心,CPU利用率只有30%;而另一类是不包含在线应用,专门运行MapReduce等批处理数据中心,这些数据中心的CPU利用率其实达到平均75%,但在谷歌只占一小部分,运行在线应用的数据中心才是更典型。

我们会自然的问:为什么谷歌在线应用数据中心CPU利用率只有30%,但离线批处理数据中心却可以达到75%?有没有可能把这两类数据中心统一起来,使整体利用率提高到75%?那就能省下一半的服务器。对于100万规模的数据中心,那就是省下50万台,就可以省下100亿的运维成本了。

但是对于这个问题,答案很可能是“基于现有的技术还做不到!”因为数据中心运维不仅需要考虑成本,更需要考虑收益。

前面提到的当前流行的虚拟化技术可以通过让多个应用或虚拟机共享一台机器,从而提高服务器资源利用率。但是这种共享却会带来资源竞争,进而干扰应用程序的性能,影响在线应用的响应时间。而快速的服务响应时间正是衡量服务质量(Quality-of-Service,QoS)的关键指标,是让用户满意、留住用户的关键。

现任Yahoo!的CEO的Marissa Mayer曾经在谷歌做过一个实验,把页面上的搜索结果从10个增加到30个,以希望能让用户一次浏览到更多的信息。这样搜索结果的返回时间从0.4s增加到0.9s。但是他们发现,广告收入下降了20%!所以,Mayer对提升在线业务的用户体验的经验就总结为一条:速度为王(Speed Wins)!这也是大家可以看到为什么最近谷歌要投资3亿美元来建跨太平洋海底光缆,还有以前的千兆网入户等,因为这其实是可以提升用户体验,为他们带来更多的受益。

不仅仅是谷歌,微软、亚马逊其实也都做过类似的实验。2009年微软在Bing搜索引擎上也开展实验,发现当服务响应时间增加到2000ms时,每个用户带给企业的收益下降了4.3%。由于该实验对公司产生了负面影响,最终不得不被终止。而亚马逊也发现其主页加载时间每增加100ms就会导致销售额下降1%,这对于年营收达到700亿美元的亚马逊而言,就是7亿美元的损失。

所以,当前数据中心为了保障用户请求的服务质量,不得不采用过量提供资源的方式,哪怕是牺牲了资源利用率。具体表现为两种形式的资源浪费,一种是关键应用独占数据中心。国内的企业大多数还是采用一个专用的数据中心专门运行某个或某几个在线应用,其他作业运行在其他数据中心上,以减少对在线业务的干扰。另一种是扩大资源需求。谷歌其实早就采用了先进的数据中心管理技术,运行多个应用混合运行在一台服务器上,从而提高服务器利用率。但他们发现这样做对那些离线作业是有效的,因为用户提交后只要能出结果就行,哪怕慢一点也可以。但是对于那些在线应用开发的程序员,比如gmail开发人员,他们知道自己的程序可能会和其他人的应用一起运行,所以就会在一开始的时候就夸大资源需求,但实际使用的远少于申请的资源。这种现象是在共享环境下很常见的,不光谷歌,其他公司也是如此。比如下面这个图,就是Twitter在使用了Berkeley开发的Mesos的数据中心上运行了一个月的情况,红色部分是申请的,大概占到70%,绿色为实际使用的不到20%,导致大量计算资源浪费。

所以,小结一下,当前数据中心正面临资源利用率与应用服务质量之间的矛盾,一方面在数据中心服务器上同时运行多个应用能有效提高资源利用率,节省成本;但另一方面多个应用共享资源又会出现相互干扰,影响应用的服务质量,降低营收。而目前数据中心为了保障营收,而牺牲了资源利用率,造成大量成本浪费。粗俗估算一下,最近微软裁了1万多员工,以节省每年约10亿美元的人员开支。但如果他们的100万台服务器利用率能提高一些,也能省下个几亿美元。

不过,国内企业之前还没有这方面的技术,利用率很低,很多甚至是个位数的。而百度的Matrix项目,直接采用了与谷歌目前最先进的数据中心管理框架相似的设计理念,朝这个方向迈出了一大步,使在线数据中心利用率得到有效提升,接近谷歌的水平。据百度内部消息,随着Matrix在百度内部的部署,今年预计就能为百度省下超过5亿的成本,而随着百度数据中心规模不断扩大到上百万台服务器,Matrix对于百度的意义将更大。所以,Matrix获得100万美元的最高奖,当之无愧!

但既想要保障在线应用的服务质量,又想要提高数据中心资源利用率,这是一个世界级难题,即使数据中心技术最领先的谷歌也还只能做到30%的利用率。而学术界也在探索,比如前面提到的Berkeley开发Mesos就是一个例子。但这些技术都无法解决一个更根本的问题,那就是底层硬件上的相互干扰。虽然现在的服务器内部的CPU核心越来越多,理论上可以同时运行更多的应用,但是其他资源都比如CPU内部的高速缓存、内存带宽等,还是处于一种“无管理的共享”状态。

要理解“无管理的共享”状态,可以用城市交通管理作为例子。传统的数据中心服务器内部就如没有管理的城市道路交通,没有多个车道、没有红路灯、没有交通规则。可以想象,这必然会造成大量的冲突和混乱,也会导致一些关键车辆的通行(如救护车、消防车等)无法得到保障。因此当前数据中心保障在线应用服务质量的手段,其实是一种粗放的交通管制方式——因为管理部门不能区分车辆类别,所以只要得知某些道路上会出现关键车辆,那么就对其他车辆实施限行。这种方式显然极大地降低了道路的利用率。(待续)

(2个打分, 平均:5.00 / 5)

雁过留声

“包云岗 。《数据中心与黑客帝国》(上)”有5个回复

  1. guo 于 2014-09-25 8:30 下午

    good info based on statistics data with technology inside.

  2. pan 于 2014-09-26 12:37 上午

    gif 为啥不显示

  3. abc 于 2014-09-26 2:55 上午

    30%是个很合理的利用率,已经很高了。

  4. Passer 于 2014-10-07 8:16 下午

    cpu占用率 30%可能内存带宽或者磁盘已经满负荷了。。。说到底还是软件设计太粗糙,一个设计良好的实时软件系统,端到端延迟在资源满足要求的情况不应该受到其宿主机器其他工作负载的影响。

  5. 糊涂 于 2014-10-08 12:46 上午

    注意到他穿的那件白色防静电工作衫