熔断降级

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熔断降级 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章