Hystrix自恢复模式

服务的健康状况 = 请求失败数 / 请求总数.
熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的.

  1. 当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.
  2. 当熔断器开关打开时, 请求被禁止通过.
  3. 当熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁止通过.

  1. 构建Hystrix的Command对象, 调用执行方法.
  2. Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法.
  3. 若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法.
  4. 若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法.
  5. 若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
  6. 若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
  7. 若服务执行成功, 返回正常结果.
  8. 若服务降级方法getFallback执行成功, 则返回降级结果.
  9. 若服务降级方法getFallback执行失败, 则抛出异常.

熔断器是否开启,是通过滚筒式统计方式,统计一个窗口期内,失败请求数所占的比例,如果低于阈值,打开熔断器,高于则处于关闭状态。

   Hystrix用的是一种自恢复断舍离方式,防止雪崩的效应,一个很好的方法。对于投资理财,特别是对于投资公司来说也可以用来降低风险。有时候我们会购买多支股票,有的涨,有的跌,对于跌,可以设置一个阈值,《原则》的作者瑞·达利欧,给自己定的阈值是5%,一旦股票跌了5%,为了降低风险,果断抛售,让损失止步于5%,而不是让其进行恶化。对于开关,可以给自己定义一个阈值比如50%,当某个时间段内比如说一个月内,跌的股票所占的比例高于50%,可能股票市场形势不太好,我们需要打开开关,窗口期内不再购买股票,到了下一个窗口期,可以尝试性的购买,如果股票涨了,可以半打开开关,再尝试性的购买几支股票,如果失败的比例低于阈值,关闭开关,多买一些股票,如果还是继续失败,那需要继续打开开关,再等等看,等到下一个窗口期,重新尝试。

Hystrix就好比,一个人被毒蛇咬了一口,与其让毒性扩散到全身,倒不如自断手臂,至少这样能够继续活下去。To be or not to be,That’s a question,需要我们做出选择,去断舍离。hystrix,自恢复隔离模式,让你的系统更稳定,财富收益更稳健。

 转自:https://zhuanlan.zhihu.com/p/63773699