springcloud之hystrix断路器

一:服务雪崩

多个微服务之间调用的时候,假如微服务A调用微服务B和C,而B和C又调用其它微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。

为了解决雪崩效应,所以需要对微服务调用故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能影响整个应用程序或系统。

二:hystrix是什么

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

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

大白话:就是处理分布式系统的延迟和容错的一种机制/开源库,保证在某个微服务出现异常时,向服务调用者返回一个符合预期的响应,而不是长时间的等待。这样提高了分布式系统的弹性。

三:服务熔断

当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而会熔断该节点微服务的调用,快速返回定制的错误响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在springcloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务调用的状况,当失败的调用到一定的阀值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand

四:服务熔断配置(服务提供方)

1)配置服务熔断的maven坐标

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-hystrix</artifactId>

</dependency>

 

2)增加服务熔断注解,如果服务出现异常则执行熔断注解中的方法:

 

@RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
	//一旦调用服务方法失败并抛出了错误信息后,会自动调用@HystrixCommand标注好了的fallbackMethod调用类中的方法
	@HystrixCommand(fallbackMethod="processHystrix_Get")
	public Dept get(@PathVariable("id") Long id) {
		
		Dept dept = deptService.get(id);
		if(dept == null){
			throw new RuntimeException("该ID:"+id+"没有对应信息");
		}
		return dept;
	}

2.1)processHystrix_Get方法实现:

	public Dept processHystrix_Get(@PathVariable("id") Long id){
		Dept dept = new Dept();
		dept.setDeptno(id);
		dept.setDname("该ID:"+id+"没有对应信息,null--@HystrixCommand");
		dept.setDb_source("no this database in mysql");
		return dept;
	}

3)微服务提供方主启动类增加@EnableCircuitBreaker

 

五:服务降级

服务降级处理是在服务客户端完成的,与服务提供方没有关系。所以服务降级和服务熔断都是调用微服务出现延时或异常时给客户端响应备用响应信息,不同的是服务降级是在服务调用方处理,服务熔断是服务提供方处理。

大白话:就是在服务调用方的调用的接口上增加一个fallbackFactory标识,意思是如果调用此接口的方法类中如果出现了服务调用异常,则调用fallbackFactory指向的服务异常处理类,并向客户端返回该处理类提供的处理信息。

1)服务调用发的接口上增加fallbackFactory

 

2)fallbackFactory指定的微服务调用异常时的响应处理类

3)微服务调用方的yml配置文件增加hystrix的配置

六:服务熔断降级总结

服务熔断:

某个服务故障或发生异常,类似“保险丝”,当某个异常条件触发,直接熔断整个服务,而不是一直等到此服务超时。

服务降级:

当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值,这样会使服务水平下降,但比直接服务挂掉要强

七:Hystrix Dashboard微服务监控

1)监控配置maven坐标:

 

<!-- hystrix和hystrix dashboard相关配置 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-hystrix</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>

</dependency>

 

2)在监控项目的主启动类上增加@EnableHystrixDashboard

3)被监控的微服务项目需要增加被监控的maven配置:

<!-- actuator监控信息 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

4)启动监控项目(项目端口为9001),浏览器访问地址:http://localhost:9001/hystrix

 

5)启动微服务提供者本机的8001端口

6)看图详解:

实心圆:大小变化表示流量越大实心圆越大,颜色表示健康状况:绿色<黄色<橙色<红色

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值