服务熔断
雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并导致服务雪崩的过程。
服务熔断:当服务提供者无法调用时,会通过断路器向调用方直接返回一个错误响应,而不是长时间的等待,避免服务雪崩。
实际情景
项目中使用的是服务消费者Feign、熔断器Hystrix。
前端同时发起20次请求,后台的接口被调用了20次。每一次调用接口,都会在内部通过Feign进行服务消费,调用其他的服务提供者。
同时还使用了Feign自带的Hystrix,进行服务熔断。
经过测试,发现每次调用超过10次后,有些请求就被Hystrix瞬间熔断,并不是超时而触发的熔断。
隔离策略
Hystrix有两种隔离方式:信号量和线程池。
线程池隔离:对每个command创建一个自己的线程池,执行调用。通过线程池隔离来保证不同调用不会相互干扰和每一个调用的并发限制。
信号量隔热:对每个command创建一个自己的计数器,当并发量超过计数器指定值时,直接拒绝。使用信号量和线程池的一个区别是,信号量没有timeout机制
线程池实现
HystrixThreadPool是hystrix中的线程池实现,每个线程池有一个threadkey作为key。在创建HystrixCommand时需要创建一个该命令使用的线程池的threadkey。
Hystrix线程池(HystrixThreadPool)底层使用JDK Threa