淘宝开放低耗服务器设计规范

  • 崔康

2011 年 11 月 4 日

话题:最佳实践架构DevOps语言 & 开发

淘宝的开源项目一直保持着较快的发展,InfoQ 中文站先后介绍过其开源平台数据存储系统 Tair文件系统 TFS等,最近淘宝又推出了“开源绿色计算项目”,将 CDN 所用的低耗服务器的设计规范(设备主板、机箱和电源、测试报告)对外发布,在技术社区中引起了很好的反响。

众所周知,淘宝的海量数据处理技术一直受到社区关注和追踪,淘宝的岑文初在刚刚结束的 QCon 杭州 2011 大会上就做了名为《Web 请求异步处理和海量数据即时分析在淘宝开放平台的实践》的演讲,参会者互动积极。其实,淘宝的技术领域已经不限于软件方面,其在硬件方面做了积极的尝试。最近推出的“开源绿色计算”项目就是很好的例证。从其项目网站上,可以看出数千台服务器的能源消耗推动淘宝技术团队寻找在硬件方面的优化措施:

随着淘宝用户数和访问量的增加,网络上部署的服务器数量也在不断的增长。为了保障用户体验,淘宝在全网部署了几十个用于加速的 WebCache 节点,服务器的数量达到数千,其每天消耗的电量非常惊人。在整个淘宝网运营成本中,电消耗成本已占了相当比重并逐年增加。因此,节约服务器用电量,已经成为不得不考虑的问题。最直接的方法,就是在满足性能要求的前提下,采用比传统服务器省电的低功耗服务器。定制低功耗服务器,就成为降低能耗的主要方案。 

目前市场上的低功耗服务器,与传统服务器的主要区别,在于采用了低功耗 CPU。低功耗 CPU 在带来低功耗的同时,也损失了处理速度。因此,消耗 CPU 资源少的应用,是低功耗服务器首要应用场景。从目前淘宝整个服务器体系看,满足这一要求的是 CDN web cache 服务器。因此,淘宝网的低功耗服务器的定制实践,始于 Cache 服务器的应用需求。 

传统的低功耗处理器,其节省功耗的原理,是在原有高性能处理器的基础上,通过控制处理器在闲时的主频和耗电,同时简化乱序处理的逻辑模块,来减少不必要的消耗。但受限于原有的高性能架构,整体功耗降低效果并不明显,特别是在 IO 密集型的业务上。而用于静态内容加速的 CDN web cache 服务器,主要功能正是对静态的网页和图片进行读写操作,属于 IO 密集型业务。因此,针对 IO 密集型业务,我们需要寻找区别于以往传统的、更低功耗的处理器及其服务器方案。

据淘宝基础核心软件研发负责人章文嵩表示,“淘宝的 CDN 服务绝大部分是图片流量(访问对象平均大小为 18K 字节),有一点静态数据和视频流量,还有一点点动态网页加速的流量。小图片的离散访问在 CDN 中最有挑战的”。在需求的驱动下,淘宝团队通过英特尔和美超微等厂商针对 CDN 缓存定制了一款绿色低功耗的服务器,并以此发起了“开源绿色计算”项目。该项目的目标除了更低功耗方面的要求外,还包括高 IO、方便运维等方面的要求;当然最重要的还是该项目面向整个行业开源,便于大家共同参与这个项目。

目前,该项目已经发布了定制服务器的设计规范,包括三个部分:

服务器设备主板设计规范——主板的设计目标是高功效、低成本和易维护,许多在传统服务器主板上消耗额外功率的的特点都将根据应用服务的要求被裁减掉。

服务器机箱和电源设计规范——基于主板低功耗的设计目标机箱可以进行高密度方面的考虑;而在电源设计方面则需要考虑高密度情况下的用电;同时两种结合起来后需要考虑整体服务器的散热问题,以保证服务器的稳定性。

服务器测试报告——在完成了整个服务器的主板设计和机箱设计后,原型机的测试是非常有必要的;而这种测试将基于某种应用进行,这样就涉及到具体服务器软件和硬件方面的优化配置,以使得服务器在这种配置下得到最高的性能。

下面我们来看看服务器设计规范中提到的一些核心技术。

