雪崩效应
假设有A,B两个服务且B服务调用A服务
如果当A服务挂了的时候,B服务没做容错处理将一直调用A的API直到A返回结果超时,由于A服务挂了就会导致大量的请求阻塞超时,耗尽线程,继而导致上层服务不可用
如图:
常见的容错方案?
-
超时:为每个请求设置一个时间,如果在该时间内还没得到返回结果,则释放当前请求线程
-
限流:为某个服务设置上限流量,如果当前请求已经超过了上限流量,则会直接拒绝
-
仓壁模式: 资源隔离互不干扰,降低服务对整个系统的影响,增加了系统得到弹性
-
断路器模式:假设有A,B两个服务,其中A为消费者,B为提供者。 当A调用B服务时的错误率或者错误次数达到阀值时(代表B服务挂掉了),断路器打开,那么A将不再调用B服务。如果B服务又恢复了呢?实际上断路器会在一段时间后允许一次请求去调用B服务,如果请求成功,则断路器关闭,失败则继续打开
如图: