阻止错误发展为故障,或者能够把错误的影响限制在一定范围内,使系统恢复成为可能。
维持可用性的方法(错误检测、错误恢复、错误预防)
-
错误检测:检测故障的某种类型的健康监视(3种战术)
-
信号/响应:一个组件发出一个信号,并希望在预定义的时间内收到一个来自审查组件的响应
-
适用场景:可以用在共同负责某项任务的一组组件内
-
方式:主动询问,必须要求回答响应(可类比上课点名)
-
-
心跳:一个组件定期发出一个心跳信息,另一个组件收听该信息。
-
适用场景:可用于传递数据
-
方式:被动方式(可类比领导听取员工汇报工作)
-
-
异常:异常处理程序通常将错误在语义上转换为可以被处理的形式,异常通常与引入异常的程序在同一个进程中
if( x==0 ) { throwException() }
-
-
错误恢复:检测到故障时某种类型的恢复(6种错误恢复的战术)
-
表决:运行在冗余处理器上的每个进程都具有相等的输入,它们计算的值都发给表决者,表决者发现异常则终止进程
-
算法:多数规则、首选组件
-
适用场景:通常用于纠正算法的错误操作或处理器的故障,用在控制系统中
-
-
主动冗余:所有的冗余组件都以并行的方式对事件做出响应,它们的状态都相同,但每次只使用一个组件的响应而丢弃其余组件的响应
-
适用场景:通常用在客户机/服务器的配置,恢复时间一般在几毫秒内
-
-
-
适用场景:通常用在控制系统中,恢复时间一般在几秒内
-
-
备件:备件是计算平台配置用于更换各种不同的故障组件。出现故障时,必须将其重新启动为适当的软件配置,并对其状态进行初始化
-
适用场景:通常用在备用客户机工作站,恢复时间一般在几分钟内
-
-
状态再同步:主动和被动冗余战术要求所恢复的组件在重新提供服务前更新其状态
-
检查点/回滚:检查点就是记录所创建的一致状态,遇到故障,可以使用上次正确的检查点状态
-
-
错误预防:防止错误演变成故障(即使发生错误,也可在极短的时间内恢复)
-
从服务中删除:从操作中删除了系统的一个组件,以执行某些活动来防止预期发生的故障
-
适用场景:删除进程再重新启动,以防止内存泄露导致故障的发生漏
-
-
事务:使用事务来保证数据的一致性,即几个相关密切的步骤,要么全成功,要么都不成功
-
适用场景:进程中某步骤出错,使用事务来防止任何数据受到影响;使用事务来防止访问相同数据的几个同时线程之间发生冲突
-
-
进程监视器:通过监视进程来处理进程的错误,一旦检测到进程中存在错误,监视进程删除非执行进程,并为该进程创建新的实例
-
可用性战术常用场景
登陆注册功能时所使用的信息填报时的检测。使用js函数对不符合要求的填报内容进行错误的抛出及提示。与此同时数据库的事务会进行回滚,回到事务未开始的状态