Hystrix是netflix开源的一款熔断隔离的产品,翻译成中文是豪猪的意思,豪猪科动物以棘刺闻名,棘刺有保护御敌作用,最长可达35厘米。遇敌时棘刺竖立抖动,发出“沙沙”声响,紧急时能后退,再有力地扑向敌人将棘刺插入其身体。豪猪体型肥大,最大者体长达70厘米以上;头小、眼小,四肢短粗;背部与尾部生有长而硬的棘刺,此系防御天敌的重要器官;头骨较细小,颧弓不外扩,而鼻腔却甚膨大;有20枚齿根很浅的牙齿。栖息于山坡、草地或密林中。洞居,夜间活动,并常有一定路线。走起路来棘刺相互摩擦有声。
Hystrix诞生的背景:雪崩效应
分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应。
服务雪崩效应是一种因 服务提供者 的不可用导致 服务调用者 的不可用,并将不可用 逐渐放大
上图中, A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的不可用,引起B的不可用,并将不可用逐渐放大C和D时, 服务雪崩就形成了。
生活中的雪崩效应:
有人不幸得了癌症,需要大量的钱治病,一次又一次的手术,扩散复发,反反复复。从自己的积蓄,到子女的积蓄,再到亲戚的借款,癌症拖垮了整个家庭,让这个家产生了灾难性的雪崩效应。
Hystrix自恢复模式
服务的健康状况 = 请求失败数 / 请求总数.
熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的.
- 当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.
- 当熔断器开关打开时, 请求被禁止通过.
- 当熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁止通过.
- 构建Hystrix的Command对象, 调用执行方法.
- Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法.
- 若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法.
- 若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法.
- 若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
- 若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
- 若服务执行成功, 返回正常结果.
- 若服务降级方法getFallback执行成功, 则返回降级结果.
- 若服务降级方法getFallback执行失败, 则抛出异常.
熔断器是否开启,是通过滚筒式统计方式,统计一个窗口期内,失败请求数所占的比例,如果低于阈值,打开熔断器,高于则处于关闭状态。
Hystrix用的是一种自恢复断舍离方式,防止雪崩的效应,一个很好的方法。对于投资理财,特别是对于投资公司来说也可以用来降低风险。有时候我们会购买多支股票,有的涨,有的跌,对于跌,可以设置一个阈值,《原则》的作者瑞·达利欧,给自己定的阈值是5%,一旦股票跌了5%,为了降低风险,果断抛售,让损失止步于5%,而不是让其进行恶化。对于开关,可以给自己定义一个阈值比如50%,当某个时间段内比如说一个月内,跌的股票所占的比例高于50%,可能股票市场形势不太好,我们需要打开开关,窗口期内不再购买股票,到了下一个窗口期,可以尝试性的购买,如果股票涨了,可以半打开开关,再尝试性的购买几支股票,如果失败的比例低于阈值,关闭开关,多买一些股票,如果还是继续失败,那需要继续打开开关,再等等看,等到下一个窗口期,重新尝试。
Hystrix就好比,一个人被毒蛇咬了一口,与其让毒性扩散到全身,倒不如自断手臂,至少这样能够继续活下去。To be or not to be,That's a question,需要我们做出选择,去断舍离。hystrix,自恢复隔离模式,让你的系统更稳定,财富收益更稳健。