主板采用嵌入式处理器, Intel® Atom™D525 (Pineview-D) 双核,1.8GHz (13W) 处理器, 其特点包括:热设计功耗(TDP)不超过 13 瓦;在套片上,首先是 32KB 的结构性缓存和 24KB 的回写数据(L1)缓存;Intel® 超线程技术,每个核可配置成 2 个超线程;在套片上还有 2 个 512KB8 通道的二级缓存等。系统管理总线是基于 I2C 的操作原则设计的,它提供一条系统控制和电源相关任务管理的总线。一个系统可以用 SMBus 来传递和发送来源于外围设备的消息,而不用单独设计控制总线,从而减少了管脚的数量。能够接受消息也保障了未来的可扩展性。为了节省功耗,主板采用低功耗的网络控制芯片,2 块 Intel 的 82574L 以太网控制芯片。采用 12V 的电压,接口设计成可热插拔的方式;主板通过一个转接板连接电源和硬盘。在 Intel 最新的处理器上已经采用了最先进的热处理技术,因此主板采用的 CPU 可以报告绝对的温度值(华氏 / 摄氏)。其基本原理是在 CPU 中植入一个主板能够读到的独立温度信息。在出厂的时候“温度门限”或者“温度容忍范围”都由厂家设置到 CPU 中,它将作为主板在不同 CPU 温度条件下采取相应操作(例如:增加 CPU 风扇的速度、触发过热报警等)的基线。由于 CPU 有不同的温度容忍范围,因此目前的 CPU 能够将热容忍范围发送给主板可以给 CPU 带来更好的热管理效果。主板设计应该利用上述 CPU 的热特性,给处理器分配特定热条件下的温度状态(低、中、高)。这样可以让用户很容易理解 CPU 的温度状态,而不是简单的只显示温度的数值(如 25℃)。在 BIOS 中设置风扇全速运行可以让板上的风扇运行在全速(以 100% 宽度脉冲宽度调制占空比)以提供最好的散热。全速设置推荐在特殊系统配置或者调试时使用。选择面向性能的选项,板上的风扇将以 70% 的初始脉冲宽度调制周期来运行,这样也可以带来比较好的散热效果。面向性能的选项建议在高功耗和高密度的系统中使用。如果选择平衡的选项,风扇将以 50% 的初始脉冲宽度调制周期来运行,目的是考虑在散热和功耗间的平衡。平衡模式选项建议在一般配置的系统中使用。还有一种模式就是节能模式,该模式将以 30% 的初始脉冲宽度调制周期来运行,这样可以带来最好的功效和最大的静音效果。

机箱采用热浸镀锌板材料,使得其拥有一个独特的光亮表面。机箱配件设备的安装只需采用飞利浦的螺丝刀即可简单完成。作为一个 2U 八节点的配置,该款机箱是一个非常独特的系统。8 个系统的板卡放入到一个单独的机箱内,每块板卡作为一个独立的服务器节点系统。每两个服务器节点系统放置在一个可热插拔的服务器托盘上,整个机箱共支持 4 个独立的服务器托盘,每个托盘可独立开关机而不影响其他托盘中的系统。另外,承载两个服务器节点系统的托盘可以进行热插拔操作,能够从服务器的后面板抽出;这样一个两节点的托盘通过一块主板上的附加卡与机械的背板连接。机箱支持 24 块 2.5 英寸硬盘的使用。一块单独的背板通过综合各个子系统的信息对机箱系统进行电源控制和风扇速度的控制,同时将三个一组的硬盘与玫瑰节点相连接。因此 RAID 的策略只能应用在同一个节点的三块硬盘上,而不能进行全部 24 块硬盘的 RAID 配置。硬盘通过安装在硬盘托盘上来简化硬盘插入和拨出机箱的操作;同时硬盘托架也可以辅助提高系统的空气流通,使得整个机箱系统更好的散热。机箱可以插入两个电源模块以便可以为系统提供冗余的电源。如果两个电源中其中任何一个电源失效,另外一个电源会接手所有的用电负荷并且允许系统无中断继续工作。电源模块支持热插拔;如果只有一个电源失效可以在不关闭系统的情况下进行更换。机箱设计了一个独特的散热系统,这个散热系统有四个 8 厘米高性能风扇组成。风扇的速度控制可以在 BIOS 里面进行设置,其速度值由系统的温度决定。四个风扇都直接连接到背板上,但是需要从它们逻辑连接的服务器主板上获取供电。在 2U8 的机箱中,每个节点(服务器板卡)控制在机箱中与其处在同一侧的风扇。这意味着四个节点将共享两个风扇。如果对于这四个节点在 BIOS 中的风扇速度设置不同,那么 BIOS 设置速度最高的将作为应用的设置。

