在复杂的分布式架构当中,会有许多的服务依赖于其他的服务,并且这些服务器之间都有不可避免失效的可能。如果一个服务依赖由于延时过高发生阻塞,那么调用方的线程也会阻塞,如果相关业务的QPS过高,那么就有可能产生大量的阻塞,从而导致服务器资源被耗尽被拖垮导致服务宕机,另外这种高延时的请求也会在各应用之间传播,如果故障服务的上游依赖较多,则有可能会发生服务雪崩效应,导致大量服务宕机。
如图:正常情况下,当上游服务依赖于多个下游的服务会去请求多个下游服务完成响应
但是,如果当其中一个依赖发生高延时响应时间,当前请求会被阻塞,如果不采取措施,后续的请求也会在此发生阻塞,如下图:
我们都知道,每个请求都是线程资源,都会占用我们的系统资源,内存、CPU、网络开销等,如果这个服务访问量QPS较高的话,短时间内会产生大量请求,所以系统资源会很快被消耗殆尽,导致服务“挂掉”,这还是上游服务只有一个的情况,假如上游有大量的请求服务,则很有可能造成服务雪崩效应。
所以问了应对以上可能出现的问题,我们需要多服务做隔离,熔断等保险措施
断路器:Hystrix简介
Hystrix是由Netflix于2011年创立的项目,最初用来解决系统快速恢复的需求,它的特性能保证在分布式服务中,防止服务失败引起级联失败,项目的熔断机制能够使依赖的调用快速失败并且自动恢复,有效的避免对失败的服务进行请求,同时对每个接口进行线程隔离或者信号量隔离,避免因为高峰期或者服务延时导致线程消耗殆尽导致宕机。
Hystrix对服务级联故障的解决方案:
1.Hystrix将请求的逻辑进行封装(HystrixCommand或者HystrixObservableCommand),相关的逻辑会在独立的线程中执行,后面会讲到
2.Hystrix有自动超时策略,如果请求超过阈值,Hystrix会以超时失败来处理,调用getFallback()接口处理
3.Hystrix会为每一个接口依赖维护一个线程池,当线程池满载时,不会等待而是直接终止失败(快速失败原则)
4.Hystrix有熔断机制,当服务失败率超出阈值之后,会手动或者自动切断服务一段时间
Hystrix优点:
1.快速失败、同时能快速恢复(Hystrix对熔断的服务提供恢复策略,后面会讲到)
2.提供失败回退和优雅的服务降级机制
3.通过隔离系统所依赖的服务,防止服务级联失败、雪崩
4.提供有效的服务容错监控、报警和运维手段
Hystrix工作原理&&源码分析
例子:99.99%^30=99.97% 10亿*0.3%=300万