一 概述
1.1 概述
一种容错机制,微服务相互调用。当其中一个服务发生故障时候,产生的解决方案。
1.2 雪崩
微服务中的扇入与扇出:
当很多服务调用一个出现故障的服务时,没有获取到结果,等待时间过长。导致上一级调用等待时间同时变长。很多请求多时堆积,导致资源一直等待不释放。cpu占满,导致所有的服务都不可用。
1.3 Hystrix提供的解决方案
- 包裹请求:使用HystrixCommand包裹对依赖的调用逻辑(@HystrixCommand添加Hystrix控制)
- 跳闸机制:当某服务的错误率超过一定的阔值时,Hystⅸ可以跳闸,停止请求
该服务一段时间。 - 资源隔离:Hysⅸ为每个依赖都维护了一个小型的线程池(舱壁模式)(或者信号
量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等
待,从而加速失败判定。 - 监控:Hystriⅸ可以近乎实时地监控运行指标和配置的变化,例如成功、失败、
超时、以及被拒绝的请求等。 - 回退机制:当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。回
退逻辑由开发人员自行提供,例如返回一个缺省值。服务降级 - 自我修复:断路器打开一段时间后,会自动进入“半开”状态。
二 Hystrix熔断普通应用
2.1概述
2.2 使用
2.2.1 消费者引入jar包
<!--Hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-
hystrix</artifactId>
</dependency>
2.2.2 启动类开启注解
@EnableCircuitBreaker // 开启熔断
/* @SpringCloudApplication
= @SpringBootApplication+@EnableDiscoveryClient+@EnableCircuitBreaker */
@SpringCloudAppLication
2.2.3 定义服务降级处理策略
在消费者方法上添加注解 @HystrixCommand
熔断:添加@HystrixProperty,并定义超时时间。超过时间时,方法结束,返回信息。
降级:增加一个默认返回方法,等改方法出现问题时候,默认返回该方法结果。
@HystrixCommand(
// commandProperties熔断的一些细节属性配置
commandProperties = {
//每一个属性都是一个HystrixProperty
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="2000")
},
fallbackMethod="myFallBack"
)
2.2.4 舱壁模式
每个熔断应用都维护了一个线程池,这个线程池里面存放了所有的外部请求。当线程池里面没有空余线程时候,就无法回应新的请求。
增加一个新的线程池来维护单个方法的请求。
@HystrixCommand(
//线程池的key,相同则公用一个线程池
threadPoolkey="",
threadPoolProperties={
@HystrixProperty(name="coreSize",value="2"),
}
// commandProperties熔断的一些细节属性配置
commandProperties = {
//每一个属性都是一个HystrixProperty
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="2000")
},
fallbackMethod="myFallBack"
)