1、什么是Hystrix
在一个分布式系统中,必然会有部分系统的调用会失败。Hystrix是一个通过添加超时容错和失败容错逻辑来帮助你控制这些分布式系统的交互。Hystrix通过隔离服务之间的访问,阻止他们之间的级联故障以及提供后背选项来实现这些,所有新而这些都用来提高系统的整体弹性。
2、Hystrix用来做什么
Hystrix被设计用来解决一下几个方面
通过第三方(一般来源网络)的调用,给与保护和控制延迟和失败。
在复杂的分布式系统中复制级联失败。
快速失败和修复。
在可能的情况下,回滚挥着优雅的失败。
实现几乎实时监控,警报和操作控制。
3、Hystrix解决了什么问题
复杂的分布式体系结构中的应用程序具有许多依赖关系,每个依赖关系都会在某些时候不可避免的失败。如果主机应用程序未与这些外部的故障隔离,那么可能会被这些故障拖垮。
例如:一个依赖30个SOA服务的系统,每个服务99.99%可用。
99.99%的30次方 ≈ 99.7%
0.3% 意味着一亿次请求 会有 3,000,00次失败
换算成时间大约每月有2个小时服务不稳定.
随着服务依赖数量的变多,服务不稳定的概率会成指数性提高.
而实际中可能更糟糕。
4、Hystrix设计模式
设计详解(命令模式)
4.1、流程图
(可点击查看大图)
流程说明
构造一个HystrixCommand或者HystrixObserverCommand对象,把需要调用的依赖放在run()中
执行execute/queue做同步或者异步执行
是否做了缓存
熔断是否打开
线程池/队列/信号量是否满了
调用run()或者construct()
计算熔断健康度(成功,失败,拒绝,超时)的数据,上报给熔断器,用于统计从而判断熔断器状态,可以根据这些数据来决定是否进行熔断,例如:错误率在80%以上,接口等待超过预定的时间等。
获取Fallback,如果fallback失败,系统报错,所以要尽量防止fallback报错,当然也可以在fallback上加上一层fallback
返回执行结果
参考:https://github.com/Netflix/Hystrix/wiki#what
https://blog.youkuaiyun.com/hzq472583006/article/details/81110443