You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
10 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 30 | 服务器的管理和部署:工业界近几年有哪些发展趋势?
你好,我是庄振运。
说起服务器你一定不陌生。那你知道Facebook的服务器是什么样的吗要知道Facebook同时使用着很多不同的服务器。
在应对需要高速缓存的Facebook新闻、广告投放和搜索时Facebook使用的是有比较大内存和较强CPU的服务器。现在使用的每台服务器都有256GB的主内存和两个处理器的CPU。
而在需要存储大量照片和视频的时候Facebook就选择了适用于数据和对象存储的服务器这种服务器只有很少的内存但是却有几百TB的硬盘存储空间。
今天,我们就从“服务器”入手,进入一个新的专题:容量管理工程。我们一起来看,要如何针对服务器设计、规划和部署的特点,开发出性能优越,能充分利用硬件资源的应用程序和服务。
## 如何设计一种新的服务器?
就像我前面用来举例的Facebook一样大规模互联网公司的服务器和我们家里以及办公室用的电脑可不一样一般不是直接从市场上买的而是自己设计的。
那么这些服务器是怎么设计出来的呢?其实服务器的设计和其他的硬件设计一样,也需要经过好几个阶段,你可以看一下它们的设计路线图(如下图所示)。
![](https://static001.geekbang.org/resource/image/d4/5d/d46d0710af39a5fb02b16cda0ddff85d.png)
在最终进入大规模批量生产MP阶段之前服务器的设计需要经历四个阶段也就是
* Pre-EVTPre-Engineering Validation Test预先工程验证测试
* EVTEngineering Validation Test工程验证测试
* DVTDesign Validation Test设计验证测试
* PVTProduction Validation Test生产验证测试
这之后才是批量生产MP阶段。
每个阶段的目的和任务都有所区别,具体来讲,**Pre-EVT阶段**进行的是比较初级的模块测试,且往往是和硬件供应商一起进行的。这一阶段通过基准测试,**得出基本的模块性能**,为下一步的、更具体的设计提供性能数据。所以,此阶段一般只需要少数几台服务器原型就可以。
第二个阶段是**EVT**,这个阶段是服务器开发的初期设计验证,重点在**考虑服务器设计的完整度是否有遗漏**。这些测试包括功能和安全规格测试。这时候的服务器是样品问题可能较多测试可能会做N次。但是这一阶段需要有一个完整的服务器会运行更加具体的基准测试并根据测试结果来调整服务器设计。一般需要几十台服务器来进行测试。
**DVT阶段**的测试,需要生产厂商把服务器运送到数据中心。到此时,几乎所有的设计已全部完成,重点是找出可能的设计问题,确保所有的设计都符合规格。此时产品基本定型,可以进行负载测试,是为了发现在生产环境中可能出现的问题。这个阶段的测试可能需要用上百台服务器。
**PVT阶段**更加注重生产流程。服务器需要用类似真实的生产线来生产,并且运送到数据中心。这时需要进一步,用更加真实的应用程序来测试。这个阶段一般就要有百台以上甚至千台的服务器了。
**MP阶段**,就是批量生产了。到这个阶段,服务器硬件准备就绪,而且需要使用真实生产流程,来进行大规模生产和应用测试。所有设计及生产问题,应该没有任何遗漏及错误,成为正式面市的产品。
## 服务器设计的机遇在哪?
仅仅知道如何设计一种新服务器还不够你还需要知道整个业界如今的趋势才能给出最有性价比的服务器设计。虽然业界会有比如全球DRAM短缺这样的短期波动但是长期来看也是有迹可循的比如摩尔定律的放缓越来越大的HDD硬盘新的SSD技术等。
这些变化给我们的服务器设计带来了挑战但同时也带来了机遇。CPU、内存、硬盘、网络、单处理器等几个方面的变化不仅仅影响各公司数据中心未来服务器的发展方向也对公司的软件和服务设计有重大而深远的影响。
### CPU的趋势
从CPU的趋势来看简单来讲摩尔定律正在失效业界对CPU的性能增强一般是通过添加更多内核来增大吞吐量。对于英特尔和其他CPU厂商比如ARM来说这意味着每一代处理器将拥有更多的内核但运行频率一般要低于当前一代的处理器。之所以有这些趋势归根结底是因为用于生产芯片的材料所面临的挑战以及物理方面的基本限制例如光子和电子的特性等。
对软件来说传统上我们比较看重针对单线程的性能进行优化。鉴于这一硬件趋势的影响这样的优化策略需要进行调整。无论处理器的体系结构x86、ARM等如何**CPU单位价格的性能和每瓦性能的提升都在逐代地显著放缓**。
所以,我们的性能优化策略,应该着重服务的**水平扩展性**,就是通过多线程和多服务器来扩展服务的总体容量。
### DRAM内存的趋势
DRAM内存的趋势如何呢在全球市场上DRAM内存仍然相对稀缺价格很高。自2017年以来每GB的价格已翻了一番以上。与影响CPU一样相同的基本问题和挑战也影响着DRAM性能和容量的提高。所以各公司的服务器设计都开始转向使用尽量少的DRAM内存。
一个好消息是新型技术比如NVM非易失性内存等也在成熟这就为许多应用提供了更便宜的DRAM替代品。现在已经有越来越多的服务器设计开始**考虑使用NVM**。
如果你的互联网服务和程序使用内存较多并且SSD这样的快速存储还是不能满足服务的要求除了尽量减少内存使用外建议你考虑采用NVM。
### 硬盘的趋势
硬盘方面,硬盘的存储容量继续增加,但增速开始降低。这种趋势,是因为硬盘行业面临的材料挑战,以及物理方面的基本限制(例如控制磁场)。
虽然存储容量变大但是硬盘提供的IO性能比如每秒随机访问IOPS的性能并没有增加。为了利用这些更大容量的驱动器我们最好**把硬件和软件设计一体化**。比如,你可以把热数据缓存在闪存或内存中,并将相对较冷的数据存储在旋转硬盘上。
### 网络的趋势
与服务器功耗相比,数据中心的网络流量增长得更快。具体来说,与计算和存储有关的网络功耗不断增长,所以需要使用更快、更多的交换机间的网络链接。
另一方面新的技术比如硅光子技术进一步降低了成本也引发了新一轮的创新和数据中心的网络升级。比如有的数据中心已经开始使用400G、800G甚至1.6T的高速网络。
但是你要记住,不管网络技术如何发展,还是需要尽量地减少跨数据中心和跨机架的网络流量,也就是**尽量让网络在本地消化掉**。这里的“本地”可以是服务器本身、本机架、本数据大厅、本数据中心等等。为什么呢?还记得我以前说过的“带宽超订”吗(参考[第18讲](https://time.geekbang.org/column/article/185737)),因为越往外走,网络的带宽总是越小。
如何才能尽量让网络流量本地消化呢?这就需要你考察公司内部各种服务之间的数据交互,尽量让有大量数据交换的服务在一起部署(比如部署在同一个机架内)。
### 单处理器的趋势
回到服务器的趋势上,有一个有趣的趋势就是:未来是单处理器的天下。
以前服务器采用多个处理器,是因为每个处理器上的内核数目有限。所以,如果我们希望一台服务器有更多的计算能力,只能采用更多的处理器。
但是现在这种情况也正在改变我们正进入高度集成的多核CPU时代也就是一个处理器上面有几十个内核越来越平常一个处理器就已经有足够强大的计算能力。比如随着每一代x86处理器的发布都会增加更多的内核和功能性能大大提高。
同时服务器的内存密度也在增加。现在的单处理器服务器能够置入的内存大小已经超过了以前服务器支持的内存密度。在很多生产环境中内存容量和内存带宽才是主要的性能瓶颈而不是CPU。因此在双处理器环境中CPU使用率往往很低。
综合以上因素,采用单个处理器的服务器,可以降低服务器硬件成本和软件许可证的成本,让各种硬件资源得到更加充分的使用。具体来说,我们在开发大型服务和程序的时候,可以尽量采用模块化的设计,比如分解成几个可以在单个处理器上运行的微服务。
## 总结
我们这一讲介绍了服务器设计的不同阶段讨论了工业界这几年的发展趋势包括CPU、内存、网络、磁盘等不同的服务器资源类型。
![](https://static001.geekbang.org/resource/image/8a/a8/8aad912aac2c4f56db93e30046c7b3a8.png)
这些趋势,对于我们去把握下一代服务器硬件会有帮助。我们开发的互联网服务,总归是要运行在这些服务器上面,了解了这些趋势,我们才能开发出性能优越,能充分利用硬件资源的应用程序和服务。
清朝的赵翼有一首诗说:“李杜诗篇万口传,至今已觉不新鲜。江山代有才人出,各领风骚数百年。”其实服务器的发展,又何尝不是如此呢?服务器的更新换代速度,虽然可能没有软件那么快,但是也是几乎每年都有很大变化的,每种服务器,也是“各领风骚一两年”。
## 思考题
你们公司的服务器有几种?是不是也是按照资源的大小,比如内存和存储的大小来划分的呢?
你如果在公司已经工作几年了,有没有感受到硬件更新换代的特点?如果你在开发程序和互联网服务,想一想怎么设计你的程序和服务才能充分利用这些特点呢?
欢迎你在留言区分享自己的思考,与我和其他同学一起讨论,也欢迎你把文章分享给自己的朋友。