我们前面知道了,可靠性可以从避错技术,容错技术,检错技术,降低复杂度设计等方面来提升。其中容错技术是可靠性技术的核心。
今天我们就来了解一下容错技术,容错的核心思想是什么? 从那些方面去容错? 该怎么去容错?
1、容错技术的核心思想
上次其实我们已经提到了,容错技术的核心思想是冗余。
而冗余可以分成
- 结构冗余
- 硬件冗余:就是单个设备不能很好的解决问题,那么我就多个设备都做同样的工作
- 软件冗余:我做一台软件出来,那么可以并行设计两个错来,实现的方式同样的功能,两个程序并行运行,看结果是否相同。对应的是N版本程序设计
- 信息冗余:校验码
- 比如说某某人发了一个公告,这个公告是复制过来修改的,但是修改错了。 时间描述为星期一08:00-10:00(下午)搞活动。那么08:00-10:00本来就已经是上午了,标识了一个下午其实就冗余了,并且时间对冲了。
- 这样做的好处就是如果有错误很容易识别出错误,当您的冗余信息足够多时,可以检测出错误。
- 时间冗余:重复多次进行相同的计算
- 比如说数钱,一般会多数几遍,如果结果一致,那就认为大概率不会出错。
- 时间冗余其实跟接口幂等性是一样的,也就是多次请求都返回同样的结果,就是接口幂等。
2、容错技术非法论
这几个方法论其实都有冗余的思想在里面,就是如下几个方法论:
- N版本程序设计:静态冗余
- 恢复快设计:动态冗余
- 防卫式程序设计
3、N版本程序设计
我们其实可以看出,N版本程序设计的思想跟我们堕胎服务器的思想是一样的。我们要高可靠,那就设计多个软件版本,我们要高并发,我们就多搞几个服务。思想是一致的。
但不同的是,N版本中的多个版本往往是由多个不同的团队对立进行的开发,如果大家都通气了,都使用同一套方法论去完成,往往就达不到我们的要求。就是从不同视角去发现问题的概率要大于等于同一视角的概率。
多版本对比是通过表决器的,它的作用就是对比各个版本的结果,然后输出正确的结果。所以说它能够进行容错和纠错。
并且与常用的软件开发过程不同的是,N版本程序设计增加了3个新的阶段(了解即可)
- 1、相异成分规范评审
- 2、相异性确认
- 3、背对背测试
4、恢复块方法
恢复块方法的由主块,后备块。主块运行的结果出问题了,那我们启用后备块,后备块执行的结果再进行验证,合格了就输出正确结果,不合格就再往后备块来执行。
其实就是一主N备的情况,主计算出问题了,备块逐个执行验证直到验证完毕或全部验证失败而结束。
而我们如何去验证后备块的结果正确性呢?
通常结果会具有一些特征,比如您计算的是年龄,计算出来是-1,300,500等,这个肯定就不对。我们就使用某种机制去验证这个对不对。
设计时应该尽量保证实现主块和后备块之间的独立性,避免相关的错误产生,使主块和备份块之间的共性错误降低到最低程度。说白了就是解耦,尽量不要出现相同的错误。
向前恢复与向后恢复
- 向前恢复
- 使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况
- 向后恢复
- 系统恢复到前一个正确状态,继续执行(其实就是回退/回滚)
这种思想主要应用于硬件中,主要是我们的服务器主备思想。
5、N版本与恢复块的比较
6、小结
其使N版本的效果要恢复块要很多,但是现实中我们很少使用N版本,因为成本太高了,反而是恢复块用的比较多。所以有时候好的不一定有人会用,因为昂贵的成本让人望而生畏。就比如我们知道结对编程好,但是有多少企业会这样干?当然,知识我们是需要了解的,学无止尽,加油!