目录
Hystrix断路器
- 三种服务降级的策略
- 熔断
- 超时
- 线程池/信号量。设置阈值限流
Sentinel
Hystrix的基本使用,配置、注解等。
Hystrix的核心原理
feign提供针对类级别的配置(自定义)
- 可配置化的降级策略:根据不同的服务类型
- 信号量/线程池、超时(默认1s)、熔断(错误率)
- HystrixCommandProperty
- 可识别的降级边界
- @HystricCommand,通过注解标注资源。加了注解会被Hystrix接管请求,做一些处理
- 继承HystrixCommand抽象类。
- 数据采集
- 如何触发熔断(10s内20个请求的错误率)->如何采集数据,如何统计数据
- Semaphore,Hystrix通过Semaphore控制最大并发数量
- 行为干预:出发熔断/降级之后,对正常业务产生影响
- 结果干预:fallback()
- 自动恢复(处于熔断状态下会每隔5s尝试取恢复)
Hystrix是如何工作的呢?
带超时降级的Hystrix的注解
自定义注解,@target–method、@Retention–runtime、@Document
自定义timeout default 1000;//超时时间
自定义fallback default “”;//回调函数
结合线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
//定义一个切点,使用了自定义注解的切点
@Pointcut(value = "@annotation(自定义注解)")
public void pointCut(){}
@Around(value = "pointCut()&@annotation(自定义注解)")
public Object doPointcutMethod(){
//拿到自定义注解的timeout
int timeout = 自定义.timeout();
Future future = executorService。commit(()->{
//执行目标方法
});
try{
Object result = future.get(timeout,TimeUnit.MILLISECOUNT);
}catch(Exception e){
//获取到异常,调用自定义的fallback
自定义.fallback();
}
}
- 自定义注解
- 结合线程池
- 结合AOP切面
- 在切面处从线程池中拿到线程进行处理,处理结果feature中的get方法可以设置超时时间。get方法,设置的是等待时间,超过自定义timeout就抛出异常
- - 构造线程池调用,捕捉降级状态(熔断、超时、资源隔离)
- 处理后能拿到线程的返回值,在异常中通过反射拿到使用hystrix的方法的类中的自定义fallback(),进行调用
- fallback方法写在需要降级的类中,并且在需要使用hystrix的方法的注解上面配置fallback方法。
hystrix判断
- 是否处于熔断状态
- 是否被限流
- 线程池资源是否被耗尽
Hytrix熔断的原理以及请求代理的原理
Hystrix的数据统计是采用的华东窗口
滑动窗口:流量控制技术
计数器
滑动窗口
将1min分割为60s,每10s一组进行统计。最后再统计这6组的所有数据。
每10s向后滑动一组。
请求的代理用的AOP
代理后进行一层层拦截
RxJava
- Obervable 被观察者
- Observer观察者
- Subscribe订阅
ReactiveX Java响应式编程框架、观察者模式更方便的监控事件、处理事件