软考高级《系统架构设计师》系统的可靠性设计 笔记

2,268 阅读4分钟

可靠性的基本概念

可靠性(Reliability)是指产品在规定条件下、规定的时间内完成规定功能的能力。

  • 规定时间

我们一般用系统的执行时间来算,这样比较准确。

  • 规定的条件

规定条件,一般是指软件的运行环境。在不同的环境下,软件的可靠性是不同的。有了明确的环境条件,我们就可以有效的判断软件系统是否失效,责任方是在用户方还是开发方。

  • 所要求的的功能

要求的功能不一样,软件的运行情况会有所区别,其可靠性也不同。所以要准确度量软件系统的准确性,必须先明确它的任务和功能。

可靠性的定量描述

以上三个概念,还只是定性的描述。无法定量的比较可靠性。下面我们开始探讨软件可靠性的定量描述,并相应的引入一些概念。

  • 规定的时间

也就是系统运行了时间,而没有出现问题。

  • 失效概率

是指软件到t时刻时,运行出现问题的概率。

一般来说,软件失效概率在初始状态是0,失效概率时间递增,趋近于1.

  • 可靠度

就是系统运行到t时刻还没有出现问题的概率。

可靠度 = (1 - 失效概率) 。

  • 失效强度

以上2个概念都是指在时间段内的评估结果。失效强度,是指失效概率在t时刻的导数,也就是单位时间出现问题的概率。

  • 失效率

就是在0-t时刻,系统未出现失效的情况下,t时刻出现问题的概率。

有点类似于概率论里的条件概率。

  • 平均无失效时间

软件一直有效运行的时间的平均值。

可靠性目标

以上几个概念,都还只是统计学上的意义。并没有考虑到不同失效情况的严重性。

不同的失效问题,对财务上的损失是不一样的。

不同的失效问题,对系统能力的影响是不一样的。有的失效问题,直接导致系统崩溃,有的则对系统的运行只有细微影响。

不同的失效问题,对系统的可靠性影响不一样的。

上述也是最常见的一些标准,也就是:

  • 对成本的影响
  • 对系统能力的影响
  • 对可靠性目标的影响

软件的可靠性设计与管理

也就是一些常见的提高软件可靠性的方法

冗余技术

  • 结构冗余

(1)静态冗余

有点类似于N版本程序设计

(2)动态冗余

有点类似于 恢复块设计

(3)混合冗余

上述2种的混合

  • 信息冗余

实现正常功能的情况下,添加一些额外的信息,例如一些纠错码就是信息冗余的例子。

  • 时间冗余

就是额外增加时间,重复执行软件,来消除瞬时错误的影响。

  • 冗余附加技术

就是为实现上述冗余技术需要的资源和技术。包括程序、指令、数据、存放和调度数据的空间和通道。

软件容错

  • 恢复块设计

系统中有若干个相同的模块,主模块失效后,就是用备用的模块,直到所有的模块耗尽。

这是一种后向的恢复策略,就是失效以后再做一些处理。

  • N版本程序设计

系统中有若干个功能相同的模块,这些模块完全由不同的人,不同的设计思路或者编程语言来实现。彼此之间不做任何沟通交流。N个版本的模块同时工作,投票来决定该功能最后的执行结果。

  • 防卫式程序设计

就是软件发生错误时,可以撤销错误的结果,使之恢复到正确运行的状态。

有点类似于编程语言里的try... catch。

集群技术

利用多台服务器,提供更稳定的服务。包括负载均衡集群等。