绿色数据中心之“弹性计算”方案研究
- 来源:中国信息界•智慧城市 smarty:if $article.tag?>
- 关键字:大数据,弹性计算,百度,淘宝 smarty:/if?>
- 发布时间:2014-09-01 08:51
“弹性计算”在实现方面面临着诸多困难,然而由于其在绿色数据中心的建设过程当中起着非常重大的现实意义,因而对这一课题的研究显得极其必要。对绿色计算和与之相宜的弹性计算解决方案进行深入探讨是大数据时代背景下的信息发展的重要一环,对大数据的有效使用和相关的信息技术的进一步应用都有着重大意义和深远影响。
随着大数据时代的到来,现代企业越来越依赖于拥有强大计算能力和数据存储能力的数据中心。例如,IBM在今年启动建设15个数据中心,预计花费12亿美元;微软投资7亿美元扩展其xbox live数据中心的容量和性能;脸书和谷歌更是将分别投资15亿美元在美国爱荷华州建设大型的数据中心。如此海量的服务器同时运行将消耗大量的电力资源。据统计,2013年,全美服务器的总耗电量已超过100亿美元。随着大数据的持续升温和数据中心如火如荼的建设,其带来的能源消耗也迅速增加,数据中心的节能减排已成为一个迫在眉睫的问题。
数据中心硬件和软件的复杂性决定了不可能有一种单一的“良药”轻松解决能耗问题。各个环节上的团队必须通力协作,才有可能建设一个真正的绿色数据中心。首先,在数据中心选址时,在不严重影响服务质量的情况下,决策团队应尽量选择气候干燥寒冷,电力资源丰富的地区。脸书公司已成功在瑞典建立100%依靠自然环境温度制冷的数据中心,从而节省了约30%的电力消耗。其次,在数据中心内部排列服务器机柜时,应充分考虑整个房间冷热空气的流向,最大限度的高效利用制冷设备。目前较为常用的排列方式是将数据中心内部分隔成交替的“冷”走道和“热”走道,所有机柜统一得将进风口面对“冷”走道、出风口面对“热”走道。另外,在选取服务器的配件时,应尽量选择性能能耗比较高的型号。从这个角度上来说,2.5英寸的硬盘驱动器就要优于3.5英寸的硬盘驱动器。最后,最复杂也是最多样的一个环节便是数据中心软件的开发与改进。
在一个数据中心中,往往存在这成百上千种不同的软件,服务不同的应用,完成不同的任务。其中的许多软件由于需要处理大量的数据,或者实现某种级别的容错性,必须以分布式的方式存在。但是在大多数情况下,一个软件所需要处理的数据量是随着时间而变化的。简单地让所有的服务器在任何时刻都以最高性能运行必然会带来不必要的能量开销。在理想情况下,我们应根据当前的用户请求数量,动态地调节开启服务器的数量,需要多少就开启多少。“弹性计算”的概念也应运而生。
“弹性计算”说起来很简单,但是具体实现却非常困难。在大数据时代,许多软件以数据位本,以数据位中心。可是归根结蒂,海量的数据需要被划分成小型的数据块,从而可以存储在各个服务器上。数据在服务器上落地生根,关掉部分服务器也等同于抹去了部分数据。因此,我们需要非常仔细谨慎地设计“弹性计算”的策略,在保证数据不丢失的基础上,动态调节运行服务器的数量以节省电能。数据中心的软件千千万,本文选取经典的数据中心缓存层作为切入点,重点介绍分布式弹性缓存的设计与实现。
在当今的网络应用中,例如百度,淘宝,人人网等,后端往往被设计为一个多层次的结构。一个经典的方案由逻辑计算层,缓存层,数据存储层组成。得益于其低廉的价格,硬盘常常被用来存储大量的数据。可是硬盘也有起明显的缺点,读写速率低,寻址时间长等。内存虽然造价远远高于硬盘,它却可以提供快速和高效率的数据读写。因此,技术人员常常将小部分的热点数据保存在缓存层中,以加快请求的响应速率和减少对硬盘层输入输出带宽的需求。缓存层本身的属性要求其数据寻址时间也必须足够的快。如今已有MemCache等软件解决了单机内存数据的快速存储。数据被组织成“键-值”对的格式,MemCache支持写入“键-值”对,和给予“键”读取值等操作。
可是一台服务器远远不足以解决对大数据缓存的需求。在现实的数据中心中,往往有数以千计的服务器共同组成缓存层。如何将所有数据以负载均衡的方式存储在所有的服务器上是一个重要的问题。在所有服务器都保持运行时,这一问题并不复杂。我们需要一种散列函数,根据“键”计算出一个数字,再用这个数字去模运行服务器的总数,即可得到该“键”所对应的值需要保存的服务器编号。只要这个散列函数本身可以均匀地将“键”对应到一个足够大的数值区间上(例如,SHA-1散列函数),我们既可以保证整个缓存层的负载均衡。
将弹性计算的概念引入缓存层,一个简单的做法是直接调整运行服务器的数量。但是这种做法将会带来一个严重的问题。假设某个“键”所对应的散列值为i,有n台正在运行的服务器,那么“键”所对应的“值”即存储在编号为i%n的服务器上。可是增加一台缓存服务器之后,同样的“键”所对应的“值”需要被保存到i%(n+1)上。也就是说,将有绝大部分的数据需要被重新分配到不同的缓存服务器上。而需要那部分数据的请求则必须要到达硬盘数据存储层,导致服务时延的急剧上升。如下图所示,我们做了一个小型的实验以重现这一现象。一开始时,我们用10台缓存服务器组成一个缓存层,用另外5太机器产生模拟的用户请求。每500秒会有一台缓存服务器被关掉,同时更改取模操作的基数。图中蓝色的线记录了20秒内的平均服务时延,红色的线显示了当前正在运行的服务器的数量。我们可以清楚的看到,每当有服务器被关掉而更改取模操作的基数时,用户所体验到的服务时延的长度上升了两个数量级。
为了避免这种现象,我们可以使用一致性散列函数来保证只需要移动被关掉的服务器上那部分数据。在一致性散列函数中,数据“键”和服务器编号被随机的分配到同一个散列环中。图1展示了一个简单的例子。左边的散列环中有三个服务器和六个数据点。三个服务器将整个散列环划分为三个圆弧,每个服务器管理落在其逆时针方向上圆弧的数据点。在这个例子中,服务器A管理3个数据点,服务器B管理2个数据点,服务器C管理1个数据点。到目前为止,基于一致性散列的方案和基于取模操作散列的方案似乎并没有什么不同。可是,如右侧的散列环所示,当一台新的服务器D添加进来时,我们只需要将两个数据点从A服务器上移动到D服务器上即可。避免了重新分配整个缓存数据集。
当然,也许您已经注意到了,这种方案并无法保证所有负载均衡。由于服务器对应的点是随机的分配到圆环上的,有可能倒是一些服务器负责的圆环长一点,另外一些服务器负责的圆环短一点。为了避免这种情况,我们进一步引入虚拟服务器的概念以达到负载均衡。我们为每一台物理服务器分配不同数目的虚拟服务器,然后将所有的虚拟服务器通过散列函数分配到散列环上。每个虚拟服务器负责其逆时针方向的圆弧上的数据点,而每个物理服务器负责其对应的所有虚拟服务器所负责的数据点。当加入第i物理台服务器时,我们为其添加i-1台虚拟服务器(特殊情况是当i=1时,为其添加1台虚拟服务器),对应到之前的i-1台物理服务器。每台虚拟服务器只需要从其对应的服务器里中截取长度为1/i(i-1)的圆弧,即可以保证所有的物理服务器都负责相同长度的圆弧,从而达到负载均衡。
以上简略介绍了绿色计算的背景,并深入讨论了一种针对于分布式缓存系统的“弹性计算”方案。值得注意的是,“弹性计算”仅仅是建设绿色数据中心所需技术的冰山一角,而“有弹性”的分布式缓存系统又仅仅是“弹性计算”的九牛一毛。真正实现数据中心的绿色节能仍是一个任重而道远的任务。
文/李珅
