springcloud 4 Hystrix断路器

Hystrix

简介

雪崩:一个服务失败导致整条链路的服务都失败的情况,称之为服务雪崩。

Hystrix是一个用于处理分布式系统的延迟和容错的开源库。它能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

  1. 服务降级:服务器有问题时,不让客户端等待而立即返回一个友好提示,fallback。程序运行异常,超时,服务熔断触发服务降级,线程池或信号量打满。

  2. 服务熔断:达到最大服务访问后,直接拒绝访问,拉闸断电,再调用服务降级的方法。服务降级->熔断->恢复调用链路。

  3. 服务限流:严禁高并发一起访问,而是进行排队有序进行。

案例

  1. 服务提供者,先构建一个简单的eureka的client,有两个访问,一个立即返回字符串a,一个等待3s再返回字符串b。

  2. Jmeter压力测试,发送2w个线程给b,明显感觉对a的访问慢了很多。

  3. 新建feign的消费者,再次压力测试,对a的访问慢了

服务降级

  1. 对于提供者,在方法上加
@HystrixCommand(fallbackMethod =  "paymentInfo_TimeOutHandler",
              commandProperties = {          
                @HystrixProperty(name =  "execution.isolation.thread.timeoutInMilliseconds",value =  "3000") //3秒钟以内就是正常的业务逻辑    
              })  

即可指定兜底方法。主启动类加**@EnableCricuitBreaker**

  1. 对于消费者,可能可提供者有不同的要求,也可以自己指定。基本过程如上,但是主启动类加@Enablehystrix,yml文件要加

feign: hystrix: enabled: true #如果处理自身的容错就开启。开启方式与生产端不一样。

  1. 全局的降级方法

在业务类上加@DefaultProperties(defaultFallback = “payment_Global_FallbackMethod”) 即可指定默认的降级方法,在直接用@HystrixCommand即可实现降级。对于想特殊对待的在用2中方法指定即可。

  1. 将降级和业务代码解耦

在Feign中,实现加了@FeignClient的接口为类A,在@FeignClient中新增属性fallback=A.class即可自动将A中方法对应为降级方法,注意A要加@Component。

熔断+总结

服务熔断

熔断机制是应对雪崩效应的一种微服务链路保护机制,当满足一定条件时,就会熔断该服务,快速返回错误信息,当检测到服务恢复正常时,恢复链路。

提供者配置

@HystrixCommand(fallbackMethod =  "paymentCircuitBreaker_fallback",
                commandProperties = {        
                  @HystrixProperty(name = "circuitBreaker.enabled",value =  "true"), //是否开启断路器        
                  @HystrixProperty(name =  "circuitBreaker.requestVolumeThreshold",value =  "10"),  //请求次数        
                  @HystrixProperty(name =  "circuitBreaker.sleepWindowInMilliseconds",value =  "10000"), //时间范围        
                  @HystrixProperty(name =  "circuitBreaker.errorThresholdPercentage",value = "60"),  //失败率达到多少后跳闸  })  
  1. 测试:多次错误后,再输入正确参数,开始仍然报错,过段时间变好。

结论

  1. 熔断类型
  • 打开:请求不在调用当前服务,内部设置时钟一般设置为MTTR平均故障处理时间,当打开时长达到所设时钟则进入熔断状态。

  • 关闭:不会对服务进行熔断

  • 半开:根据规则调用服务,若符合规则认为当前服务恢复正常,关闭熔断。一般关闭5s后进入半开状态。

  1. 三个重要参数
  • 快照时间窗:断路器确定是否需要打开并统计一些请求和错误数据,统计的时间范围就是快照时间窗,默认为最近的10s。

  • 请求总数阀值:在时间窗内,必须满足阀值才有资格熔断,默认为20次请求。

  • 错误百分比阀值:满足以上两个条件时,请求错误率达到阀值就会开启熔断,默认为50%。

  1. 如何恢复主逻辑

当熔断即断路器打开时,会启动一个休眠时间窗,在此期间,降级逻辑成为临时的主逻辑。当休眠到期时进入半开状态,并将下一次请求转发到原来的主逻辑上,若此次正常返回,则断路器闭合,若仍然异常,则断路器继续打开。

服务监控HystrixDashboard

简介

准实时的调用监控,Hystrix会持续记录各种数据并以统计报表和图形的形式展现给用户。

创建

  1. 引入依赖

  2. 主启动类加@EnableHystrixDashboard

  3. 如何监控:

修改服务提供者:主启动类加

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

在输入栏输入http://localhost:8001/hystrix.stream即可看到数据。

说明

在这里插入图片描述

在这里插入图片描述

熔断配置+工作流程图解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值