本文主要从下面几点展开:
- 什么是熔断?
- hystrix是什么东西?
- hystrix能我们解决什么问题?
什么是熔断
做过分布式的同学应该都知道这个概念,在这里还是要解释下熔断,因为对于有些同学,根本就没听过这个。熔断就是切断项目对指定服务的调用。举个例子在分布式环境下有A,B,C,D四个个服务,A依赖B,C,D。在调用的过程中发现D服务异常了,为了不拖垮整个集群,我们会选择不调用D服务,进行服务降级。
Hystrix是什么
上面说了什么是熔断,可是什么时候该启用熔断,什么时候去探测服务是否可用,当依赖异常恢复时,什么时候上层恢复依赖等这些技术细节都是我们要去考虑的。而Hystrix就是为了解决这些问题而诞生的。
在分布式环境下hystrix通过添加延迟容错和失败容差逻辑来帮助我们处理服务之间的交互。它会隔绝各服务间的调用,防止出现雪崩现象并提供fallback失败备用方案,以此提高我们服务集群的弹性。
Hystrix主要解决那些问题
对外依赖包括第三方类库的依赖提供延迟和失败保护
阻断传递失败,防止雪崩
快速失败并即时恢复
合理的fallback和优雅降级
提供近实时的监控、告警和操作控制
集群多依赖场景
当服务都健康的时候如下图所示
当其中一个服务出现延迟,将会阻塞整个用户的请求
一个服务的延迟会导致单位时间内资源一直被占用,应用的其它请求进来也会延迟,紧接着队列开始堆积,线程还有其他系统资源不释放,甚至引发整个系统的级联失败。
Hystrix如何应对上面的问题
- hystrix把每个依赖都进行隔离,对依赖的调用全部包装成HystrixCommand或者HystrixObservableCommand
- 对依赖的调用耗时设置阀值,如果超过阀值直接判定超时
- 对每个依赖维护一个连接池,如果连接池满直接拒绝访问
- hystrix评估调用失败,调用超时,线程拒绝,调用成功的比例,如果超过指定的阀值直接走熔断处理,对依赖的访问直接走fallback逻辑(fallback逻辑使用者自己实现)
- 熔断生效后,会在设定的时间后放出一个请求来探测依赖是否恢复,依赖的应用恢复后关闭熔断
- 修改hystrix配置近实时生效
END
以上主要简单的介绍了下hystrix的使用场景,后续将会整理一些hystrix如何使用,工作原理,以及我们对hystrix的一些改造
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。