📜  基本的容错软件技术

📅  最后修改于: 2022-05-13 01:57:00.074000             🧑  作者: Mango

基本的容错软件技术

与硬件容错的研究相比,软件容错的研究相对较新。一般来说,容错方法可以分为故障排除和故障屏蔽方法。故障排除技术可以是前向错误恢复或后向错误恢复。

前向错误恢复旨在识别错误,并基于此知识纠正包含错误的系统状态。高级语言(如 Ada 和 PL/1)中的异常处理提供了支持前向恢复的系统结构。后向错误恢复通过将系统恢复到故障出现之前发生的状态来纠正系统状态。恢复块方案提供了这样的系统结构。另一种常用的容错软件技术是错误屏蔽。 NVP 方案使用几个独立开发的算法版本。最终投票系统应用于这些 N 个版本的结果,并生成正确的结果。

提高软件系统可靠性的基本方法取决于实现不同版本功能的设计多样性原则。为了防止因意外情况导致软件故障,不同的程序(替代程序)分别开发,最好基于不同的编程逻辑、算法、计算机语言等。这种多样性通常以恢复块或N版本的形式应用编程。

容错软件通过在软件级别使用保护性冗余来确保系统可靠性。获得容错软件有两种基本技术:RB方案和NVP。两种方案都基于软件冗余,假设偶然的软件故障事件很少见。

  1. 恢复块计划 -
    恢复块方案由三个元素组成:主要模块、验收测试和给定任务的备用模块。最简单的recovery block方案如下:
    Ensure T
       By P
        Else by Q1
          Else by Q2
             .
             .
             .
          Else by Qn-1
        Else Error 

    其中 T 是一个验收测试条件,预期通过成功执行主模块 P 或备用模块 Q1、Q2 来满足。 . ., Qn-1。
    当主要模块的输出经过可接受性测试时,该过程就开始了。如果验收测试确定主模块的输出不可接受,则恢复或回滚主模块执行前的系统状态。它允许第二个模块 Q1 执行。重复验收测试以检查模块 Q1 的成功执行。如果失败,则执行模块 Q2,依此类推。

    备用模块由关键字“else by”标识。当所有备用模块用尽时,恢复块本身被认为已失败,最终关键字“else error”声明了这一事实。换句话说,当所有模块都执行并且没有一个模块产生可接受的输出时,系统就会崩溃。 Pham (1989b) 研究了一种可靠性优化模型,以确定在给定单个模块的可靠性的情况下最小化总系统成本的恢复块方案中的最佳模块数量。

    在恢复块中,通过n个备选程序P1、P2、...实现编程函数。 . . ., Pn。每个替代程序生成的计算结果由验收测试 T 检查。如果结果被拒绝,则执行另一个替代程序。将重复该程序,直到 n 个备选方案之一产生可接受的结果,或者直到所有备选程序都失败。

    RB方案失败的概率, $P_{rb}$ , 如下:

        $$ P_{rb}= \prod_{i=1}^n (e_i+t_{2i})+\sum_{i=1}^n t_{1i}e_i\left ( \prod_{j=1}^{i-1} (e_j+t_{2j}) \right) $$

    在哪里
    $e_i$ = 版本 Pi 的失败概率
    $t_{1i}$ = 验收测试 i 将错误结果判断为正确的概率
    $t_{2i}$ = 验收测试 i 将正确结果判断为不正确的概率。

    上述等式对应于所有版本都通过验收测试的情况。第二项对应于验收测试 i 在 n 个版本的第 i 次试验中将错误结果判断为正确的概率。

  2. N 版编程 –
    NVP 用于在软件中提供容错。在概念上,NVP 方案类似于用于提供对硬件故障的容错的 N 模块冗余方案。

    NVP被定义为独立生成$N \geq 2$功能等效的程序,称为版本,来自相同的初始规范。程序的独立生成意味着编程工作由 N 个不与编程过程交互的个人或团体进行。只要有可能,每项工作都会使用不同的算法、技术、编程语言、环境和工具。在这种技术中,N 个程序版本在相同的输入上并行执行,结果是通过对各个程序的输出进行投票来获得的。 NVP 的优点是当版本失败时,不需要额外的时间来重新配置系统和重做计算。

    考虑一个 NVP 方案由 n 个程序和一个投票机制 V 组成。与 RB 方法相反,所有 n 个替代程序通常同时执行,并且它们的结果被发送到选择最终结果的决策机制。决策机制通常在有两个以上版本(或者,一般来说,超过 k 个版本)时是一个投票者,而当只有两个版本(k 个版本)时,它是一个比较器。 NVP的句法结构如下:

    seq
     par
      P1(version 1)
      P2(version 2)
      .
      .
      .
      Pn(version n)
      decision V 

    假设在至少有两个正确结果的情况下期望得到正确结果。

    NVP 方案的失败概率 Pn 可以表示为

        $$p_{nv}=\prod_{i=1}^n e_i+ \prod_{i=1}^n (1-e_i)e_i^{-1}\prod_{j=1}^n e_j + d$$

    这个等式的第一项是所有版本都失败的概率。第二项是只有一个版本是正确的概率。第三项 d 是至少有两个正确结果但决策算法未能提供正确结果的概率。

    值得注意的是,NVP 方法的目标是确保多个版本不太可能在相同的输入上失败。每个版本都由不同的编程团队、设计方法等独立开发,目标是版本足够不同,以便它们不会在相同的输入上经常失败。然而,多版本编程仍然是一个有争议的话题。

恢复块方案和 N 版本编程的主要区别在于前者的模块是按顺序执行的。恢复块通常不适用于实时响应非常重要的关键系统。