服务器的黑科技:服务器是怎么做到每年只停机30秒的?
1小时停机损失,来源ITIC
前些年关键业务服务器的金标准是要做到5个9,现在已经要求6个9,甚至7个9。他们是什么意思呢?
X个9,表示在1年时间的使用过程中,服务器可以正常使用时间与总时间(1年)的比值。
5个9:(1-99.999%)*365*24*60=5.26分钟,表示1年非计划停机时间不超过5.26分钟。
6个9:(1-99.9999%)*365*24*60*60=31.5秒,表示1年非计划停机时间不超过30秒。
7个9:(1-99.99999%)*365*24*60*60=3.15秒,表示1年非计划停机时间不超过3秒。
ITIC统计2018年80%的企业最低要求4个9,可靠性要求增长非常迅速:
来源ITIC
服务器能够做到这么短的非计划停机时间,除了在操作系统上要求严格外,硬件上的保证是重中之重。服务器的RAS(Reliability, Availability,Serviceability 高可靠性、高可用性、高服务性)特性(feature)曾经是大型机的骄傲,也是它们高高在上身价的基础,但随着X86在RAS功能上的补足,服务器市场已经几乎被X86服务器占据。关键业务服务器由于历史和维护原因,还有部分市场份额不在X86的掌控之中,但非X86高可靠性的神话已经破灭。根据ITIC统计:
来源ITIC
X86服务器不但占据绝大部分,而且可靠性也仅仅比Power 服务器低一点点。
那么这些RAS功能都是些什么呢?绝对不是焚香祷告哦
而是实打实的硬功夫!RAS的根本在于提供硬件冗余来避免错误;出错后及时发现、纠正和避免错误扩散;替换掉出错的设备等等。下面我们来分别了解一下。
内存镜像
对计算机比较了解的同学都知道磁盘的RAID模式,RAID提供了数据冗余来保证数据安全。当然RAID是服务器上的必备要求,但你知道吗,内存也有同样的模式,那就是内存镜像(Memory Mirror)。内存镜像将4个通道的内存成对存储相同的数据,类似磁盘的RAID 1,内存的数据在硬件上就被保存了两份,当一份损坏时还有备份,而更妙的是这些是对软件透明的。
这个冗余度和RAID1一样是很大的,一半的资源在大部分情况下闲置了,在提高可靠性的同时浪费也十分严重,有没有稍微省钱点的做法呢?当然有,那就是内存备用(Memory Sparing),简单来说就是保留了部分内存,当出错再把这些内存拿来顶上。它的颗粒度可以到DIMM甚至以Rank为单位。
SDDC、SDDC+1、DDDC和ADDDC
大家知道1位奇偶校验码可以发现1位的错误,但不能纠正,对于2位以上连发现都发现不了。ECC好一些,但对于很多位错误就无能为力了。SDDC (Single Device Data Correction,单设备数据校正 )可以纠正X4的单设备错误:
注意是1RX4, 来源SuperMicro
SDDC+1不但可以纠正X4的内存错误,还可以把出错的颗粒替换掉,让它下次不再出错:
来源Supermicro
DDDC(Double Device Data Correction )可以和Lockstep一起,将两个DIMM拼拼,纠正两个X4颗粒的错误:
来源Supermicro
DDDC+1和ADDDC(Adaptive Double Device Data Correction)这里就不再介绍,有兴趣的可以自行Google。
内存巡警
这些都是内存访问的时候发现错误了如何处理,但是还有些错误可能发生在没有访问的区域,这些区域错误不加处理,积少成多,可能超过DDDC的纠错能力。这就需要Patrol Memory Scrubbing的帮助了。它会像高速巡警一样,借助一个特殊的引擎,帮助定期扫描内存的可能出现的错误。Demand Scrubbing会把发现错误的数据,纠正后写回去,避免错误积累。
错误的报告和隔离
本专栏有过两篇文章介绍出错的问题:
老狼:计算机硬件出错了会发生什么?
zhuanlan.zhihu.com
图标
老狼:WHEA原理和架构
zhuanlan.zhihu.com
图标
作为服务器必备的功能,WHEA会把错误向操作系统报告,操作系统可以选择做出相应的动作。BIOS还可以设置poison位来标定出错的范围。
CPU、内存和设备的热插拔
硬件发生了错误,即使已经通过各种手段(SDDC等)得到纠正,但隐患已经埋下。硬件一旦发生错误,可能会越来越严重,慢慢变得不能够纠正而变成严重错误。为了避免发生这种情况,需要把出错的设备移除和替换。
那么操作系统报告给管理员错误后,该怎么办呢?按照一般的想法就是关机换设备吧。但这种操作是严重影响x个9的可用性数据的。必须在操作系统还在持续提供服务的情况下更换设备、内存甚至CPU!
也许你听说过PCIe设备的热插拔,但内存和CPU的热插拔就比较高冷了。CPU和内存热插拔和PCIe类似,有个attention开关。在按下后,BIOS、操作系统和硬件会合作把设备周边电路隔离、内核对象移除和变更,在完成后会有状态指示灯显示准备工作结束,可以动手移除了。CPU和内存插入和这个相反,但都要BIOS、操作系统和硬件支持,十分复杂,但整个操作下来也十分炫酷。
结论
6个9甚至7个9是个系统工程,需要整体上考虑。除了这些RAS功能之外,服务器硬件如磁盘驱动器等等也与民用不同,十分昂贵。
这些功能整体推高了服务器的价格,Google、FB、亚马逊和阿里等等大型云服务公司决定另辟蹊径,从操作系统级别的软件冗余来解决系统X个9的可靠性问题,这样一台服务器出错,直接整台offline,而不是CPU或者内存的更换。于此同时另外2到3台服务器还在持续提供服务,服务不会中断。
但是大型关键部门如银行电信等,还在借助传统的RAS来保证系统的可靠性。