一、雪崩(Cascading failure)
看上图 什么是雪崩?
例如:c和d 去调用b 调用成功 b调用a 成功 那么就可以走通
例如:c和d 去调用b 调用成功 b去调用a ,a已经死了 b会一直去调用a 直到超时
每次调用都会生成一个线程,当a挂掉以后,b的请求一直处于等待状态,b的线程就是阻塞状态,直到请求超时会被释放,
例如:现在我们在一个高并发的情况下,线程会一直阻塞,会影响服务的内存 cpu,和计算资源等. 服务器承受不了,直到有一天b服务也挂了
依次往下类推 当只要有一个微服务挂掉以后 我们整个项目都会 挂掉,
我们把基础层故障,导致上层故障,并且故障不断放大的效应,称之为雪崩效应(Cascading failure:级联失效,级联故障).
二、服务容错常见的方案
雪崩效应:往往是我们没有做好容错导致的
例如:如果a死了,b做了容错方案,那么b就不会被a托死.
-
超时:
如果我为每次请求都设置一个超时的时间,比如说1秒,那么不管这次请求 有没有成功,1秒后,线程就释放了.只要线程释放的够快,那么b服务就不那么被a拖死了
-
限流:
如果我们经过评估,测出来b的qps,那么我们就给b设置一个限流的值,只有某一个达到我们设置的值,如果还有别的流量打进来,b会直接拒