新闻中心

EEPW首页 > 测试测量 > 设计应用 > 分析高可用性系统的硬件和软件设计模式

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

作者:时间:2009-02-03来源:网络收藏

N版编程面临的另一个问题在于如何为N个独立开发团队提供输入。一般情况下,将为所有的N个开发团队提供相同的规范标准。然而,一旦规范存在缺陷,那么将得到N个独立开发的包含类似软件故障的版本。如果系统发布之后,规范或使用错误得到识别,那么每个新错误都需要纠正N次,即N个不同的实现都需要加以纠正,这样维护成本就相当惊人。现在,最佳的N版编程方法是让第一流的软件开发团队,利用最可靠的底层架构、软件开发工具、技术和测试来开发出高质量的软件版本。

校验点恢复

与基于静态冗余的N版编程不同,许多软件容错均基于动态冗余。这些均包含以下四个步骤:

1. 故障检测

2. 损害评估与 限制(有时也称为“防火墙处理”)

3. 故障恢复

4. 故障处理和业务继续

步骤二中,当检测到软件错误时,一般可以采用失效保护。但软件往往极其复杂,因此消除故障软件导致的后果也并非轻而易举。事务的概念是解决该问题的一个有效工具,事务是应用状态下操作的集合,这样事务的起始点和结束点均是应用的稳定状态。例如,每个城市的市政厅都具有一个包含该城市所有居民信息的文件系统。当一对夫妻结婚时,他们的姓名和结婚日期都记录在一个命名为“已婚夫妻”的文件中。另外,记载新郎从单身到已婚状态变化的文件称为“男性居民”;记载新娘从单身到已婚状态变化的文件称为“女性居民”。如果上述3个文件中的一个未能得到有效更新或者软件在更新过程中突然崩溃,我们将不得不返回到该婚姻“事务”的起始点。否则,将只会以不稳定状态而告终,如新郎显示为已婚状态,而新娘则仍然显示为单身状态。稳定状态只出现在婚姻事务的起始点以及得到成功处理的结束点。

如果希望在容错中引入事务概念,系统必须能在事务的起始点保存系统状态,这称为检验指示。检验指示需要在开始新事务之前迅速保存系统状态,并且必须要求先前的事务以无差错状态结束。这里,一种基本的恢复策略是再执行方法:一旦事务中检测到错误,事务将进行失效保护,系统将重新载入最近保存的检验点。这样业务又能从检验点继续执行下去,并允许在该稳定状态上进行新的事务处理。然而,这样将丢失进行失效保护的事务。这类故障恢复也称为后向故障恢复,因为软件状态将还原到先前的一个无差错点上。

简单的检验指示本身也容易引发单点失效,因为在保存检验点状态时有可能出现故障,但我们可以采用一种称为检验点还原(checkpoint-rollback)的方法解决这个问题,如图2所示。图中,椭圆符号代表通过发送队列消息进行通信的软件客户和软件服务器。一个事务可以包含许多从客户机发往服务器的请求消息以及从服务器发往客户机的响应消息。在一个事务中,数据在服务器中修改。在事务的结束点,右图所示的两个恒定大容量存储设备将记录稳定的数据集和事务序列号。如果某一时刻检测到错误,而服务器已被关闭,那么服务器将重启(或启动备用服务器)。作为启动恢复过程的一部分,两个大容量存储设备还需要检验事务序列号。服务器数据将根据包含最高序列号的设备进行恢复。因为故障出现在设备检验中,因此另一大容量设备将带有较低的序列号。

流程对图5:为了控制飞机,要采用了两套数字飞行数字系统。

检验点设计模式的一个缺陷在于故障恢复时间过长。启动或重启服务器需要进行许多处理,才能恢复到检验点状态。“热备用”服务器与其自带的恒定大容量存储设备的直接协同工作可以加速恢复,该设计模式也称为流程对(process pair)设计,如图3所示。

