SpringCloud中的熔断机制和Hystrix

分布式系统的工作场景
   1.当服务都健康的时候,如图1所示

   2.当其中一个服务出现延迟,将会阻塞整个用户的请求

   3.一个服务的延迟会导致单位时间内资源一直被占用,应用的其它请求进来也会延迟,紧接着队列开始堆积,
     线程还有其他系统资源不释放,甚至引发整个系统的级联失败。

就会有了熔断

什么是熔断
   在分布式环境下有A,B,C,D四个个服务,A依赖B,C,D。在调用的过程中发现D服务异常了,
   为了不拖垮整个集群,我们会选择不调用D服务,进行服务降级

 Hystrix是什么
   Hystrix,中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。
   而本章中提到的Hystrix是Netflix开源的一款容错框架,实现容错和自我保护。

 Hystrix设计原则
   1.防止单个服务的故障,耗尽整个系统服务的容器(比如tomcat)的线程资源,避免分布式环境里大量级联失败。
     通过第三方客户端访问(通常是通过网络)依赖服务出现失败、拒绝、超时或短路时执行回退逻辑
   2.用快速失败代替排队(每个依赖服务维护一个小的线程池或信号量,当线程池满或信号量满,
     会立即拒绝服务而不会排队等待)和优雅的服务降级;当依赖服务失效后又恢复正常,快速恢复
   3.提供接近实时的监控和警报,从而能够快速发现故障和修复。监控信息包括请求成功,失败(客户端抛出的异常),
     超时和线程拒绝。如果访问依赖服务的错误百分比超过阈值,断路器会跳闸,此时服务会在一段时间内停止对特定服务的所有请求
   4.将所有请求外部系统(或请求依赖服务)封装到HystrixCommand或HystrixObservableCommand对象中,
     然后这些请求在一个独立的线程中执行。使用隔离技术来限制任何一个依赖的失败对系统的影响。
     每个依赖服务维护一个小的线程池(或信号量),当线程池满或信号量满,会立即拒绝服务而不会排队等待

启用Hystrix

修改子模块eureka-consumer
   1.pom文件不需修改,因为spring-cloud-starter-openfeign已经自带了Hystrix。
   2.修改application.yml添加,启用断路器
     feign.hystrix.enabled=true
   3.新建一个包impl,再新建类HelloServiceFallback实现HelloService(就是消费者调用生产者的接口)接口
     @Component
     public class HelloServiceFallback implements HelloService {
       @Override
       public String helloFromProvider(String name) {
        return "sorry["+name+"],本次操作已失败!";
       }
     }

     注1:fallback:应变计划;退路

   4.修改HelloService接口,在@FeignClient注解中指定降级接口
     @FeignClient(value = "eureka-provider", fallback = HelloServiceFallback.class)

弄好后的效果就是,消费者调用生产者,如果请求其中一个生产者,一直请求不动,就直接失败,不会一直请求。 

发布了62 篇原创文章 · 获赞 6 · 访问量 2565

猜你喜欢

转载自blog.csdn.net/qq_44424498/article/details/103582467
今日推荐