Hystrix是非常重要的微服务组件,主要解决熔断降级等,下面我就全来详解Hystrix@mikechen
Hystrix定义
Hystrix 是 SpringCloud提供的用于容错机制、和故障保护功能的组件,它提供了多种功能来帮助构建健壮的分布式系统。
Hystrix作用
Hystrix,主要解决4个问题:
- 隔离(Isolation):通过隔离服务之间的调用,防止故障在整个系统中传播,提高系统的稳定性和可用性。
- 容错(Fault Tolerance):通过降级、断路器等机制,处理外部服务调用的故障,保证系统的可靠性。
- 降级(Fallback):在外部服务不可用或请求超时时,提供备用的功能或数据,保证系统的正常运行。
- 实时监控(Real-time Monitoring):提供实时监控和指标统计功能,帮助了解系统的运行状况,及时发现和解决问题。
Hystrix原理
Hystrix的原理,主要基于:断路器、和线程池隔离技术。
1.断路器
断路器,类似于电路中的断路器,当检测到故障时,会暂时中断对故障服务的调用,从而避免系统的过载和崩溃。
Hystrix 使用断路器,来监控对某个服务的调用是否失败,并根据失败率动态地打开或关闭断路器。
比如:当对某个服务的调用失败率超过设定的阈值时,断路器将会打开,停止对该服务的调用,进入到一个快速失败的状态。
如下图所示:
ServiceB依赖于ServiceC,如果ServiceC挂了,很可能ServiceB也会被拖累挂,所以,这就会涉及到断路器。
断路器会实时监控对某个服务的调用情况,包括:成功率、失败率、超时率等。
这里会涉及到,3大状态:
- 关闭状态(Closed):断路器处于关闭状态时,所有请求会正常通过;
- 半开启状态(Half-Open):如果失败率超过设定的阈值,断路器将会进入半开启状态;
- 打开状态(Open):当断路器处于打开状态时,所有请求将会被快速失败,不再允许通过。
2.线程池隔离
Hystrix 使用线程池来隔离对不同服务的调用,防止故障在整个系统中传播,提高系统的稳定性和可用性。
通过为每个服务调用分配一个独立的线程池,Hystrix 能够确保对一个服务的调用不会因为其他服务的故障而被阻塞,从而避免故障的传播。
如下图所示:
这就类似资源隔离,比如:货船为了进行防止漏水、和火灾的扩散,会将货仓分隔为多个。
线程池隔离能够限制对服务的调用所占用的资源,包括线程数、队列大小等。
通过合理配置线程池的大小和队列的容量,可以确保系统不会因为某个服务的调用过多而导致资源耗尽。
Hystrix使用
1、添加依赖
可以在 pom.xml 文件中添加如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
2.标记服务方法
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import org.springframework.stereotype.Service; @Service public class MyService { @HystrixCommand(fallbackMethod = "fallbackMethod") public String myMethod() { // 业务逻辑 } public String fallbackMethod() { // 降级逻辑 } }
3、启动Hystrix
启动应用程序,Hystrix 将会拦截并处理标记了 @HystrixCommand
注解的方法调用,并在需要时执行降级方法。
通过以上步骤,你就可以在Spring Boot应用中使用Hystrix来实现容错、和故障保护的功能,确保系统在面对外部服务故障或不可用时仍然能够正常运行。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!

后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》