容错

容耐力是使系统能够在失败或多个组件中发生重大功能障碍的情况下继续正确操作的弹性属性。如果其操作质量完全下降,则与故障的严重程度相比,与一个天真设计的系统相比,降低与故障的严重程度成正比,即即使是微小的故障也会导致总崩溃。在高可用性关键任务甚至至关重人物的系统中,尤其要追求容错性。当系统分解时,保持功能的能力称为优美的降解

容忍故障的设计使系统能够继续其预期的操作,可能在降低的水平上,而不是完全失败,当系统的某些部分失败时。该术语最常用于描述旨在延续或多或少全面运行的计算机系统,可能会减少吞吐量或在某些部分故障时的响应时间增加。也就是说,由于硬件软件中的问题,整个系统都不会停止。另一个领域的一个例子是设计的机动车,因此如果一个轮胎被刺破,它将继续驾驶,或者能够在由于疲劳腐蚀,制造等原因引起的损害的情况下保留其完整性的结构缺陷或影响。

单个系统的范围内,可以通过预期出色的条件并建立应对它们的系统来实现容错,并且通常是针对自动化的,以使系统趋向于无错误的状态。但是,如果系统故障的后果是灾难性的,或者使其足够可靠的成本非常高,那么更好的解决方案可能是使用某种形式的重复。在任何情况下,如果系统故障的后果如此灾难性,则系统必须能够使用归还恢复到安全模式。这类似于倒带恢复,但如果人类存在于循环中,则可能是人类的行为。

历史

第一台已知的耐断层计算机是Sapo ,它由AntonínSvoboda于1951年在捷克斯洛伐克建造。它的基本设计是通过继电器连接的磁鼓,采用了记忆错误检测的投票方法(三个模块化冗余)。沿着这条线开发了其他几台机器,主要用于军事用途。最终,他们分为三个不同的类别:可以持续很长时间的机器而没有任何维护的机器,例如在NASA空间探针卫星上使用的机器;非常可靠但需要持续监视的计算机,例如用于监测和控制核电站超级接触器实验的计算机;最后,运行时的计算机将被大量使用,例如保险公司用于其概率监控的许多超级计算机。

NASA在1960年代为阿波罗项目和其他研究方面做准备。 NASA的第一台机器进入了太空天文台,他们的第二台尝试JSTAR计算机在Voyager中使用。该计算机具有内存数组的备份以使用内存恢复方法,因此称为JPL自我测试和重复计算机。它可以检测到自己的错误并根据需要进行修复或提出冗余模块。截至2022年初,计算机仍在工作。

超依赖的计算机主要是由飞机制造商,核电公司和美国铁路行业开创的。这些需要大量正常运行时间的计算机,这些计算机将在错误的情况下允许持续操作,同时依靠人类不断监控计算机输出以检测故障的事实,这将允许继续操作。同样,IBM为NASA开发了第一台用于土星V火箭的指导的计算机,但后来在BNSFUNISYSGeneral Electric上建造了自己的。

在1970年代,该领域发生了很多工作。例如, F14 CADC具有内置的自我测试和冗余。

总的来说,早期的耐故障设计的努力主要集中在内部诊断上,因为故障表明某些事情失败了,工人可以替代它。例如,SAPO采用了一种方法,其中有故障的内存鼓在故障之前会发出噪音。后来的努力表明,要完全有效,该系统必须是自我修复和诊断的 - 隔离故障,然后实施冗余备份,同时提醒维修需求。这被称为N模型冗余,其中故障会引起自动故障保护和对操作员的警告,它仍然是当今使用的一级容忍度设计的最常见形式。

如上所述,投票是另一种初始方法,有多个冗余备份不断运行并检查彼此的结果,结果是,例如,如果有四个组件报告了5个答案,一个组件的答案和一个组件报告了6个答案,而另外四个组成会“投票”第五部分是错误的,并且已经停止使用。这被称为M多数投票中的M。

从历史上看,由于系统的复杂性和确保从断层阴性到断层阳性的及物状态的困难没有破坏操作的事实,该运动一直是从N模型的进一步移动,而更多地转移到N。 。

