一、场景
雪崩效应:
现在微服务架构,一个系统会依赖多个服务。当其中一个服务不可用时,会造成级联故障,从而导致整个系统不可用。
二、Hystrix是什么
Hystrix是一个熔断器,通过限流、降级、隔离这三个方面去实现系统的容错性,保障系统的稳定运行。
三、Hystrix工作流程
1.调用hystrix command
2.两种方式:同步和异步
3.判断熔断器是否打开,如果打开则跳到第8步
4.判断线程池队列是否满了或者信号量是否用完了,满了则走第8步
5.没有则运行,成功则跳到第6步,超时则跳到第8步
6.执行成功则报告metrics,跳到第9步
7.任何超时,失败,成功的执行结果都会报告metrics,计算熔断器监控指标
8.走fallback降级流程
9.返回成功响应报文
四、断路器内核
断路器的内核是有10个桶,每个桶里统计1秒的成功,失败,超时,拒绝的请求个数,每1秒生成1个桶。
1.调用allowRequest()判断是否允许提交请求
2.判断熔断器是否打开,失败数/成功数+失败数=失败比例,如果失败比例>阀值,则打开熔断器
1.如果关闭则进入到第3步
2.如果是打开的,则判断是否过了一个睡眠时间,没有则返回失败,有的话则放1个请求过去
3.运行,标记此次请求成功或失败结果
五、降级方式
1.fail fast:快速失败
HystrixCommand的run方法抛异常
2.fail silent:安静失败
降级函数:getfallback()
return null;return new Option<T>(); return Collections.emptyList(); return Collections.emptyMap();
3.static fallbak:
降级函数:getfallback()
return true; return DEFAULT_OBJECT;
4.fallback by network: 通过网络进行降级
主服务失败,调用辅助服务进行降级
5.primary + secondary with fallback:主次降级
六、隔离
Hystrix支持两种隔离方式:信号量隔离和线程池隔离。
信号量隔离 vs 线程池隔离
信号量隔离:
优点:轻量,无额外开销
缺点:不支持任务排队和主动超时
不支持异步调用
适用:受信客户
高扇出(网关)
高频高速调用(cache)
线程池隔离:
优点:支持排队和超时
支持异步调用
缺点:会产生额外开销
适用: 不受信客户
有限扇出