hystrix功能汇总

一.什么是hystrix?

hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备降级,熔断,依赖隔离,监控(Hystrix Dashboard)等功能。


降级:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据,做到优雅降级。
熔断:当失败率达到阈值时自动触发降级(如因网络故障或超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。
隔离(线程池隔离和信号量隔离):限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他调用。
缓存:提供了请求缓存、请求合并的实现方法。

Hystrix使用场景
1.降级:调用超时时间比你自己定义的阈值要长。
2.熔断:在一段时间内,如果服务的错误百分比超过了一个阈值,就会触发一个断路器来停止对特定服务的所有请求,无论是手动还是自动的
3.隔离:线程池满了,该以来应该立即拒绝请求,而不是排队

二、降级:功能上描述就是,调用服务接口超时,转到其他接口上去。

@GetMapping("/user/test")
@HystrixCommand(fallbackMethod = "fallback2")
public String test(@RequestParam ("number")Integer number) {
    if (number == 1) {
        return "success";
    }
    RestTemplate restTemplate = new RestTemplate();
    String str = restTemplate.getForObject("http://127.0.0.1:8081/rw/user/test", String.class);
    return str;
}

private String fallback2(Integer number) {
	return "太拥挤了,请稍后再试2";
}


修改超时时间,默认超时时间是1000ms,可通过以下进行设置 单位为ms
@HystrixCommand(fallbackMethod = "fallback2",commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")})

三、熔断

功能描述:服务接口在高并发的情况下出现线程阻塞,导致当前线程不可用,慢慢的其他线程也开始阻塞 ,导致整个服务器雪崩。
这时直接熔断服务具体超时的接口,而不是一直等到服务接口超时。

断路器
全开:一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象,断路器完全打开 那么下次请求就不会请求到该服务
半开: 短时间内, 有恢复迹象 断路器会将部分请求发给该服务,正常调用时, 断路器关闭
关闭:当服务一直处于正常状态,能正常调用



@HystrixCommand(fallbackMethod = "fallback2", commandProperties = {
        @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),
        @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
        @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),
        @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60"),
})
@GetMapping("/user/test")
public String test(@RequestParam ("number")Integer number) {
    if (number == 1) {
        return "success";
    }
    RestTemplate restTemplate = new RestTemplate();
    String str = restTemplate.getForObject("http://127.0.0.1:8081/rw/user/test", String.class);
    return str;
}


circuitBreaker.enabled :true 打开熔断 默认开启
circuitBreaker.requestVolumeThreshold: 当在配置时间窗口内达到此数量的失败后,进行短路。默认20个
circuitBreaker.sleepWindowInMilliseconds:短路多久以后开始尝试是否恢复,默认5s
circuitBreaker.errorThresholdPercentage:出错百分比阈值,当达到此阈值后,开始短路。默认50%

四、隔离

为每一个hystrixCommand提供一个线程池,自动实现了依赖隔离,即使线程池满了也不会影响其他进程。

五、服务熔断监控

断路器可视化:启动类添加注解@EnableHystrixDashboard

概念描述跳转
使用案例地址1:跳转
使用案例地址2:跳转

疑问

1、什么是请求合并

每一次的通信都需要建立和断开连接,如果微服务之间的调用非常频繁,那就会有很多的连接在建立和断开,为了减少请求连接的数量,Hystrix提出了请求合并的功能。就是对某个服务的多次请求合并成一个请求,单个请求的参数合成批量请求的参数,这就需要被调用的服务接口需要支持批量调用。

需要用到2个注解:
@HystrixCollapser
@HystrixCommand

请求合并使用的文章:跳转

2、@EnableHystrix注解与@EnableCircuitBreaker的区别

@EnableHystrix引用了@EnableCircuitBreaker,并对@EnableCircuitBreaker进行了简单的封装。

地址:原文地址

3、Hystrix源码解读

HystrixCircuitBreakerConfiguration引入配置类,创建HystrixCommandAspect切面,
2、切点:处理带有@HystrixCommand注解和@HystrixCollapser注解的方法。
3、通知:创建HystrixCommand对象,所以的逻辑都在HystrixCommand的方法里面,但是方法都是通过RxJava的方式编写的可读性比较差。

源码地址:跳转

Hystrix源码分析:跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值