> 文章列表 > 系统可用性——冗余就够了吗?

系统可用性——冗余就够了吗?

系统可用性——冗余就够了吗?

导言

为了提高系统的可用性,如今很多集成商都号称采用了冗余设备来满足客户需求,乍一看产品性能提高不少。当我们再回顾其产品时,不禁要思考两个问题:

  1. 系统真的做到冗余了吗?
  2. 仅仅使用冗余就够了吗?

回答这两个问题前,我们首先要理解冗余的定义。冗余,是指重复配置系统的一些部件,当发生故障时,冗余配置的部件介入并承担故障部件的工作,由此减少系统的故障时间Down Time,系统自动备援。

在安全相关系统中经常会提及单点失效(single point of failure),即当系统中某一点失效时,会导致整个系统都无法运作;对于高可用性的系统来说,是不会允许单点失效引起整体系统故障的情形出现的。一般可以通过冗余的方式增加具有相同功能的部件,只要这些部件没有同时失效,系统仍可正常运行,从而提高了系统的可用性。

首先,冗余系统的布置主要有两种不同的方式:

  • 1: n-对称冗余布置

在1:n-冗余布置的系统中,共n+1个具有相同机能的部件组成一个整体单元。当n个主机中的某一个发生故障时,备机则自动切换介入系统的工作;当然出现新的部件故障时,整个系统则将无法正常工作。典型的例子是目前很火热的双机热备:在系统正常工作情况下,主机为应用系统提供服务,备机监视主机的运行情况,当主机出现异常时,备机将在短暂时间内接管主机的工作,继续支持应用系统服务,保证系统不间断的运行。(插播:所以至少从功能上来讲,冗余系统的主备件功能是不同且非独立的,包括后面我们会讲解的2oo2系统,它的两个通道也不是独立的,因为单通道的功能其实是依赖于另外一个通道的。)

  • 非对称冗余布置

与之相对的布置方式是非对称冗余,备件会短暂或长久执行原有主机的工作,但功能却与原系统有差异,备机一般只执行系统的部分功能。这种方式一般作为临时处理系统故障的方案,在一定时间后还需要人工介入替换故障部件,以恢复系统全部功能。

其次,冗余系统按类型来分,通常可分为热备、温备和冷备。

备件替代故障的主件执行相关工作所需的时间越短,则整个系统的可用性越高。这种替代的类型可分为全自动的(无需人的介入),半自动的(几乎实时的人工远程控制)以及完全人工现场替换故障部件;系统的平均修复时间(MTTR,mean time to repair)越短,则该备用越“热”。这与我们通常划分冗余类型的定义稍有“歧义”,传统的冗余类型会分成主动和被动形式,其实主动切换(hot-standby)意味着更短的MTTR,而被动切换需要用户使用程序(warm-standby)或用户手动切换(cold-standby),它们必然需要更长的MTTR.

讲到这里先点个题——系统可用性,指的是考察某个特定的时间段内系统或部分系统能够正常运行的概率,例如某产品一年内平均故障8.75个小时,则其可用性为99.9%(100%-8.75h : (365d*24h/d) )。

可以简单的说,安全相关系统组件由硬件和软件构成,除了应用程序软件外,系统还需要操作系统和特定配置的帮助。据以往运营商的经验来看,硬件可用性往往是高于软件可用性的。这也就是我们为何要在软件或者系统失效(对于软件而言,所有的失效都是系统失效)上花更多力气的原因。

例如,一个路由器一年之内就会坏掉几次,其中因硬件故障(例如磨损、过热或者设备故障)而导致路由器故障的情况只有一次,其余所有故障都是操作系统中的漏洞(如程序员导致的)或者配置错误(如管理员导致的)。在10个小时的”downtime“中,硬件故障所占比例大概为1个小时,其余的九小时则都是直接或间接地归咎于人为操作所引起的系统失效。

