【Spring Cloud】Hystrix实现服务保护

【学习背景】

隔了很长一段时间,没有更新Spring Cloud系列博客了,最近一直在看《重新定义Spring Cloud实战》一书,发现书中写了一些深层次的东西,对于之前自己有学习的一些组件,如Eureka、Feign、Ribbon等,在看书的过程中,又有了很多新的收获。所以,还是想继续把其他的一些组件学习下,本篇博客学习的组件是Hystrix。

【学习内容】

一. 什么是Hystrix?

Hystrix是由Netflix开源的一个针对分布式系统容错处理的开源组件,旨在隔离远程系统、服务和第三方库,阻止级联故障,在复杂的分布式系统中实现恢复能力。

二. Hystrix解决哪些问题?

在说明Hystrix可以解决哪些问题之前,先回想一下什么是服务雪崩效应?举个简单的例子,在某系统上线初期,可能没有很大的用户量,在一段时间后,客户量增加,高并发情况下,系统无法访问,所有服务瘫痪不可用。

为了避免上述服务雪崩效应的发生,Spring Cloud体系中提供了Hystrix这样一个组件,支持采用断路器、服务降级、服务熔断、服务隔离等方式,保证服务可用。

  • 服务降级:在高并发情况下,防止用户一直等待,使用服务降级方式,即返回一个友好提示给客户端,不会去处理请求,调用fallback本地方法,目的是为了用户体验。
  • 服务熔断:目的是为了保护服务,在高并发情况下,如果请求达到了一定极限(可以自己设置阈值),如果流量超出了自己设置的阈值,自动开启服务保护功能,使用服务降级方式返回一个友好的提示。
  • 服务隔离:线程池隔离。每个服务接口都有自己独立的线程池,每个线程池互不影响。缺点是CPU占用率高,所以不是所有的接口都需要去采用线程池隔离,关键核心接口采用即可。

三. Hystrix使用方法

  1. 在服务中添加依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  1. 在启动类上添加启用断路器模式
@SpringBootApplication
@EnableHystrix
public class ConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConsumerApplication.class, args);
	}

}
  1. 在接口方法上添加@HystrixCommand注解和降级fallback
//默认开启了服务隔离、熔断、降级
@HystrixCommand(fallbackMethod="defaultUser")
public String getUser(String username) throws Exception {
	 if(username.equals("spring")) {
	 	return "this is real user"; 
	 }else { 
	 	throw new Exception(); 
	 }
} 

/**
 * 出错则调用该方法返回预设友好错误 
 * @param username 
 * @return 
 */
 public String defaultUser(String username) {
  	return "The user does not exist in this system"; 
  }
  1. 效果:在用户为“spring”的情况下访问,返回结果“this is real user”,否则返回“The user does not exist in this system”

【学习总结】

本篇博客的内容只是对Hystrix的一个初步认识与了解,在书中有更多详细的知识,可以进一步学习了解下。

猜你喜欢

转载自blog.csdn.net/u013034223/article/details/89409812