目录
一、可靠性设计概述
二、冗余的类型
三、冗余系统的设计
1.N版本程序设计
2.恢复块设计
3.防卫式程序设计
4.双机容错
可靠性指系统能够正常运行的概率。如何设计出一个具有高可靠性的系统呢?可以利用避错技术,容错技术,检错技术,降低复杂度设计等方式来提升系统正常运行的概率。
所谓避错技术,就是用一些代码管理,开发方法来规避一些错误,提高系统质量。比如高内聚低耦合的结构化设计,设计模式等方法。
容错技术,就是一种能够包容异常错误的技术。其技术的主要思想就是冗余。
检错技术,其实就是发现系统运行时错误的一种技术,比如通过采集日志中的关键字,进程数量检查等方法进行告警,检错技术的成本较低,人工介入多,不能及时解决系统异常。
降低复杂度设计,也是避错技术的一种。降低系统的复杂度,可以进行更快的维护工作。缩短修复系统的时间。
冗余分成结构冗余,信息冗余,时间冗余。
结构冗余分为硬件冗余和软件冗余,就是有多个相同结构的系统在运行,当一个系统出现异常时,其他系统依旧可以得出正确的结果。达到一个系统出现异常时,业务不立刻崩溃的目的。
信息冗余就是有多个相同类型的信息一起发送。当发现多个信息之间有内容冲突时则发现异常,甚至达到纠正异常信息的目的,计算机中常用的有校验码技术。
比如当你收到一个消息:“明天上午16:00集合开会”,"上午"和"16:00"就是冗余信息,当你发现冗余信息中的内容产生了冲突,就说明这条信息有误。
时间冗余就是多个时间内进行相同的计算,如果多次计算结果都一致,那么认为结果时正确的。比如银行存款的清点钞票。
N版本程序设计是一种静态冗余系统设计的方法。所谓静态冗余,就是利用冗余资源把故障的后果屏蔽掉,而不对原有系统结构进行改变称之为静态冗余。
有多个独立的团队进行开发相同版本的独立系统。将N个版本的运行结果进行汇总到表决器中,利用表决机制得到一个最终结果。通常应用在信号领域、硬件系统中,比如高铁信号系统,航空系统。假设有3个版本的同时运行,当一个系统运行出的结果偏差较大,利用少数服从多数的表决机制得到正确的结果。这样可以避免系统业务的突然中断,以及结果准确。
N版本程序设计与通常的软件开发过程不同的是,它新增了三个新的阶段:相异成分规范评审,相异性确认,背对背测试。N版本程序设计中需要关注的问题是,不同版本间的程序同步,版本程序之间的通信,表决算法(全等表决、非精确表决,Cosmetie表决)、一致比较问题、数据相异性等。
恢复块设计是一种动态冗余系统设计的方法。所谓动态冗余,就是在发现故障之后,利用冗余资源对有故障的部件进行替换,或对系统进行重构和恢复。
在恢复块设计中,有N个业务功能相同的独立系统。将一个系统定为主块,其他系统定为备用块。当主块正常运行时,备用块停机。将主块的结果进行验证,如果发现结果质量不合格,那么就启用备用块1进行重新计算,如果还不行就启用备用块2,直到结果合格。
比如一个人口年龄分布情况统计,由3个冗余系统组成,主块率先进行计算,其他后备块不运行,对主块的统计结果进行验证。数据验证逻辑要求每个年龄段的占比在0%~100%之间,所有年龄段占比之和为100%。如果统计结果中80岁以上的人群占比120%,那么验证出主块计算结果有误,启用后备块1重新计算。以此类推。
恢复块设计应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和备份块之间的共性错误降到最低程度。当然,恢复块设计必须保证验证测试程序的正确性。
恢复块方法 | N版本程序设计 | |
硬件运行环境 | 单机运行 | 多机运行 |
错误检测方法 | 验证测试程序 | 表决器表决 |
异常恢复策略 | 后向恢复,(就是回滚,当发生错误时,恢复到前一个正确状态重新执行) | 前向恢复,(当发生错误时继续按流程执行就可以得到正确结果) |
实时性 | 差 | 优 |
对于程序中存在的错误和不一致性,通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误产生,程序能够撤销错误状态,恢复到已知的正确状态中去。比如错误检测,破坏估计、错误恢复,以及常见的 try...catch...机制等。
防卫式程序设计就是通过经验预判哪些地方可能会出现异常,然后提前在代码中添加好对应异常处理逻辑。
双机容错包含双机热备模式,互备模式,双工模式。
热备模式就是两台服务器都部署对应的代码包,但是起初只有服务器A运行,服务器B不允许,利用心跳线或者其他通信机制,实时让主服务器A通知备用服务器B"A还在正常运行"。当B收不到心跳消息时,服务器B开机完成业务功能。
双机互备模式,就是两台服务器都是自身运行的主要业务的主服务器,其他业务的备用服务器。比如A服务器部署业务①和业务②,但是平常只有业务①运行,B服务器部署业务①和业务②,但是平常只有业务②行。当A服务器异常时,利用心跳机制让B启动业务①的运行。这种方法,当发生异常时资源利用率(资源压力)会变高,但是成本低。
双机双工模式,就是两台服务器都运行业务①和业务②。这样挂掉一台业务也不会立刻中断。