📅  最后修改于: 2021-01-10 03:03:27             🧑  作者: Mango
软件容错能力是指软件能够根据规范从运行软件的系统中的软件或硬件中正在发生或已经发生的故障中检测并恢复故障的能力。
软件容错是构建从嵌入式系统到数据仓库系统的下一代高可用性和可靠计算系统的必要组件。
为了充分理解软件容错能力,重要的是要了解软件容错能力应该解决的问题的性质。
软件故障都是设计故障。软件制造,即软件的复制,被认为是完美的。单纯设计故障的问题根源与几乎所有其他系统都需要容错特性是完全不同的。
恢复块方法是Randel开发的一种简单技术。恢复块与仲裁器一起运行,该仲裁器确认同一算法的各种实现的结果。在具有恢复块的系统中,系统视图分为故障可恢复块。
整个系统由这些容错块构成。每个块至少包含主要,次要和例外情况代码以及一个裁定符。仲裁器是确定各个要尝试块的正确性的组件。
审裁官应保持某种程度的简单,以保持执行速度并有助于正确性。初次进入单位后,裁判员将首先执行主要选择。 (审裁员可以尝试的一个单元中可能有N个替代项。)如果裁决器确定基本块发生故障,则它会尝试回滚系统状态并尝试第二级替代项。
如果裁决者不接受任何替代者的结果,则它调用异常处理程序,该异常处理程序随后表明该软件无法执行所请求的操作。
恢复块技术增加了规范上的压力,使其足够具体,以创建功能相同的多种替代方案。在N版本软件方法的上下文中将进一步讨论此问题。
N版本的软件方法试图与N路冗余硬件的传统硬件容错概念并行。在N版本的软件系统中,每个模块最多可以使用N种不同的方法来完成。每个变体完成相同的函数,但希望以各种方式完成。然后,每个版本将其答案提交给投票者或决定者,由他们决定正确的答案,并将其作为模块的结果返回。
依靠设计多样性的概念,该系统有望克服大多数软件中存在的设计错误。 N版本软件的本质区别在于,该系统可以使用多种版本的软件来包含多种类型的硬件。
如果满足所需的设计多样性,则N版本软件只能成功并且成功地容忍故障。对N版本软件(和恢复模块)中适当规格的依赖性不够强。
恢复块技术与N版本技术之间的差异不是很多,但它们是必不可少的。在传统的恢复模块中,每个替代方案都将顺序执行,直到找到由仲裁人确定的可接受的解决方案为止。恢复块方法已扩展为包含各种替代方案的并发执行。
N版本技术始终被设计为同时使用N路硬件来实现。在串行重试系统中,尝试多种方法所花费的时间可能太昂贵,尤其是对于实时系统而言。相反,并发系统需要N路硬件和通信网络来连接它们。
恢复块技术要求每个模块都建立一个特定的仲裁器;在N版本方法中,可以使用单个判定器。假设程序员可以创建一个足够简单的裁定程序,则恢复块技术将创建一个系统,这对于进入不正确的状态具有挑战性。