分析高可用性系统的硬件和软件设计模式
图3中,方框图中央是一个工作原理与先前检验点情形非常相似的主服务器,客户机直接与主服务器协同工作。一旦主服务器成功地完成整个事务,将传送与新的稳定状态相关的信息至备用服务器(右端的服务器)。主服务器和备用服务器都将在恒定大容量设备中记录数据。这样,备用服务器就能保存完整事务的当前信息。当主服务器准备就绪并可供客户机使用,将向备用服务器发送常规的“心跳消息(heartbeat message)”,这些心跳消息还可以同某些检验点消息相结合。一旦检测到心跳消息流终止,备用服务器就知道主服务器已关闭或无法使用,进而作为一个新的主服务器迅速接管事务。
该设计模式不仅适用于客户机、主服务器和备用服务器均位于同一处理器或模块上的情形,还适用于三者位于不同处理器或模块的情形。
尽管流程对设计模式具有诸多优势,但仍有一些问题需要解决。例如,备用服务器丢失了检验点消息或消息的顺序不对,而且,当主服务器是物理设备的控制器并在操作中发生故障时,也会产生问题。当备用服务器接管事务时,不必知道如何完成操作,因为备用服务器并不知道主服务器失效之前究竟运行到哪一步。
需要再次重申的是,在流程对设计模式中,当主服务器失效时,仍在进行的事务将在执行中丢失或撤销。备份服务器接管主服务器的状态是主服务器失效前报告给备用服务器最后完成的事务的状态。
恢复程序块
动态软件冗余的另一种设计模式称为恢复程序块。该方法基于检验指示,但添加了对软件处理结果的验收测试。设计中必须准备数据处理的替代方法(就像在N版编程中一样),但不必对每个事务运行所有的数据处理方法。相反,可以选择一种数据处理方式作为主方式,并且首先只采用主方式处理事务。一旦主处理完成,即可运行验收测试。如果验收测试通过,则表明主数据处理方式完全有效。如果验收测试失败,则可如图4所示,继续试验下一个替代方案。
如方框图所示,必须在首次进入恢复程序块之前进行检验指示。每次失效的验收测试之后,软件必须还原到检验点状态。每次尝试替代的处理方法之后,都必须进行验收测试。这样,需要不断进行处理方式更迭,直到提供通过验收测试的处理方式。这些“良好”的输出构成了恢复程序块的最终结果。
前向故障恢复
检验点恢复、流程对和恢复程序块都是后向故障恢复方法。大多数动态软件容错都采用后向故障恢复方法,但前向故障恢复也是不错的选择。前向故障恢复的基本思想是从错误状态继续进行并通过校正清除故障。前向故障恢复基于精确的错误损失评估,因此通常取决于具体的系统。异常处理就是前向故障恢复的一个典型例子,当检测到问题,该方法就发送命令至专用的异常处理软件,而不是返回到先前某个检验点状态并继续执行下去。
替代处理是前向故障恢复的一种设计模式。当某个事务存在两种(或更多)处理选择时,就可以采用替代处理方法。在这两种处理方法中,一种方法非常精确,但计算复杂;另一种方法则相对简单并具有更高的性能。替代方法不仅可用作测试,而且当主处理方法出现故障时也可用作二级结果提供器。例如,平方根算法可作为主处理方法,而表查询插入算法则可作为替代方法。一旦运行了平方根算法,表查询插入算法不仅可用于测试平方根算法所得结果的质量,还能迅速校正这些结果中的错误。
图5中,为了控制飞机(波音777),同时采用了两套数字飞行数字系统。框图右侧的决策逻辑电路将简单飞行控制系统的输出作为测试复杂的主飞行控制系统输出的衡量标准。如果验收测试失效,简单飞行控制系统的输出也可用作失效主输出的替代,向左的箭头表示替代处理的结果也可为主处理提供反馈。
上述设计模式使采用常规商业级质量的硬件和软件为真正的高可用性系统构造程序块成为可能,这样的高性能系统无需人为干预,即可实现高达99.999%或更高的可靠性。
- LabVIEW程序设计模式(三)—消息队列型状态机模式(01-09)
- LabVIEW程序设计模式(三)—用户界面事件模式(01-09)
- LabVIEW程序设计模式(四)—状态机和事件结构的结合(01-09)
- LabVIEW程序设计模式(五)—生产者/消费者模式(2)_VI的可重入性(01-09)
- LabVIEW程序设计模式(五)—生产者/消费者模式(3)(01-09)
- LabVIEW设计模式系列——功能全局变量(01-06)