串联计算机(1976年)和Stratus是最初专门设计用于在线交易处理故障计算机系统的公司之一。

例子

Twitter的原始移动网络前端“ M2 Mobile Web”后来在没有JavaScript支持和/或不兼容的浏览器的情况下用作后备旧版本,直到2020年12月。

硬件容错的容忍度有时需要在系统仍在运行的同时将损坏的零件取出并用新零件替换(在计算中称为热交换)。这种用单个备份实现的系统称为单点耐受性,代表了绝大多数易于故障的系统。在这样的系统中,失败之间的平均时间应该足够长,以使操作员有足够的时间在备份之前修复破损的设备(平均维修时间)。如果失败之间的时间尽可能长,这是有帮助的,但这在容易耐药的系统中并不需要。

容错在计算机应用中取得了尤其成功。串联计算机在此类机器上建立了整个业务,该机器使用单点公差来创建其不间断系统,并在多年内进行了摄入

故障安全体系结构也可能包含计算机软件,例如按过程复制

数据格式也可以设计为优雅地降解。例如, HTML的设计旨在向前兼容,允许Web浏览器忽略新的和不支持的HTML实体,而不会导致文档无法使用。此外,某些网站,包括Twitter等流行平台(直到2020年12月),提供了可选的轻巧前端,该前端不依赖JavaScript并具有最少的布局,以确保广泛的可访问性外观,例如在游戏机上使用Limited Web的游戏机浏览功能。

术语

在具有透明度的图像中设计优雅退化的一个例子。前两个图像中的每个图像都是在识别透明度的查看器中查看复合图像的结果。底部的两个图像是观众不支持透明度的结果。因为丢弃了透明性掩码(中心底部),所以仅保留覆盖层(中心顶部);左侧的图像旨在优雅地降解,因此,如果没有其透明信息,则仍然是有意义的。

即使一个或多个组件失败了,耐断层的系统也可能会在相同的性能水平上继续。例如,即使网格功率失效,具有备用电气发电机的建筑物也将为墙壁插座提供相同的电压。

旨在使安全或失败的系统设计或优雅地失败的系统,无论是在降低水平上还是完全失败,都可以保护人,财产或数据免受伤害,损害,入侵或数据披露。在计算机中,程序可能会通过执行优美的出口(而不是不受控制的崩溃)来防止安全,以防止遇到错误后数据损坏。在“失败良好”和“失败严重”之间也有类似的区别。

旨在体验优雅降解失败软(用于计算,类似于“失败安全”)的系统在某些组件失败后的性能水平降低。例如,建筑物可能会在降低的水平和电梯下以降低速度操作照明,如果网格功率失效,而不是完全将人捕获到黑暗中,或者继续全力以赴。在计算优雅降级的一个示例中,如果网络带宽不足以流式传输在线视频,则可以将低分辨率版本代替高分辨率版本。渐进增强是计算中的一个示例,其中网页以基本的功能格式提供,可用于较旧,小屏幕或有限的能力网络浏览器,但在一个增强版本的浏览器中,能够处理其他技术或具有较大显示屏的浏览器可用的。

在容忍故障的计算机系统中,尽管有错误,异常或无效的输入,但被认为可靠的程序旨在继续操作,而不是完全崩溃。软件脆性与鲁棒性相反。尽管某些链接或节点失败,但弹性网络仍继续传输数据。同样,弹性建筑物和基础设施也有望防止在地震,洪水或碰撞等情况下完全失败。

具有较高故障透明度的系统将提醒用户发生组件故障,即使它继续以全面的性能运行,因此可以修复失败或预计迫在眉睫的完全失败。同样,失败 - 快速组件被设计为在失败的第一点报告,而不是允许下游组件失败并生成报告。这可以更轻松地诊断潜在的问题,并可以防止在破裂状态下操作不当。

单个断层条件是一种防止危险的方法有缺陷的情况。如果不可避免地会在另一个单个故障情况下导致单个故障条件,则两个故障被视为一个单一故障条件。消息来源提供以下示例:

