容错设计技术

软件失效后果严重的场合,容错技术,如飞行控制、空中交通管制、核反应堆控制等系统。

1.恢复块设计(动态冗余/主动冗余)

系统的执行可看作一些操作,恢复快设计就是选择一组操作(比较重要的),作为容错设计单元。构造恢复块的可以是模块、过程、子程序、程序段等等。

它采取的是后向恢复策略,后恢复策略就是,从当前出错时刻往回走,走到一个无错误的点。

其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。
各备用模块在其待机时,可与主模块一样工作,也可以不工作(一般来说是不工作的)。前者叫热备份系统(双重系统),后者叫冷备份系统(双工系统、双份系统)。

恢复块设计是一种动态冗余系统设计的方法。所谓动态冗余,就是在发现故障之后,利用冗余资源对有故障的部件进行替换,或对系统进行重构和恢复

在恢复块设计中,有N个业务功能相同的独立系统。将一个系统定为主块,其他系统定为备用块。当主块正常运行时,备用块停机。将主块的结果进行验证,如果发现结果质量不合格,那么就启用备用块1进行重新计算,如果还不行就启用备用块2,直到结果合格。

比如一个人口年龄分布情况统计,由3个冗余系统组成,主块率先进行计算,其他后备块不运行,对主块的统计结果进行验证。数据验证逻辑要求每个年龄段的占比在0%~100%之间,所有年龄段占比之和为100%。如果统计结果中80岁以上的人群占比120%,那么验证出主块计算结果有误,启用后备块1重新计算。以此类推。

恢复块设计应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和备份块之间的共性错误降到最低程度。当然,恢复块设计必须保证验证测试程序的正确性。

2.N版本程序设计
        N版本程序设计是一种静态冗余系统设计的方法。所谓静态冗余,就是利用冗余资源把故障的后果屏蔽掉,而不对原有系统结构进行改变称之为静态冗余。

        有多个独立的团队进行开发相同版本的独立系统。将N个版本的运行结果进行汇总到表决器中,利用表决机制得到一个最终结果。通常应用在信号领域、硬件系统中,比如高铁信号系统,航空系统。假设有3个版本的同时运行,当一个系统运行出的结果偏差较大,利用少数服从多数的表决机制得到正确的结果。这样可以避免系统业务的突然中断,以及结果准确。

        N版本程序设计与通常的软件开发过程不同的是,它新增了三个新的阶段:相异成分规范评审,相异性确认,背对背测试。N版本程序设计中需要关注的问题是,不同版本间的程序同步,版本程序之间的通信,表决算法(全等表决、非精确表决,Cosmetie表决)、一致比较问题、数据相异性等。

     N 版本程序的设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中#个版本的程序必须由不同的人(小组)独立设计,使用不同的方法、不同的设计语言、不同的开发环境和工具来实现,目的是减少#个版本的程序在表决点上相关错误的概率。

备注:

类似公司的决策部门的投票,避免因为一人的错误导致整个系统的风险。

一个人的决策总会有偏差、误差和错误。

1 . 与 通 常 软 件 开 发 过 程 的 区 别
与通常软件开发过程不同的是, N 版本程序设计增加了三个新的阶段,分别是相异成分规范评审、相异性确认和背对背测试。

(1) 相异成分评审。

每个版本的工作组均接收到一份相同的 S R S需求规格说明书 。

为了保证相异性,这些工作组之间不允许进行任何形式的交流,有关 S R S 的问题只能在工作组和项目管理人员之间进行交换,这种交换是通过问题单的形式进行的。对于各工作组提出的问题,由项目管理人员组成的 S R S 评审委员会对每个问题单进行研究。若是对 S R S 理解不正确,则向有关工作组进行解释;若是 S R S 本身问题,则修改 S R S , 并通知所有工作组。

(2) 相异性确认。

相异性确认在相异成分详细设计后进行,其目的是对相异性进行评估。

(3) 背对背测试。

使用同样的测试数据对 N 版本程序进行测试,将 W 个版本程序的运行结果进行比较,用以发现版本中的软件故障。

2 . 其 他 需 要 注 意 的 问 题
与通常的软件开发相比,除了开发过程不同之外, N 版本程序设计还需要注意以下问题:

(1) N 版本程序的同步。

由于各种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题。

N 版本程序的同步机制除通常的帧同步之外,还有事件同步机制,以保证输入一致性和交叉检查点的正常工作。在 N 版本程序的同步机制中,需要引入超时处理,以解决失步问题。

(2) N 版本程序之间的通信。

由于 N 版本程序设计的独立性,不同版本的数据表示可能是不同的,因此,在N个版本程序之间进行数据通信时,必须进行数据变换。可将N个版本通信接 n 处的数据规定为一种独立于各个版本的统一的数据格式,任一版本发送数据时,需将该版本的内部数据表示转换为统一的数据表示;当任一版本接收其他版本的数据时,滯将统一的数据表示变换为内部所需的数据表示。

( 3 ) 表决算法。

在 N 版本程序设计中,通常有三种表决算法:

全等表决(主要适用于布尔量的表决)、
非精确表决(允许设置一个偏差,主要适用于数值量的表决)和
Cosmetie 表 决 (适用于字符串的表决)。 
(4 ) 一致比较问题。

在进行有限精度运算的情况下,计算的结果与所使用的特定算法和计算的顺序有关,在进行计算量比较时(例如,将某计算量与一常量进行比较),虽然这些计算量能满足 S R S 要求,但比较结果可以全然不同,最终导致在 N 版本表决时不能得出正确的结果。对于这个问题,比较好的解决方法是将需要进行比较的计算量进行一•次交叉表决,其缺点是降低了 N 版本程序的相异性,并使系统的实时性变差。

( 5 ) 数据相异性。

软件的故障往往仅在数据空间的个別点发生,当对这些个别点进行修正后,则软件仍可正常工作。这是由于实际情况对数据空间的任一点,往往允许有一定的误差,只要数据点在允许的误差范围内,则可看作是逻辑上等效的。因此,当软件在某个输入数据; c 上存在故障,输出不正确时,可选用适当的数据重新表示算法,计算 出 与 逻 辑 等 效 的 输 入 数 据 然 后 对 >;进行计算,从而得到正确的输出。

3.防卫式程序设计
        对于程序中存在的错误和不一致性,通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误产生,程序能够撤销错误状态,恢复到已知的正确状态中去。比如错误检测,破坏估计、错误恢复,以及常见的 try...catch...机制等。

        防卫式程序设计就是通过经验预判哪些地方可能会出现异常,然后提前在代码中添加好对应异常处理逻辑。

4.双机容错


         双机容错包含双机热备模式,互备模式,双工模式。

        热备模式就是两台服务器都部署对应的代码包,但是起初只有服务器A运行,服务器B不允许,利用心跳线或者其他通信机制,实时让主服务器A通知备用服务器B"A还在正常运行"。当B收不到心跳消息时,服务器B开机完成业务功能。

        双机互备模式,就是两台服务器都是自身运行的主要业务的主服务器,其他业务的备用服务器。比如A服务器部署业务①和业务②,但是平常只有业务①运行,B服务器部署业务①和业务②,但是平常只有业务②行。当A服务器异常时,利用心跳机制让B启动业务①的运行。这种方法,当发生异常时资源利用率(资源压力)会变高,但是成本低。

        双机双工模式,就是两台服务器都运行业务①和业务②。这样挂掉一台业务也不会立刻中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值