前言
上一篇讲解了hystrix四个接口的关系和调用流程,这一节主要讲解一下在住流程中熔断策略是怎样的,是如何判断应用是否该进行熔断的
强制开关
在流量进来的时候,会经过这个方法来判断现在的熔断开关状态,如果为true则允许流量通过,如果为false则进入fallback阶段
|
正常策略
在没有强制开关的前提下,会进入正常的熔断开关判断流程
|
流量探测
如果熔断开关打开的时间已经超过了睡眠时间大小,那么应该进行一次流量探测,探测后端服务是否已经恢复
|
小结
1.可以设置强制关闭,和强制打开两个熔断开关,并且强制打开开关优先
2.强制关闭开关不影响熔断开关的开闭操作,即,就算是强制关闭开关,熔断开关也会正常的因为错误率和阈值等正常开闭,主要是不影响统计上报的数据
3.默认是错误超过50%且10秒内超过20个请求会进行熔断,具体统计见下小节
4.当熔断开关打开之后,在睡眠时间达到之后,会允许探测流量通过,在run方法执行成功之后会关闭熔断,然后正常服务
请求统计方式
metrics.rollingStats.timeInMilliseconds设置时间窗口大小,默认是10s
metrics.rollingStats.numBuckets设置窗口的桶的数量,默认是10个,且时间大小必须能够被桶数量整除
|
上面代码可以看到,当在判断熔断状态时得到一个HealthCount对象,这个对象中包含success error errorpercent。都是在目前时间窗口中算出来的。从上面的代码可以看到,fallback在哪些地方会执行,分别是:
- run方法抛出异常,执行失败
- run方法超时
- 线程池和semaphore两种方式请求数已满导致的拒绝
- 熔断开关打开
使用方可以自定义参数来调整时间和桶的大小来适配自己的业务需求,下面这张图简单的说明了熔断的流程
原文地址:https://www.cnblogs.com/200911/p/8416886.html