单一的防御设备中有缺陷或单个外部异常情况下,单一的防护措施是一种条件,例如,现场零件和应用零件之间的短路。

标准

为每个组件提供易于故障设计的设计通常不是一个选项。相关的冗余带来了许多惩罚:体重,大小,功耗,成本以及设计,验证和测试的时间增加。因此,必须检查许多选择,以确定哪些组件应容忍:

  • 组件有多关键?在汽车中,无线电并不关键,因此该组件对容错的需求较小。
  • 组件失败的可能性有多大?某些组件,例如汽车中的驱动轴,不太可能失败,因此不需要容错。
  • 使组件容忍耐受的昂贵有多昂贵?例如,在经济上和体重和空间方面,需要冗余的汽车发动机都可能太昂贵了。

通过所有测试的组件的一个示例是汽车的乘员约束系统。虽然我们通常不考虑主要的乘员约束系统,但这是重力。如果车辆翻倒或经历了严重的G福利,则这种主要的乘员约束方法可能会失败。在此次事故中限制乘员对于安全至关重要,因此我们通过了第一个测试。在安全带之前,导致乘员射血的事故很普遍,因此我们通过第二次测试。在经济和体重和空间方面,冗余约束方法等冗余约束方法的成本都很低,因此我们通过了第三次测试。因此,在所有车辆中添加安全带是一个好主意。其他“补充约束系统”(例如安全气囊)更昂贵,因此通过较小的利润进行测试。

实践该原则的另一个出色和长期的例子是制动系统:虽然实际制动机制至关重要,但它们并不特别容易突然(而不是渐进式)失败,并且无论如何都必须重复在所有车轮上均匀施加制动力。进一步加倍的主要组件也将是昂贵的,它们会增加重量。但是,通常使用电缆(可以生锈,拉伸,果酱,快照)或液压液(可以泄漏,煮沸和发展气泡,吸收水,因此失去有效性,类似的关键系统用于驱动器控制下的制动器本质上的稳固性较差。 )。因此,在大多数现代汽车中,足迹液压刹车电路对角度分开以给出两个较小的故障点,损失只会使制动器降低50%,并且不会引起像直的前后前后或左前的危险制动器失衡分裂,如果液压电路完全失效(发生了相对较少的发生),则有电缆施加的驻车制动器的形式存在故障安全,可以操作原本相对较弱的后刹车,但仍然可以使车辆安全停止与传输/发动机制动结合使用,只要对其的需求与正常的交通流量保持一致。累积的脚刹车失败与在紧急情况下需要严厉制动的累积组合可能会导致碰撞,但仍然比以前较低的速度碰撞。

与脚踏踏板激活的服务制动器相比,驻车制动器本身是一个不太关键的物品,除非将其用作脚刹的一次性备份,否则如果发现它在没有功能的情况下,则不会立即造成危险应用时刻。因此,它本身没有内置的冗余(并且通常使用更便宜,更轻巧但较不硬的电缆驱动系统),如果发生在山上,则可以使用足迹来暂时固定车辆仍然保持在开车去寻找一条平坦的道路之前,要停下来。另外,在浅梯度上,可以将变速箱转移到公园,反向或第一档,以及用于保持其静止的传输锁 /发动机压缩,因为它们不需要将其包括在内以首先将其停止。

在摩托车上,通过更简单的方法提供了类似的故障安全水平。首先,前后制动系统是完全分开的,无论其激活方法如何(可以是电缆,杆或液压),可以使一个完全失败,而另一个不受影响。其次,与其汽车表弟相比,后制动器相对较强,在某些运动模型上是功能强大的光盘,即使通常的意图是针对前系统提供绝大多数制动力的动力。由于整体车辆的重量更为中心,后轮胎通常更大,并且具有更好的牵引力,因此骑手可以向后倾斜以增加重量,从而可以在车轮锁之前使用更多的制动力。即使前轮应使用液压光盘以进行额外的制动力和更容易的包装,较便宜,较慢的实用级机器上,后方通常是原始的,有些效率低下,但由于易于使用而具有出色的杆杆。以这种方式将脚踏板连接到方向盘,更重要的是,即使机器的其余部分在使用后的头几年之后,灾难性故障的几乎不可能,即由于被忽视的维护而崩溃。

