灾难性雪崩效应
一个请求调用多个服务时,如果客户端访问A服务,A服务调用B服务,B服务需要调用C服务,由于网络原因或者硬件故障,程序Bug的原因,如果B和C服务不能及时响应,A服务处于阻塞状态,此时有大量的请求涌入,导致资源消耗完毕,最终造成服务逻辑崩溃。服务与服务之间的依赖性,会造成连锁反应,对整个微服务系统造成灾难性的严重后果。
造成灾难性雪崩的原因
- 服务提供者不可用
硬件故障、程序Bug、缓存击穿、请求量过大 - 重试加大流
用户重试,代码重试逻辑 - 服务调用者不可用
同步请求阻塞造成资源耗尽
解决灾难性雪崩效应的方式
- 降级
当请求超时,资源不足对的情况下进行服务降级。降级后可以配合降级返回托底数据实现一个fallback()方法,当请求后端发生异常的时候,可以使用fallback()方法返回的值 - 熔断
当失败率(网络/超时)达到阀值自动触发降级,熔断器触发的快速失败会进行快速回复 - 请求缓存
- 隔离
限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用