Chinaunix首页 | 论坛 | 博客
  • 博客访问: 947306
  • 博文数量: 134
  • 博客积分: 7443
  • 博客等级: 少将
  • 技术积分: 1411
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 20:18
文章分类

全部博文(134)

文章存档

2012年(7)

2011年(29)

2010年(16)

2009年(6)

2008年(18)

2007年(58)

分类:

2008-01-17 13:29:32

所谓容错是指,在故障或异常存在的情况下软件系统不失效,仍然能够正常工作的特性。容错即是Fault Tolerance,确切地说是容故障,容异常(Fault),而并非容错误(Error)。
 
在实际中,容错常常被错误地理解为“尽量保证运行下去”,“尽量不报错,不抛异常”。这种习惯下,经常导致后期bug难以定位。
 
一个模块,如果对一个“错误的输入”可以纠正的,可以仍然产生正确合法的输出。确切来说,这个输入就不应该是错误的,应该视为正常的处理的一个特殊情况。
 
如果可以在一个故障中恢复,这个故障就是你可以容忍;如果对一个故障,可以在牺牲一部分数据的情况下,继续未完成部分的处理,这个故障也是可以容忍的。但是,大多错误是不可以容忍的。错误应该尽早的发现并且暴露出来。
 
是否容错,既与”错“本身的特点相关,也和处理的上下文有关。对同样的异常情况,对模块B来说,是一个不能容忍错误。而对多次调用模块B的模块A来说,可能就是一个可以容忍的异常,因为模块A要在忽略这一批次的数据后,继续下一批次数据的处理。
 
模块之间的接口,对数据的合法性应该有确定的说法,这是模块与模块之间的”契约“的一部分。模块作自己该做的,既不要少做了,也不要做多余的事情。
 
对不符合”契约“的非法输入,不应该产生非法的输出。而是以约定的方式报错。这时,终止程序都比返回非法数据,置整个系统为”不可知“状态要好。
阅读(1747) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~