CDN 实现网站加速的基本原理在于将缓存节点部署到靠近终端用户的网络边缘,然后将网站的内容缓存在这些边缘缓存服务器中,然后通过调度将用户的访问调度到离用户最近的网络边缘节点,从而使用户能够从最近的缓存服务器得到网站的内容,从而实现加速的效果。虽然不同的 CDN 缓存节点的架构有所不同,但是都要考虑整个缓存节点的稳定性、可用性、IO 性能和可扩展能力。开源软件 LVS、Haproxy 和 Squid 分别承担四层负载均衡、七层负载均衡和缓存服务的角色。来自于终端用户的请求首先由 LVS 进行四层的处理,基于后端的连接数将用户请求调度到后端的 Haproxy;当 Haprxoy 收到 LVS 调度过来的请求后,它将对用户请求的 URL 进行哈希运算,根据运算的哈希值将用户的请求调度给后端的 squid;squid 根据请求从本地存储或者后端的源站获取用户请求的内容然后将响应返回给 Haproxy,Haproxy 将该响应的内容直接返回给用户而不再经过 LVS。考虑到性能 LVS 将单独部署在一台服务器设备上,而考虑到稳定性和高可用性整个节点机器将采用两台 LVS 服务器设备,互为热备;而考虑到扩展性 Haproxy 和 Squid 会部署在一台服务器设备上(对于更低功耗服务器来说 squid 和 harpxoxy 在服务器上基本上是一对一部署的)。更大的存储空间意味着缓冲服务器能够缓存更多的内容,这样就可以减少回源站取内容的概率从而提高了用户访问的命中率,进而保证了用户请求的响应时间。IO 的响应时间则表示对于存储介质的访问速度,这个对于用户请求的响应速度影响也非常大。IO 的响应时间可以通过存储介质的 IOPS(单位时间完成的 IO 数)来进行衡量。服务器针对于 CDN 缓存应用的存储机制配置的原则是:内存用于存放最频繁(最热)的内容对象,这部分对象的访问次数一般占到整个被访问次数的 30% 左右,但是存储大概只占到 1% 左右;接下来次热的内容被存放在 SSD 上,这部分内容的访问次数大概占到整个被访问对象的次数的 60% 左右,而存储大概只占到 20% 左右;冷点的内容存放在机械硬盘上,这部分内容的访问次数大概占到被访问次数的 10% 左右,但是存储却占到 80%。每片服务器有 3 个 Sata 接口的硬盘盘位,配置一块 SSD 和两块 Sata 机械硬盘来满足 CDN 缓存分层存储的需要。由于 SSD 本身的响应时间已经完全超越了目前这款更低功耗服务器的 CPU 所能够处理的速度,因此对于 SSD 硬盘的选项主要关注在存储大小的选择。由于 SSD 的大小直接和其成本相关,因此需要根据缓存内容的大小来选择合适大小的 SSD 硬盘。根据刚才的分析,SSD 大概需要存储占总缓存内容大小 20% 左右的对象内容,大概估算一下整个服务器需要缓存内容的大小约为 300GB 左右,因此 SSD 的大小选择为 60GB 左右的硬盘比较合适;目前市场上和上升大小规格相近的硬盘型号有 64GB 和 80GB 两种,考虑到 SSD 本身需要一定的冗余来保证性能,因此选择了 80GB 的型号。对于机械硬盘的选择则需要考虑的因素包括:存储大小、功耗、稳定性、成本、硬盘转速、性能(主要用随机访问模式下的 IOPS 来衡量),最终选择了型号为 ST95005620AS 的硬盘。由于内存的选型依赖于 CPU 的类型,目前 Atom D525 的处理器只能支持不大于 4GB 的 DDR3 的内存,内存的主频不超过 800MHz,而且没有 ECC 的支持;另外考虑到低功耗的要求所以选择的是两条 2GB DDR3 的笔记本内存。

淘宝对低耗服务器做了详细的测试,性能测试方面包括实验室环境和线上环境,还有功耗测试和稳定性测试。测试指标包括: 响应时间(从 squid 接收到请求到将响应发送出去的时间)、每秒处理的请求数(每秒 Squid 能够成功处理的请求数,该指标可以通过 squidclient 工具得到)、流量(单位时间内 squid 针对用户请求所响应内容的比特流量)、功效(单位功耗下能够服务的 QPS 数,或者每瓦服务的流量)。

实验室的性能测试表明,大片更低功耗服务器的 CDN 缓存服务最大能力大概为 1700QPS(或 229.5Mbps),而最高功效为 70 QPS/ 瓦(或者 9.46 Mbps/ 瓦)。线上环境测试结果:整体的缓冲命中率在 95% 以上;95% 的响应时间都在 20ms 以下,最高不超过 100ms;测试到的最高性能为 1100QPS,而此时的 CPU 利用率只有 70% 左右、磁盘的利用率也在 40% 以下。就稳定性而言,线上一个月的运行并没有出现应用服务的明显中断,而且整体性能曲线平稳,基本上可以判断稳定性能够满足 CDN 服务的要求。

对于服务器的下一步优化,文档给出了提示。功耗优化:在 BIOS 中设置可关闭 USB 接口;设置关闭 CPU 中的图像处理逻辑 GPU。运营维护优化:提供 1 对多的 OOB 或 IPMI 管理以太网接口;进一步提高服务器的密度,提高单台服务器的服务能力,降低单位节点的服务器设备数;同时也可提高电源的转换效率;集成网络交换模块到服务器机框中,降低服务器对外的网络接口数量。性能优化:扩展 Sata 硬盘的盘位,进一步提高机械硬盘的服务能力,进而提高整体服务器的服务能力;更换效能更高的 CPU:SandyBridge(15 瓦)。

据章文嵩在微博中透漏,目前该定制服务器已经实现量产,建设了十几个 CDN 节点,约 800 台 ATOM 服务器。跟基于 Intel L3406 或 E5602 处理器的服务器节点比起来,QPS/ 瓦是最高的,成本最低,响应时间平均最短,得益与服务器数目多硬盘多。可运维性还有待加强。

如果读者想详细的了解服务器的设计规范和参数,可以访问项目的网站来下载相关的文档。 

最佳实践架构DevOps语言 & 开发