微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。
雪崩问题产生的原因:
- 微服务相互调用,服务提供者出现故障或者阻塞
- 微服务调用者没有做好异常处理,导致自身故障
- 调用链中的所有服务级联失败,导致整个集群故障
解决思路:
- 尽量避免服务出现故障或阻塞(保持代码的健壮性、保持网络畅通、能应对较高的并发请求)
- 微服务调用者做好远程调用异常的后备方案吗,避免异常扩散
服务保护方案 -
1.请求限流
限制访问微服务的请求的并发量,避免服务因流量激增出现故障
2.线程隔离
也叫舱壁模式,模拟船舱隔板的防水原理。通过限定每个业务能使用的线程数量而将故障业务隔离,避免故障扩散。
3.服务熔断
由断路器统计请求的异常比例或慢调用比例,如果超出阙值则会熔断该业务,则拦截该接口的请求
熔断期间,所有请求快速失败,全部走fallback逻辑
4.失败处理
定义fallback逻辑,让业务失败时不再抛出异常,而是返回默认数据或者友好提示