主要内容
计算机是在不同的抽象层上设计和构造的。我们可以逐级深入计算机的不同层面,将每个组件放大为一个完整的子系统进行查看,直到深入到独立的晶体管为止。尽管有些故障会波及整个系统,比如掉电,但许多故障可以被限制在模块的单个组件上。因此,在某一层级看来是整个模块完全失效的情况,当从更高层级来看时,可能只是一个模块中的组件故障。这种层级区分有助于找出构建可靠计算机的方法。
如何判断一个系统的运行是否正常,这是一个难题。随着互联网服务的普及,这个问题变得更为明确。基础设施供应商开始提供服务等级协议(service level agreement,SLA)或服务等级目标(service level objective,SLO),以保证他们的网络或电源服务是可靠的。例如、他们在一个月内无法满足协议的时间超过若干小时,就会向客户做出赔偿。因此,可以使用LA来判断系统是正常运行还是已经宕机。
系统在SLA规定的两种服务状态之间切换。
(1)服务完成,即提供了指定服务。
(2)服务中断、即所提供的服务与SLA不一致。
两种状态之间的转换由故障(由状态1至状态2)或恢复(由状态2至状态1)导致。对这两种转换进行量化,可以得到可信任度的两种主要度量。
模块可靠性是对从参考初始时刻开始的连续的服务完成情况的度量(一种等价的说法是、对发生故障之前的时间的度量)。因此,平均无故障时间(mean time to failure,MTTF)是一种可靠性度量。MTTF的倒数就是故障率,通常以运行10亿小时发生的故障数来表示,被称为FIT(failures in time)。因此,1 000 000小时的MTTF相当于109/106=1000FIT。服务中断用平均修复时间(mean time to repair,MTTR)来度量。平均故障间隔时间(mean time between failures,MTBF)就是MTTF+MTTR。尽管MTBF使用得更为广泛,但MTF通常更适用。如果一组模块的生存期呈指数分布,也就是说模块的老化对于故障概率的影响不大,那么这一组模块的整体故障率就是这些模块的故障率之和。
模块可用性是指在服务完成与服务中断两种状态之间切换时,对服务完成情况的度量。对于可修复的非冗余系统,模块可用性为
模块可用性=MTTF/(MTTF+MTTR)
注意,可靠性和可用性现在是可量化指标,而不再是可信任度的同义词。从这些定义出发,如果我们对组件的可靠性做出一些假设,并假设故障之间互相独立,则可以量化地估计一个系统的可靠性。
其实应对故障的主要方法是冗余,或者是时间冗余(重复操作),或者是空间冗余(当一个组件故障的时候由其他组件来进行接管)。