Hystrix:实现微服务的容错处理

一. 简介

1. 一个延迟和容错库,用于隔离访问远程系统,服务或者第三方库,防止级联失败,提升系统的可用性与容错性;

2. 通过以下几点实现延迟和容错:

包裹请求:使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行;

跳闸机制:当某服务的错误率超过一定阈值时,Hystrix可以自动或者手动跳闸,停止请求该服务一段时间;

资源隔离:Hystrix为每个依赖都维护了一个小型的线程池,如果线程池已满,直接拒绝请求,加速失败判定;

监控:Hystrix可以近乎实时的监控运行指标和配置的变化;

回退机制:当请求失败,超时,被拒绝,或当断路器打开时,执行回退逻辑;

自我修复:断路器打开一段时间后,自动进入半开状态;

3. 通用方式整合Hystrix

 添加spring-cloud-starter-netflix-hystrix依赖;

在启动类上添加注解@EnableCircuitBreaker或@EnableHystrix,启用断路器支持;

修改Controller,增加@HystrixCommand注解,编写回退方法;

注:请求失败,超时,被拒绝以及断路器打开时等都会执行回退逻辑,执行回退逻辑不代表断路器以及打开;

4. 隔离策略

隔离策略有两种:

线程隔离THREAD:HystrixCommand将在单独的线程上执行,并发请求受到线程池中的线程数量的限制;

信号量隔离SEMAPHONE:HystrixCommand将在调用线程上执行,开销相对较小,并发请求受到信号量个数的限制;

Hystrix默认并推荐使用THREAD,因为这种方式有一个除网络超时以外的额外保护层,只有当调用负载非常高时才需要使用信号量隔离,因为这种场景下使用THREAD开销会比较高,信号量隔离一般仅适用于非网络调用的隔离,如发生找不到上下文的运行时异常;

可使用execution.isolation.strategy属性指定隔离策略;

5. Feign使用Hystrix

在application.yml中添加feign.hystrix.enable: true,开启Feign的Hystrix支持;

使用@FeignClient注解的fallback属性,为指定名称的Feign客户端添加回退;使用fallbackFactory属性,覆写create方法,可以获得回退原因;

6. 使用Hystrix Dashboard可视化监控数据

添加spring-cloud-starter-netflix-hystrix-dashboard依赖;

编写启动类,在启动类上添加@EnableHystrixDashboard;

在application.yml中添加端口;

7. 使用Turbine聚合监控数据

使用/hystrix.stream端点只能监控单个微服务实例,Turbine可以将所有相关/hystrix.stream端点的数据聚合到一个组合的/turbine.stream中,让集群的监控更加方便;

添加spring-cloud-starter-netflix-turbine依赖;

在启动类上添加@EnableTurbine注解;

在配置文件中配置eureka,turbine;

猜你喜欢

转载自www.cnblogs.com/bbbbs/p/12563193.html