五、Spring Cloud组件 - Hystrix

hystrix是什么?

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

降级,超时

我们先来解释一下降级,降级是当我们的某个微服务响应时间过长,或者不可用了,讲白了也就是那个微服务调用不了了,我们不能把错误信息返回出来,或者让他一直卡在那里,所以要在准备一个对应的策略(一个方法)当发生这种问题的时候我们直接调用这个方法来快速返回这个请求,不让他一直卡在那 。

停更维护

https://github.com/Netflix/Hystrix

Hystrix is no longer in active development, and is currently in maintenance mode.

服务降级(fallback)

  • 程序运行异常
  • 超时
  • 服务熔断触发服务降级
  • 线程池/信号量打满也会导致降级

解决

  • 被调用服务超时了,调用者不能一直卡死等待,必须有服务降级
  • 被调用服务down机了,调用者不能一直卡死等待,必须有服务降级。
  • 被调用服务OK,调用者自己出故障或有自我要求(自己的等待时间小于服务提供者),自己服务降级。

服务熔断(break)

  • 断路器 (保险丝)
  • 熔断机制概述:熔断机制是应对雪崩效应的一种微服务链路保护机制,当扇出链路的某个微服务出错不可用或者响应时间太长,会产生服务降级。进而熔断该节点微服务调用,快速返回错误响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路
  • 在Spring Cloud框架中。熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省值5秒内20次调用失败,就会启动熔断机制,熔断机制的注解是@HystrixCommand

服务降级提倡者:https://martinfowler.com/bliki/CircuitBreaker.html

熔断状态

  • 熔断打开:请求不在进行调用当前服务,内部设置时钟一般为MTTR(平均故障时间),当打开时长达到所设时钟则进入半熔断状态
  • 熔断关闭:熔断关闭不会对服务进行熔断
  • 熔断半开:部分请求根据规则调用当前服务,如果请求成功且符合规则认为当前服务恢复正常,关闭熔断

在这里插入图片描述

熔断在什么情况下开始起作用

在这里插入图片描述

  1. 当满足一定的阀值的时候(默认10秒超过20个请求次数)
  2. 当失败率达到一定的时候(默认10秒内超过50%的请求失败)
  3. 到达以上阀值,断路器将会开启
  4. 当开启的时候,所有的请求不会再进行转发
  5. 一般时间后(默认5秒),这个时候断路器是半开状态,会让其中一个请求进行转发,如果成功,断路器会关闭,如果失败,继续开启,重复4和5

hystrix所有配置参数详解:https://blog.csdn.net/tongtong_use/article/details/78611225

服务限流(flowlimit)

实时化监控

hystrix可以搭建可视化界面

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

启动类上增加

@EnableHystrixDashboard

Spring Cloud F版后需要配置Bean

@Bean
public ServletRegistrationBean getServlet(){
    HystrixMetricsStreamServlet hystrixMetricsStreamServlet = new HystrixMetricsStreamServlet();
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(hystrixMetricsStreamServlet);
    servletRegistrationBean.setLoadOnStartup(1);
    servletRegistrationBean.addUrlMappings("/hystrix.stream");
    servletRegistrationBean.setName("HystrixMetricsStreamServlet");
    return servletRegistrationBean;
}

七色、一圈、一线

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值