Hystrix断路器
什么是Hystrix
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个服务预期的,可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方法无法处理的异常,这样就可以保证了服务调用方的线程不会被长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩
能干嘛
- 服务降级
- 服务熔断
- 服务限流
- 接近实时的监控
- ……
服务熔断
是什么
熔断机制是对应雪崩效应的一种微服务链路保护机制。
当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。|
在应用层自定义熔断以后的备选方案以后,在主方案上注解使用,同时在启动类上@EnableCircuitBreaker启动断路器
服务降级
服务熔断是在提供方服务端,服务降级是在消费方客户端
Hystrix服务监控
@EnableHystrixDashboard
启动类注解开启Hystrix服务监控
注册监控的Bean1
2
3
4
5
6
public ServletRegistrationBean hystrixMetricsStreamServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
servletRegistrationBean.addUrlMappings("/actuator/hystrix.stream");
return servletRegistrationBean;
}
记得需要在开启hystrix断路器@EnableCircuitBreaker的情况下才能获取到监控信息
小结
- 服务熔断:服务端~某个服务超时或者异常,引起熔断~,保险丝~
- 服务降级:客户端从整体网站请求负载考虑~,当某个服务熔断或者关闭之后,服务将不再被调用- 此时在客户端,我们可以准备一个FallbackFactory,返回一个默认的值(缺省值),整体的服务水平下降了,但比直接挂掉强