1、概念(参考:https://blog.csdn.net/xiaojin21cen/article/details/88373447)摘要
熔断:如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。
降级:当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
2、SpringCloud使用Hystrix先熔断后降级
参考:https://my.oschina.net/u/2342969?q=Hystrix
https://mrbird.cc/Spring-Cloud-Hystrix-Circuit-Breaker.html
本质是客户端熔断(eureka消费端熔断)
基本工作过程:
基本使用思路:
2-1、先熔断: 打开Hystrix的断路器。
@EnableCircuitBreaker
2-2、后降级:(客户端)消费者使用@HystrixCommand命令,并且实现回退方法。
@HystrixCommand(fallbackMethod = "自定义方法")
2-3、消费者调用多个生产者服务可以开启异步(AsyncResult)模式。
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.command.AsyncResult;
//fallbackMethod 降级方法。
@HystrixCommand(fallbackMethod = "testAsyncError")
public Future<String> testAsync(){
return new AsyncResult<List<MongoDBTest>>() {
@Override
public List<MongoDBTest> invoke() {
//调用服务生产者服务逻辑
//... ...
}
};
}
public String testAsyncError(String abc){
System.out.println("=================降级逻辑处理==================");
return null;
}
2-4、 @HystrixProperty
隔离策略 | @HystrixProperty(name=”execution.isolation.strategy”, value=”THREAD”) 线程隔离 @HystrixProperty(name=”execution.isolation.strategy”, value=”SEMAPHORE”) 信号隔离 (建议使用信号隔离,无线程开销,速度优良) |
自定义超时时间 | @HystrixProperty(name=”execution.isolation.thread.timeoutinMilliseconds”,value=”2000”) 默认1000ms |
是否开启超时时间 | @HystrixProperty(name=”execution.timeout.enabled”, value=”false”) |
配置信号量
| @HystrixProperty(name=”execution.isolation.semaphore.maxConcurrentRequests”, value=”2”) 当信号量(即调用该接口的并发数量)大于2时,进入降级逻辑处理。(虽然可以做限流,但不提倡使用) |
配置最小请求数 | @HystrixProperty(name=”circuitBreaker.requestVolumeThreshold”, value=”20”) 默认最小请求数20,需要结合errorThresholdPercentage来使用。 |
配置失误请求比例 | @HystrixProperty(name=”circuitBreaker.errorThresholdPercentage”, value=”50”) 默认请求失误的几率为50%,在满足requestVolumeThreshold的阈值,超过半数请求失败的情况,触发熔断机制。 |
2-5、请求合并,当一个消费者调用多个服务时,可以将所有调用服务合并成一个服务。(不研究)
2-6、整合 Dashboard仪表盘
3、传统服务使用Sentinel熔断降级 (后续再写)
Sentinel是一个中间件,需要在服务器中搭建这个中间件,这个中间件比起Hystrix强大
https://mrbird.cc/Sentinel%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%AF%A6%E8%A7%A3.html
https://www.jianshu.com/p/6ee4b7bdb844