浅谈软件架构的可靠性

时间:2011-08-30

  软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。组件的外部可见属性是指其他组件对该组件所做的假设。

  故障隔离和自愈

  软件和Bug是一对伴生的兄弟。在一个庞大的软件系统中,即使是经验再丰富的程序员也无法保证没有任何Bug。硬件设备工作再稳定,如果不幸遇到软件Bug,也会引起异常,设备将无法正常工作。因此,故障隔离和自愈是软件设计中必须要考虑的问题。

  软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。

  软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。

  故障隔离

  故障隔离指在软件发生故障的时候,把故障造成的危害限制在范围内。为了达到此目标,Comware V7系统采用了Linux操作系统架构,绝大部分程序都是用户态程序。在Linux系统中,每个用户态程序拥有独立的进程空间,这样,一旦某个程序崩溃,并不会对其他的程序产生影响。我们称这种进程空间独立的架构设计为真正的模块化设计。

  故障自愈

  故障自愈是让系统从故障中恢复到正常的工作状态。想要做到自愈,首先要发现错误。Comware

  V7系统有一套完整的进程运行状态监控机制,可以及时发现某个用户态程序“异常”。其基本工作原理如下:

  1. 所有的用户态程序都是系统初始化进程SCM(Service Control Manager)的子进程,SCM可以感知所有子进程的状态,一旦发现某个用户态程序崩溃,会主动回收它的资源,然后重新启动一个相同的用户态程序,接替崩溃的程序继续工作。

  2. 有时一个用户态程序出了问题,无法正常工作,但还没有达到崩溃的地步,这时Comware系统中另外一套主动检测机制则起作用,过程如图1所示。

  图1 进程故障发现与自愈过程

  这个特殊的监控程序——Monitor,会周期性的检查各个用户态程序,主动向其他的用户态程序发送查询消息。其他的用户态程序在收到Monitor发来的这个消息后,会进行自检,并将自身的情况回应给Monitor,Monitor根据回复的消息得知某个用户态程序异常。在更为严重的异常情况下,用户态程序无法处理Monitor发来的消息,无法应答,Monitor在一段时间内没有收到应答,则判断这个用户态程序“异常”。

  一旦监控进程发现某个用户态程序异常,就会通知SCM,SCM重复步骤一:回收它的资源,然后重新启动一个相同的用户态程序,接替崩溃的程序继续工作。

  同时,Comware V7拥有EEM(Embedded Event Manager)系统,系统管理员可以编写脚本,在异常发生时通过EEM触发这个脚本。这样,除上述所提到的中止异常程序重新运行的动作外,还能够按照脚本做更为复杂的动作,进行异常的远程上报、进一步的异常诊断分析,或者其他任何可以通过脚本触发的动作。这样,软件系统的可维护性也大大提升。

  [#page_进程级备份#]

  进程级备份

  故障隔离与自愈功能,仅仅是单硬件系统上的行为。单硬件系统是指只有一个硬件主板的集中式系统(大部分盒式产品都属于这种情况),或者是分布式设备上的IO板,没有另外一块单板作为备份(如分布式设备的大部分接口板、业务板)。

  在硬件有冗余备份的情况下,则需要进程级备份功能,也称为进程级HA。所谓进程级备份,是相对于单板级HA而言的,主要是指参与备份和倒换的实体不再是整个单板,而是单板上的一个个用户态进程。具体过程如图2所示。

  图2 进程级HA倒换过程示意

  在主板Master和备板Slave上都有相同的用户态程序OSPF在运行,一个工作在“主”状态,一个工作在“备”状态。初始化时,OSPF的“主”进程运行在Master Board上,“备”进程运行在Slave Board上。一旦“主”状态的程序异常,Master Board上的Monitor发现以后,就会通知本板的HA,同时也通知本板SCM。SCM关闭本端的异常程序,再重新启动,并使其工作在“备”状态;而HA接到通知后,就会通知Slave Board上的HA,Slave Board上的HA在通知本板的OSPF进程由“备”升级为“主”。

  自愈过程中,系统会中止“旧”程序、重启“新”程序,而新程序从启动到正常工作需要一段时间,在某些情况下可能会很长。在这段时间内,由于程序还不能够正常工作,无法完成同外界设备的交互,会引起网络上的振荡,造成流量中断。而进程级HA,工作在“备”状态的程序“时刻准备着”接替“主”用程序,一旦发现异常,立即切换工作状态,可以大大缩短切换时间,让外界几乎感觉不到设备曾经“切换过”。

  上述两种设计方法配合使用,极大的提升了Comware V7系统的可靠性,并使得Comware V7系统的可靠性设计变得非常富有“弹性”,可以适应各种不同产品形态的需要。

  结束语

  本文介绍了比较直接的提升软件可靠性的机制和方法。实际上,在软件整体架构中,还有其他的提升可靠性的设计原则和方法,目标是设计出真正的高内聚低耦合的软件系统,减少在维护和功能扩展过程中,软件开发人员“犯错误”的机会。总之,良好的软件架构是软件可靠性的基础,是设备可靠性的重要的保障。


  
上一篇:浅谈光纤光缆产业的概况
下一篇:浅谈802.11n实现无线LAN上的语音传输

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料