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