图3中,方框图中央是一个工作原理与先前检验点情形非常相似的主服务器,客户机直接与主服务器协同工作。一旦主服务器成功地完成整个事务,将传送与新的稳定状态相关的信息至备用服务器(右端的服务器)。主服务器和备用服务器都将在恒定大容量设备中记录数据。这样,备用服务器就能保存完整事务的当前信息。当主服务器准备就绪并可供客户机使用,将向备用服务器发送常规的“心跳消息(heartbeat message)”,这些心跳消息还可以同某些检验点消息相结合。一旦检测到心跳消息流终止,备用服务器就知道主服务器已关闭或无法使用,进而作为一个新的主服务器迅速接管事务。

该设计模式不仅适用于客户机、主服务器和备用服务器均位于同一处理器或模块上的情形,还适用于三者位于不同处理器或模块的情形。

尽管流程对设计模式具有诸多优势,但仍有一些问题需要解决。例如,备用服务器丢失了检验点消息或消息的顺序不对,而且,当主服务器是物理设备的控制器并在操作中发生故障时,也会产生问题。当备用服务器接管事务时,不必知道如何完成操作,因为备用服务器并不知道主服务器失效之前究竟运行到哪一步。

需要再次重申的是,在流程对设计模式中,当主服务器失效时,仍在进行的事务将在执行中丢失或撤销。备份服务器接管主服务器的状态是主服务器失效前报告给备用服务器最后完成的事务的状态。

恢复程序块

动态软件冗余的另一种设计模式称为恢复程序块。该方法基于检验指示,但添加了对软件处理结果的验收测试。设计中必须准备数据处理的替代方法(就像在N版编程中一样),但不必对每个事务运行所有的数据处理方法。相反,可以选择一种数据处理方式作为主方式,并且首先只采用主方式处理事务。一旦主处理完成,即可运行验收测试。如果验收测试通过,则表明主数据处理方式完全有效。如果验收测试失败,则可如图4所示,继续试验下一个替代方案。

如方框图所示,必须在首次进入恢复程序块之前进行检验指示。每次失效的验收测试之后,软件必须还原到检验点状态。每次尝试替代的处理方法之后,都必须进行验收测试。这样,需要不断进行处理方式更迭,直到提供通过验收测试的处理方式。这些“良好”的输出构成了恢复程序块的最终结果。

前向故障恢复

检验点恢复、流程对和恢复程序块都是后向故障恢复方法。大多数动态软件容错都采用后向故障恢复方法,但前向故障恢复也是不错的选择。前向故障恢复的基本思想是从错误状态继续进行并通过校正清除故障。前向故障恢复基于精确的错误损失评估,因此通常取决于具体的系统。异常处理就是前向故障恢复的一个典型例子,当检测到问题,该方法就发送命令至专用的异常处理软件,而不是返回到先前某个检验点状态并继续执行下去。

替代处理是前向故障恢复的一种设计模式。当某个事务存在两种(或更多)处理选择时,就可以采用替代处理方法。在这两种处理方法中,一种方法非常精确,但计算复杂;另一种方法则相对简单并具有更高的性能。替代方法不仅可用作测试,而且当主处理方法出现故障时也可用作二级结果提供器。例如,平方根算法可作为主处理方法,而表查询插入算法则可作为替代方法。一旦运行了平方根算法,表查询插入算法不仅可用于测试平方根算法所得结果的质量,还能迅速校正这些结果中的错误。

图5中,为了控制飞机(波音777),同时采用了两套数字飞行数字系统。框图右侧的决策逻辑电路将简单飞行控制系统的输出作为测试复杂的主飞行控制系统输出的衡量标准。如果验收测试失效,简单飞行控制系统的输出也可用作失效主输出的替代,向左的箭头表示替代处理的结果也可为主处理提供反馈。

上述设计模式使采用常规商业级质量的硬件和软件为真正的系统构造程序块成为可能,这样的高性能系统无需人为干预,即可实现高达99.999%或更高的可靠性。



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