1.简介
- 雪崩:在微服务架构中,假如某个微服务无法正常运行就会形成阻塞,导致调用这个微服务的其他所有微服务都会阻塞。到达某个时间节点,服务器的并发量会达到峰值,这样的话,后续其他请求即使访问的不是当前被阻塞的微服务也会无法正常访问。这种由于一个微服务异常导致整个微服务架构都无法工作的情况称为雪崩。
- 熔断:监听服务提供者方请求的并发量、访问失败率,只要并发量或者失败率达到一定阈值,服务消费者和提供者之间的请求就会断开,称为熔断。
- 降级:当发生熔断现象时,服务提供者就不会有任何响应,这样对服务消费者来说体验很差,所以退而求其次,给服务消费者返回托底数据而不是没有任何响应,这就叫降级。
- 托底数据:异常发生时,服务提供者给服务消费者返回的异常提示消息,托底数据类型和正常响应返回的数据类型一致。
- Hystrix 断路器:解决雪崩效应的一种自我保护机制,包括四个方面:
- 资源隔离(限流):包括线程池隔离和信号量隔离,限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用;
- 熔断:当失败率达到阀值自动触发熔断(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复;
- 降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据;
- 缓存:提供了请求缓存、请求合并实现;
2.使用
① Ribbon集成Hystrix:在服务提供者方使用,需要
- 在服务提供者方添加Hystrix依赖;
- 在Controller的每个接口方法上添加@HystrixCommand注解并指定返回托底数据的方法名;
- 自定义返回托底数据的方法;
- 在启动类上添加@EnableHystrix注解;
② Feign集成Hystrix:由于Feign本身已经集成了Hystrix,所以在服务消费者方使用Hystrix,只需要
- 在yml中配置开启Hystrix支持;
- 在FeignClient中指定返回托底数据的方法名;
- 自定义返回托底数据的方法(需要实现FallbackFactory接口);
2.1.Ribbon集成Hystrix
服务提供者端集成,服务消费者端正常调用
2.1.1.导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- Hystrix依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
</dependenci