假定某一个大型系统的设计提出了极高的可靠性要求,因此在架构设计的时候,就需要
针对可靠性问题讨论具体的解决方案。
一、进程间提升可靠性的方法
大型系统一般是按照多处理器环境设计的,逻辑上组成处理器组,处理器组的目的是运
行一个或者多个应用程序的副本,这一思想对于支持容错性和可靠性是非常重要的。在多个
运行副本中,一个为主,称为主地址空间(PAS),其它的为辅,称为备用地址空间(SAS)。
一个主地址空间,和相应的备用地址空间的集合称为操作单元,某个操作单元完全驻留
在同一处理器组的处理器中,一个处理器组最多可以包含 4 个处理器。
没有用这种容错方式实现的系统称为功能组,功能组可以根据需要出现在各个处理器
上。
应用程序根据可靠性的需要,可以是操作单元,也可以是功能组(FG)。
操作单元的接管过程如下:
操作单元的 PAS 代表整个操作单元接收消息并做出响应,然后 PAS 对自己的状态和相
应的 SAS 的状态进行更新(可能会向 SAS 发送多条消息)。
如果 PAS 出现了故障将按如下步骤完成接替工作:
1,把一个 SAS 提升为新的 PAS。
2,为 PAS 重新设置该操作单元以及客户机的关系(实际上是操作单中的一个固定的列
表),在这个过程中,PAS 要向各个客户机发送消息,内容为:原来提供服务的操作单元发
生故障,正在等待 PAS 发送消息吗?如果是,新的 PAS 就处理收到的任何服务请求。
3,启动一个新的 SAS,代替原有的 PAS。
4,新启动的 SAS 把自己的存在告知于新的 PAS,新的 PAS 就会向这个 SAS 发送消息,
使它保持最新的状态。
如果在 SAS 内部发生错误,就需要在另外的处理器上启动新的 SAS,新的 SAS 要与 PAS
协调工作,并接受状态信息。
仔细研究这样的需求和动作,就可以设计出合适的架构来。
如果需要添加一个新的操作单元,需要采用如下步骤进行设计:
1,确定必要的输入数据及所在的位置。
2,确定哪些操作单元需要用到这个新的操作单元的输出数据。
3,以一种非循环方式把这个操作单元的通信模式加入到整个系统中,以避免死锁。
4,设计消息,实现所期望的数据流。
5,确定内部状态数据(包括从 PAS 到 SAS 的状态数据)。
6,把状态数据划分为能够很好的适应网络要求的消息。
7,定义必须用到的消息类型。
8,规划 PAS 失败的时候的切换,要对更新数据作合理的规划,保证能够完全的反映出
各种状态。
9,保证切换发生的时候数据的一致性。
10,保证需要完成的处理步骤,能在一次系统“心跳”的时间内完成。
11,规划和其它操作单元的数据共享和数据锁定协议。
有经验的项目组成员可以按照这个步骤开展工作,为了加速开发,可以构造一个“代码
模板”,以加快开发速度和减少错误。
无论是客户端还是服务方,都可以通过这个方法提升模块的可靠性。
二、保证可靠性的分层结构
对于可靠性极高的系统,由于不能系统出现故障的时候冷启动,而是需要尽可能快地切
换到备用构件上,这就出现了新的架构层次结构,称之为容错层次结构,该结构描述了如何
检错、如何隔离、如何恢复等,它主要用于捕获应用程序交互的错误并从中恢复。
容错层次结构包括“本地可靠性管理器”和驻留在系统管理控制台上的“全局可靠性管
理器”,它们之间要实现通信,以及报告当前状态和接受控制命令,它通过内部时间同步器
把本处理器的时钟和其它处理器的时钟同步
该系统的容错层次结构提供了多种不同层次的错误检测和恢复机制,在每个层次上都能
异步的进行如下工作:
1,检测自身、同级实体和底层实体的错误。
2,处理来自底层的例外情况。
3,诊断、恢复、报告或者提交例外情况。
高可靠性系统要比普通系统复杂的多也昂贵的多,但是在例如飞机交通管制系统、指挥
控制系统等这些需要高可靠性的场合,这样的设计是值得的,实际效果也是非常好的。即使
普通的系统,在恰当的节点上恰当的应用高可靠性解决方案,有的时候也是必要的.