微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 分析高可用性系统的硬件和软件设计模式

分析高可用性系统的硬件和软件设计模式

时间:02-03 来源:互联网 点击:

器和二级表决器等复杂系统,但本文不准备进行深入讨论。

对于采用动态冗余的容错,复制模块仍然只需具有常规的商用可用性。一种实现方法是采用由一个被激活模块和一个备用模块组成的冗余对。另一方法则采用一簇模块,这些模块不必是其他模块的精确复制,可以具有不同的特征、接口和容量。这簇复制需要采用失效接替策略,这样当主模块出现故障时,就能确定如何对多个模块进行管理。下面给出了一些选择:

1. 热备用。主模块在系统中运行时,备份模块处于“热备用”状态,一旦主模块出现故障,备份模块将启动并接管主模块。例如,可以采用这种方法设计高可用性的互联网服务器。

2. 转动备用。主模块在系统运行时,可以具有许多备用模块。一旦主模块出现故障,一个备用模块将接管系统的运行。航天飞机上飞行计算机的设计就基于该原理:主模块由两台总稳定工作的计算机组成,其中一个备用模块是一个相似对(similar pair),而第二个备用模块则是一台只能根据操作员指令接管系统的计算机。

3. 非关键模块的失效接替。主模块占用系统的关键资源,备用模块则占用其他非关键资源。一旦主模块出现故障,备用模块就能接管主模块占用的大部分关键资源。日常生活中我们也常常这么做:当我们试图发送一封紧急的电子邮件时,如果计算机的高速互联网连接出现故障,我们会立即切换到旧式的调制解调器。

4. 共同接管。每个模块均运行自带的关键资源,而且一旦某个模块发生故障,其他模块还能接管故障模块的关键资源。例如,在功能增强的心护理室中,每8位病人将设置一台心脏监控计算机。如果一台心脏监控计算机崩溃,那么邻近的计算机也能对故障计算机监控的8位病人进行监控(或许性能将有所降低)。

正确的失效接替实现非常关键。如果故障的主模块需要抛弃故障并继续执行,而同时另一模块也试图接管其业务,那么后果将是灾难性的,因为它们的业务有可能产生冲突。如果主模块抛弃故障后停止执行,而又没有其他模块接管其业务,这样的后果同样是灾难性的。因此失效接替的验证和测试非常关键,尽管我们当中的许多人并不热衷于此。

软件冗余

大多数硬件故障都是随机产生并由物理缺陷导致,这些缺陷要么在生产过程中维持不变,要么随器件的老化而不断变化,要么将受到外部物理环境的冲击。相反,软件故障与物理条件无关,因为软件不会老化。与硬件故障不同,软件故障源自对软件设计或实现中固有故障的软件路径调用。由于软件通常比硬件复杂,因此软件中可能具有比硬件多得多的内置缺陷,从而导致软件中的故障更多,容错设计的成本也更高。

N版编程(N-version programming )是久经考验的一种软件容错设计方法。20世纪70年代偶然接触到该方法时,那时还被称为异质软件(dissimilar software)。这是硬件N路复用(如图1所示)的等价软件实现。但该方法比硬件N路复用的复制机制复杂,N路复用中相同软件的N个复制将包含相同的故障并产生N次相同的错误。在N版编程中,如果N套软件功能需要并行运行,那么它们应当是该功能的N个不同实现,而且是由N个单独的开发团队独立开发完成。这就是N版编程的基本原理。

1996年6月,当首次发射的阿丽安娜-5卫星发送火箭上升到4000米高空时,突然发生了爆炸。该事故的原因在于火箭的惯性参考系统(这是数字飞行控制的一部分)发生了故障。尽管惯性参考系统中引入了硬件冗余,但软件冗余没有得到正确的处理。阿丽安娜-5带有两台惯性参考计算机,一台处于工作状态,而另一台则处于“开机”备用状态。这两套系统并行运行,并具有完全一样的硬件和软件。系统上的软件也与先前已经成功发射的阿丽安娜-4几乎一模一样,但由于阿丽安娜-5上的某些飞行参数值比阿丽安娜-4大,因此数据发生了溢出。解决问题的方法是关闭计算机,由于冗余计算机也在运行相同的软件,因此也将受到数据溢出的冲击,从而很快关闭,这样整个惯性参考系统就完全崩溃。结果,引擎的喷管被回旋至极限位置,导致火箭突然转向,并在自毁之前裂成两半。这种处理数据溢出错误的方法适用于处理随机出现的硬件错误,但不适用于处理两台计算机上出现的类似软件错误。N版编程可以避免两台计算机出现类似的软件错误。

在20世纪70年代,N版编程(N-version programming)是先进的软件容错设计方法。此后,这种设计模式引发了一系列问题:随着该技术的采用,软件开发成本直线飙升,因为必须成立N个单独的团队开发N套相互独立的软件。如果期望降低成本,则将陷入所谓的“平均智商( Average IQ)”怪圈:较低成本的开

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top