SpringCloud(四)Hystrix解决雪崩问题-服务熔断

服务熔断

Hystix解决雪崩问题的手段有两个:线程隔离 和 服务熔断。在上节中了解了的服务服务降级使用,这节看看服务熔断的配置使用

熔断原理

熔断器,也叫断路器,其英文单词为: Circuit Breaker
熔断机制的原理很简单,像家里的电路熔断器,如果电路发生短路能立刻熔断电路,避免发生灾难。在分布式系统中应用这-模式之后,服务调用方可以自己进行判断某些服务反应慢或者存在大量超时的情况时,能够主动熔断,防止整个系统被拖垮。
不同于电路熔断只能断不能自动重连,Hystrix 可以实现弹性容错,当情况好转之后,可以自动重连。这就好比魔术师把鸽子变没了容易,但是真正考验技术的是如何把消失的鸽子再变回来。通过断路的式,可以将后续请求直接拒绝掉,一段时间之后允许部分请求通过,如果调用成功则回到电路闭合状态,否则继续断开。

状态机有3个状态

在这里插入图片描述

  • Closed: 关闭状态(断路器关闭),所有请求都正常访问。
  • Open:打开状态(断路器打开),所有请求都会被降级。Hystix会对请求情况计数,当一定时间内失败请求百分比达到阈值,则触发熔断,断路器会完全关闭。默认失败比例的阈值是50%,请求次数最少不低于20次。
  • Half Open:半开状态,Closed状态不是永久的,关闭后会进入休眠时间(默认是5S)。随后断路器会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会完全打开断路器,否则继续保持关闭,再次进行休眠计时。
@RestController
@RequestMapping("/consumer")
@DefaultProperties(defaultFallback = "findByIdFallback")
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("{id}")
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")

    })
    public String findById(@PathVariable("id") Integer id) {
        if (id % 2 == 0) {//多次访问偶数id触发熔断
            throw new RuntimeException("");
        }
        String url = "http://user-service/user/findById/" + id;
        String user = restTemplate.getForObject(url, String.class);
        return user;
    }
    
 	//默认fallback方法,不需要再有参数了
    public String findByIdFallback(){
        return "不好意思!服务器正忙!!!!";
    }
}

在这里插入图片描述
默认的熔断触发要求较高,休眠时间窗较短,为了测试方便,我们可以通过配置修改熔断策略

# 触发熔断的最小请求次数,默认20
circuitBreaker.requestVolumeThreshold=10 # requestVolumeThreshold
# 触发熔断的失败请求最小占比,默认50%
circuitBreaker.sleepWindowInMilliseconds=10000 # errorThresholdPercentage
# 休眠时长,默认是5000毫秒
circuitBreaker.errorThresholdPercentage =50 # sleepWindowlnMilliseconds

(一般熔断时长,我们不需要去调,而上节的超时时长需要根据具体需求去调节)

发布了46 篇原创文章 · 获赞 169 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览