古老计算机的奇迹:SAPO是如何实现故障容忍的?

故障容忍是指系统在某些元件发生故障或失灵时,仍能保持正常运作的能力。这一能力对于高可用性、任务关键,甚至生命至关重要的系统来说是必不可少的。故障容忍特别指系统在发生错误时,不会出现任何降级或停机的情况。在出现错误时,最终用户并不会察觉到任何问题。相对而言,一个经历错误但服务仍然在运行的系统称为「韧性系统」,这样的系统能够适应错误的发生,维持服务但表现出一定的性能影响。

故障容忍专门用于描述计算机系统,确保即使发生硬体或软体问题,整体系统仍然保持运作。

在计算机发展史上,最早的故障容忍计算机是1951年在捷克斯洛伐克由安东宁·斯沃博达(Antonín Svoboda)建造的SAPO。该计算机的基本设计是通过绕线的磁鼓来实现的,并采用了投票法进行记忆体错误检测,这种技术被称为三模冗余。随着时代的进步,许多其他类似的设备陆续被开发出来,大部分用于军事用途,其后逐渐形成三种类型的选择:那些可以长期运行而不需要任何维护的计算机,如NAASA的空间探测器和卫星;非常可靠但需要不断监控的计算机,如用于监控和控制核电厂或超导体实验的设备;还有在重负荷下运行的计算机,例如许多用于保险公司概率监测的超级计算机。

故障容忍的演进

不少在1960年代由NASA进行的所谓LLNM(长寿命,无需维护)计算机的研究为未来的太空任务铺路。这些计算机通过使用备份记忆体阵列支持记忆体恢复方法,JSTAR计算机便是这样的例子,它能够自我检测并修复错误或启用冗余模块。至今这些计算机仍在持续运行。

过去的设计往往集中于内部诊断,故障可以被发现并且专业人员可以进行更换。

然而,后来的设计示范了系统需要具有自我修复和诊断的能力,能够在故障发生时进行故障隔离并执行冗余备份。这对于实现高可用性的计算系统至关重要。

故障容忍技术的广泛使用

例如,部分硬件故障容忍系统需要在系统运行时将损坏的元件取出并更换,这被称为「热插拔」。这种系统通常有单一备份,称为单点容忍,并且大多数故障容忍系统都属于这一类。故障容忍技术在计算机应用中取得了显著成功。

Tandem计算机就是以此为基础,建立了每年运行时间计算的NonStop系统。

除了硬体,故障容忍还能体现在计算机软体中,例如过程复制和数据格式的完美设计,使其可以优雅降级。 HTML就是一个典型例子,能够让网页浏览器忽略新且不支持的HTML实体,而不影响整体文件的可用性。类似的设计还出现在许多流行网站中,这些网站在深度操作系统中,为了保持广泛的可接触性而提供轻量级界面。

故障容忍系统的设计考量

实现故障容忍设计并不总是一个实际的选择,因为相关的冗余会带来重量、成本和设计时间上增加等问题。因此,设计人员必须仔细考虑哪些元件需要故障容忍的能力。

每个元件的故障可能性、重要性及其成本均需经过周密评估。

举例来说,一辆汽车的收音机虽然不是关键性元件,但其重要性相对较低,而乘客约束系统(如安全带)则因为其在事故中保障安全的关键功能而被认为需要冗余设计。

故障容忍系统的基本特征包括:没有单一故障点;能够对故障元件进行隔离;及故障的回收必要,这通常需要对系统的故障进行分类和定义。

思考的结尾

在面对不断复杂化的科技世界,故障容忍的设计是否能够真正保护我们日常生活中的各类系统,让我们在未来的高科技生活中避免不必要的危险呢?

Trending Knowledge

航天科技的惊人创新:NASA如何确保太空探测器的运行?
在太空探测的过程中,系统的稳定性和可靠性是成功的关键。 NASA在设计太空探测器时,充分考虑了故障容忍技术,这一点使得这些探测器能够在面对各种挑战时依然保持运行。故障容忍性是指系统即使发生部分故障,依然能够正常运作的一种能力,这对于高可用性、任务关键甚至是生命关键的系统至关重要。 <blockquote> 透过故障容忍技术,NASA的太空探测器能够在火星、木星乃至于更远的外星体上成功运
电脑故障的真相:为什么有些系统能在失效中继续运行?
在当今的科技环境中,故障容忍(Fault tolerance)被视为一个系统保持正常运行的重要能力,尤其是在高可用性及关键任务执行上,这种能力更是不可或缺。故障容忍系统能够在面对某个或多个组件故障时仍然运作,这对于保证用户体验和数据安全至关重要。 <blockquote> 故障容忍是系统在遇到故障或错误时,继续正常运行的能力,这意味着用户不会察觉到问题的存在。
故障容忍的秘密:为什么它对我们的生活如此重要?
在我们日常生活中,无论是使用电脑、手机,还是操作大型设备,故障容忍能力的存在往往是我们未曾察觉的基石。故障容忍,就是一种系统在面对组件故障时,依然能保持正常运作的能力。这种能力对于高可用性、任务关键或生命安全系统尤为重要,因为它们不容许出现任何中断或性能下降。 <blockquote> 故障容忍系统的设计理念是,在发生错误的时候,最终用

Responses