要求

容错的基本特征需要:

  1. 没有单个故障- 如果系统遭受故障,则必须在维修过程中继续操作而不会中断。
  2. 故障组件的故障隔离- 当发生故障时,系统必须能够将故障分离为有问题的组件。这需要添加仅出于断层隔离目的而存在的专用故障检测机制。从故障条件中恢复需要对故障或失败组件进行分类。国家标准技术研究所(NIST)根据地方,原因,持续时间和效力对故障进行了分类。
  3. 防止故障传播的故障遏制 - 某些故障机制可能会导致系统失败,从而传播到系统的其余部分。这种失败的一个例子是“流氓发射器”,可以淹没系统中合法的沟通并导致整体系统故障。需要防火墙或其他隔离流氓发射器或保护系统的失败组件的机制。
  4. 回归模式的可用性

此外,耐故障系统的特征是根据计划的服务中断和计划外的服务中断。这些通常是在应用级别的,而不仅仅是在硬件级别上测量的。功绩的数字称为可用性,以百分比表示。例如,五个九个系统将在统计上提供99.999%的可用性。

容忍故障的系统通常基于冗余的概念。

容错技术

对关键系统所需的公差的研究涉及大量跨学科工作。系统越复杂,必须考虑和准备所有可能的交互。考虑到高价值系统在运输,公用事业和军事方面的重要性,涉及研究的主题领域非常广泛:它可以包括诸如软件建模和可靠性或硬件设计等明显的主题,例如随机模型,图理论,正式或排除逻辑,并行处理,远程数据传输等。

复制

备用组件以三种方式解决了容错的第一个基本特征:

  • 复制:提供同一系统或子系统的多个相同的实例,并行将任务或请求定向或请求,并根据法定人数选择正确的结果;
  • 冗余:提供同一系统的多个相同实例,并在失败时切换到其余实例之一(故障转移);
  • 多样性:提供相同规范的多个不同的实现,并使用它们(例如复制的系统)来应对特定实现中的错误。

除RAID 0外, RAID冗余磁盘的所有实现都是使用数据冗余的易于故障存储设备的示例。

锁紧耐故障的机器使用并行运行的复制元素。在任何时候,每个元素的所有复制都应处于同一状态。每个复制都提供相同的输入,并预期相同的输出。使用投票电路比较复制的输出。每个元素重复的机器称为双模块化冗余(DMR)。然后,投票电路只能检测到不匹配并恢复依赖于其他方法。每个元素复制的机器称为三模块冗余(TMR)。当观察到一对一的投票时,投票电路可以确定哪种复制是错误的。在这种情况下,投票电路可以输出正确的结果,并丢弃错误的版本。之后,假定错误复制的内部状态与其他两个不同之处不同,并且投票电路可以切换到DMR模式。该模型可以应用于任何大量的复制。

锁紧耐故障的机器最容易完全同步,每个复制的每个门都会在时钟的相同边缘上进行相同的状态过渡,而对复制的时钟则完全处于相位。但是,无需此要求就可以构建锁定系统。

将复制带入同步需要使其内部存储状态相同。它们可以从固定的初始状态(例如重置状态)开始。或者,可以将一个复制品的内部状态复制到另一个复制品。

DMR的一种变体是配对。两个重复的元素作为一对,带有一个投票电路,检测其操作之间的任何不匹配并输出一个信号,表明存在错误。另一对的操作完全相同。最终电路选择了对未宣布其错误的输出。配对需要四个复制品,而不是TMR的三个复制品,但已在商业上使用。

典型的计算

符合故障的计算一种使计算机程序能够继续执行的技术。该技术可以在不同的情况下应用。它可以通过将制造的值返回程序来处理无效的内存读取,从而依次使用制造价值,而忽略了它试图访问的以前的内存价值,这与典型的内存检查器形成了鲜明的对比,该记忆检查器告知程序程序错误或中止程序。