目前,很多集成商把热备与冗余混淆,这是有区别的,真正的双机热备,是两个处理器都接受信号,只是一个不向外部送信号,这样切换的时间非常短,比如在紧急停车系统中的应用;而其它一般冗余系统有一个切换的时间,只有一个处理器出现问题了,另一个处理器才接受信号,切换时间比较长。普通热备处理相对简单些,比如在两个处理器中装入相同的程序,外部的信号通过继电器等分两路送到处理器中。

冗余是一个比较宽泛的技术概念,做到冗余的同时我们需要考虑其备援的时间,以及因冗余配置而给系统带来的主备切换、编程和配置等方面产生的可能的新的错误,充分思考冗余机制本身的问题,而不仅仅是无脑增加备件,因为冗余系统是指数级增长的复杂系统。

首先,我们在可用性这边讲SIL是极其不专业的行为。但SIL安全完整性等级是一个连接定量与定性的很好的桥梁。安全完整性针对的失效也是系统的和随机的失效。目前针对随机失效已经有相当多的技术来控制因随机失效引起的危害,尤其是硬件系统。系统失效则是未能获得预期的输出,通常是因为错误的规范或开发流程-相同的输入和上下文信息相同时系统失效可重复发生。一般都是通过检查、应用标准流程、代码等来控制系统失效引起的危害。这些流程或技术一定程度上也会减少随机失效。再次提及,对于软件而言,所有的失效都是系统失效。

SIL3/4的技术思维

1、对于SIL3/4来说,EN50129一直强调的是all credible faults(所有可信的有危害的故障)。即,要么证明此故障或故障组合的发生是不可置信的(不能发生),要么在分析中要必然对其进行考虑(认为必定发生)而不论元器件失效率的值有多低。这是因为,通常我们看到的元器件的失效率是一个理想值,不能完全呈现真实的失效情况,很多时候它甚至不是问题的主要矛盾。这个值实际上受到许多部分可量化和不可量化的限制,如:间歇故障、瞬态故障、芯片设计/工艺/生产系统性失效、模型限制、超规使用、存储/运输/使用中的环境应力等等。因此在SIL3/4的结构性要求中,对此不完全采信,也就是认为,即使失效率值足够低,其残余风险仍然不可接受。对SIL3/4,先认为可能发生的失效一定能发生,然后再考虑是否需要进一步处理,直到4重故障累积(不进一步处理的原因只是因为产品的预计生存期已远小于要求的SDT)。

2、与基础规范EN61508和其它行业规范“容许对检不出的hazardous失效不处理” 不同, EN50129要求尽量对hazardous失效进行处理(检出或累积检出),直到没必要再检。所以,EN50129没有“不可检的概率” 的概念。也就是衡量是否需要进一步处理的判断依据是单点或多重故障的SDT(当然也和FR有间接关系),因此说SDT是定性和定量之间的桥梁。
3、如果一个item的fault没有被及时的detection and negation,则分析中认为其被累积到下一个fault的发生是必然的(适用于单点和多重故障)。

4、故障模式包括间歇性故障和瞬态故障(soft error)。

5、悲观的思维方式——如果不确定或不能证明,那就取最不利的;计算时应考虑更不利的失效率(单点失效或多重失效)。

6、如果不确定故障原因,那就按最严格的方式处理;不允许在有危害的状态下工作。

7、故障-安全设计理念,防御性设计思维。考虑防护本身的失效,防护措施尽量为inherent fail-safety properties 。对特定风险采取针对性的独立可靠的措施进行防护,不同层的防护措施也应独立可靠。“独立可靠”意为可独自将相应风险降到足够低的程度。注意检查项/防护与被检项/被防护之间的独立性。自己的事情自己做,努力做最好的自己;清晰有效的层层防护,防护分层不击穿;检察官不能和嫌疑人在一个碗里吃饭,不能既是医生又是精神病患者。尽量用technical means解决问题。

8、单点或二重故障必考虑(处理);三重故障先识别再判断是否考虑(处理);四重故障先识别再判断为不处理。

9、要求安全态的保持:进一步的故障不能取消安全态;退出安全态只能发生在受控的方式下。安全态的分级和严格安全态。