故障容忍是指系统在某些元件发生故障或失灵时,仍能保持正常运作的能力。这一能力对于高可用性、任务关键,甚至生命至关重要的系统来说是必不可少的。故障容忍特别指系统在发生错误时,不会出现任何降级或停机的情况。在出现错误时,最终用户并不会察觉到任何问题。相对而言,一个经历错误但服务仍然在运行的系统称为「韧性系统」,这样的系统能够适应错误的发生,维持服务但表现出一定的性能影响。
故障容忍专门用于描述计算机系统,确保即使发生硬体或软体问题,整体系统仍然保持运作。
在计算机发展史上,最早的故障容忍计算机是1951年在捷克斯洛伐克由安东宁·斯沃博达(Antonín Svoboda)建造的SAPO。该计算机的基本设计是通过绕线的磁鼓来实现的,并采用了投票法进行记忆体错误检测,这种技术被称为三模冗余。随着时代的进步,许多其他类似的设备陆续被开发出来,大部分用于军事用途,其后逐渐形成三种类型的选择:那些可以长期运行而不需要任何维护的计算机,如NAASA的空间探测器和卫星;非常可靠但需要不断监控的计算机,如用于监控和控制核电厂或超导体实验的设备;还有在重负荷下运行的计算机,例如许多用于保险公司概率监测的超级计算机。
不少在1960年代由NASA进行的所谓LLNM(长寿命,无需维护)计算机的研究为未来的太空任务铺路。这些计算机通过使用备份记忆体阵列支持记忆体恢复方法,JSTAR计算机便是这样的例子,它能够自我检测并修复错误或启用冗余模块。至今这些计算机仍在持续运行。
过去的设计往往集中于内部诊断,故障可以被发现并且专业人员可以进行更换。
然而,后来的设计示范了系统需要具有自我修复和诊断的能力,能够在故障发生时进行故障隔离并执行冗余备份。这对于实现高可用性的计算系统至关重要。
例如,部分硬件故障容忍系统需要在系统运行时将损坏的元件取出并更换,这被称为「热插拔」。这种系统通常有单一备份,称为单点容忍,并且大多数故障容忍系统都属于这一类。故障容忍技术在计算机应用中取得了显著成功。
Tandem计算机就是以此为基础,建立了每年运行时间计算的NonStop系统。
除了硬体,故障容忍还能体现在计算机软体中,例如过程复制和数据格式的完美设计,使其可以优雅降级。 HTML就是一个典型例子,能够让网页浏览器忽略新且不支持的HTML实体,而不影响整体文件的可用性。类似的设计还出现在许多流行网站中,这些网站在深度操作系统中,为了保持广泛的可接触性而提供轻量级界面。
实现故障容忍设计并不总是一个实际的选择,因为相关的冗余会带来重量、成本和设计时间上增加等问题。因此,设计人员必须仔细考虑哪些元件需要故障容忍的能力。
每个元件的故障可能性、重要性及其成本均需经过周密评估。
举例来说,一辆汽车的收音机虽然不是关键性元件,但其重要性相对较低,而乘客约束系统(如安全带)则因为其在事故中保障安全的关键功能而被认为需要冗余设计。
故障容忍系统的基本特征包括:没有单一故障点;能够对故障元件进行隔离;及故障的回收必要,这通常需要对系统的故障进行分类和定义。
在面对不断复杂化的科技世界,故障容忍的设计是否能够真正保护我们日常生活中的各类系统,让我们在未来的高科技生活中避免不必要的危险呢?