该方法具有性能成本:因为该技术重写代码以插入动态检查地址有效性,因此执行时间将增加80%至500%。

恢复牧羊

恢复Shepherding是一种轻巧的技术,可以使软件程序能够从其他致命错误(例如NULL指针解除)中恢复,并除以零。与失败的计算技术相比,恢复牧羊在编译程序二进制中起作用,无需重新编译以进行程序。

它使用恰当的二进制仪器框架引脚。当发生错误,修复执行,跟踪维修效果时,随着执行的继续,它将附加到申请过程上,并在申请过程中包含维修效果,并在所有维修效果从过程状态中冲洗掉后从该过程中脱离。它不会干扰程序的正常执行,因此会忽略不计的开销。对于18个系统收集的现实世界中的17个,无效的错误和按零错误划分,原型实现使应用程序能够继续执行,以在错误触发输入的情况下为其用户提供可接受的输出和服务。

断路器

断路器设计模式是一种避免分布式系统中灾难性故障的技术。

冗余

冗余是在无故障环境中不必要的功能功能的提供。这可能包括一个组件失败,它们会自动“启动”的备份组件组成。例如,大型货车可能会失去轮胎而不会产生任何重大后果。它们有很多轮胎,没有一个轮胎很关键(除了前轮胎以外,这些轮胎用于转向,但总共承担的负载通常比其他四到16个少,因此失败的可能性较小)。约翰·冯·诺伊曼(John von Neumann)在1950年代开创了纳入冗余以提高系统可靠性的想法。

可能有两种冗余:空间冗余和时间冗余。空间冗余提供了不需要无故障操作的其他组件,功能或数据项。根据添加到系统中添加的冗余资源的类型,将空间冗余进一步分为硬件,软件和信息冗余。随着时间的冗余,重复计算或数据传输,并将结果与​​先前结果的存储副本进行比较。此类测试的当前术语称为“在服务容错测试或简称ISFTT中”。

缺点

容忍故障设计的优势是显而易见的,而其许多缺点不是:

  • 在同一组件中对故障检测的干扰。为了继续上述乘用车示例,使用任何一个容忍故障的系统,当轮胎被刺穿时,驾驶员可能并不明显。通常使用单独的“自动故障检测系统”来处理这一点。在轮胎的情况下,气压监测器检测到压力损失并通知驾驶员。替代方案是“手动故障检测系统”,例如在每个站点手动检查所有轮胎。
  • 干扰另一个组件中的故障检测。该问题的另一个变化是,一个组件中的容错性阻止了其他组件中的故障检测。例如,如果组件B根据组件A的输出执行某些操作,则B中的容错可以隐藏A的问题。看来新组件B是问题所在。只有在仔细审查系统后,才会很明显根问题实际上是在组件A中。
  • 降低故障校正的优先级。即使操作员意识到故障,具有容忍故障的系统也可能会减少修复故障的重要性。如果未纠正故障,当耐故障组件完全失败或所有冗余组件也失败时,这最终将导致系统故障。
  • 测试难度。对于某些关键的耐断层系统,例如核反应堆,没有简单的方法可以验证备份组件是否功能。最臭名昭著的例子是切尔诺贝利,其中操作员通过禁用初级和次要冷却来测试紧急备份冷却。备份失败,导致核心崩溃和辐射的大量释放。
  • 成本。耐断层组件和冗余组件均倾向于增加成本。这可能是纯粹的经济成本,也可以包括其他措施,例如体重。例如,乘员飞船具有如此多的冗余和耐断层的组件,以至于它们的体重在不需要相同水平的安全性的未蛋白系统上急剧增加。
  • 下组件。容忍故障的设计可能允许使用下组件,否则这将使系统无法使用。尽管这种做法有可能减轻成本的增加,但使用多个下部组件的使用可能会将系统的可靠性降低到等于甚至比可比的非耐受耐受性系统的水平。

相关术语

容错和很少有问题的系统之间存在差异。例如, Western Electric Cross Bar系统的故障率为每40年,因此具有高度的断层抗性。但是,当确实发生故障时,它们仍然停止完全操作,因此并不是容错的

也可以看看