一、Hystrix详解
1. Hystrix介绍
在分布式系统中,每个服务都可能会调用很多其他服务,当链路上某个微服务的调用响应的时间过长或者不可用时,就会导致整个系统发生级联故障(雪崩效应)。
Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制,保证一个服务出现故障时,不会导致整个系统出现雪崩效应,以提高分布式系统弹性。
2.服务降级
服务出现故障时,给故障服务降级到事先准备好的故障处理结果,将此结果返回给服务消费者。
例如:在分布式架构中,A服务调用B服务的时候,由于B服务宕机了,导致请求失败,那这个时候我们有几种方式来处理:
1.返回一个备用的数据,比如“系统繁忙”的信息给到用户,这种就是属于降级;
2.发起重试,这就是容错。
降级实际上有很多的方案主要分两大类,主动降级和被动降级:1.主动降级:比如大促的时候关闭非核心服务。
2.被动降级:熔断触发降级、请求超时触发降级、限流触发降级。
3.服务熔断
微服务调用链路中,如果某个目标服务调用比较慢或者大量的超时,这个时候如果触发熔断机制,则可以保证后续的请求不会继续发送到目标服务上,而是直接返回降级的逻辑并且快速释放资源。如果目标服务的情况恢复了,那么熔断机制又会动态进行关闭。
熔断状态
熔断打开:熔断打开后,在此时间内不会对该服务进行调用,而是直接访问降级方法。通过设置熔断时间,当达到该时间后,会尝试恢复该服务。
熔断关闭:熔断关闭代表服务正常,不会干扰正常服务调用。
熔断半开:熔断半开时,请求可以访问服务,若请求正常访问,则熔断会关闭;若请请求不正常,继续熔断,调用降级方法。
4.触发方式
(1)熔断触发降级
对某个服务的调用在一定的时间内(默认10s),发起了超过一定次数请求(默认20次),失败率超过一定值(默认50%),该服务的断路器会打开。返回一个由开发者设定的fallback。
熔断的恢复时间(熔断5s),从熔断开启到后续5s之内的请求,都不会发起到远程服务端。
@RestController
public class Controller {
@HystrixCommand(commandProperties = {
//是否启用熔断器