16

本文主要从下面几点展开:

  1. 什么是熔断?
  2. hystrix是什么东西?
  3. hystrix能我们解决什么问题?

什么是熔断

做过分布式的同学应该都知道这个概念,在这里还是要解释下熔断,因为对于有些同学,根本就没听过这个。熔断就是切断项目对指定服务的调用。举个例子在分布式环境下有A,B,C,D四个个服务,A依赖B,C,D。在调用的过程中发现D服务异常了,为了不拖垮整个集群,我们会选择不调用D服务,进行服务降级。
clipboard.png

Hystrix是什么

上面说了什么是熔断,可是什么时候该启用熔断,什么时候去探测服务是否可用,当依赖异常恢复时,什么时候上层恢复依赖等这些技术细节都是我们要去考虑的。而Hystrix就是为了解决这些问题而诞生的。

在分布式环境下hystrix通过添加延迟容错和失败容差逻辑来帮助我们处理服务之间的交互。它会隔绝各服务间的调用,防止出现雪崩现象并提供fallback失败备用方案,以此提高我们服务集群的弹性。

Hystrix主要解决那些问题

对外依赖包括第三方类库的依赖提供延迟和失败保护
阻断传递失败,防止雪崩
快速失败并即时恢复
合理的fallback和优雅降级
提供近实时的监控、告警和操作控制

集群多依赖场景

当服务都健康的时候如下图所示
https://github.com/Netflix/Hystrix/wiki/images/soa-1-640.png

当其中一个服务出现延迟,将会阻塞整个用户的请求
https://github.com/Netflix/Hystrix/wiki/images/soa-2-640.png

一个服务的延迟会导致单位时间内资源一直被占用,应用的其它请求进来也会延迟,紧接着队列开始堆积,线程还有其他系统资源不释放,甚至引发整个系统的级联失败。

clipboard.png

Hystrix如何应对上面的问题

https://github.com/Netflix/Hystrix/wiki/images/soa-4-isolation-640.png

  • hystrix把每个依赖都进行隔离,对依赖的调用全部包装成HystrixCommand或者HystrixObservableCommand
  • 对依赖的调用耗时设置阀值,如果超过阀值直接判定超时
  • 对每个依赖维护一个连接池,如果连接池满直接拒绝访问
  • hystrix评估调用失败,调用超时,线程拒绝,调用成功的比例,如果超过指定的阀值直接走熔断处理,对依赖的访问直接走fallback逻辑(fallback逻辑使用者自己实现)
  • 熔断生效后,会在设定的时间后放出一个请求来探测依赖是否恢复,依赖的应用恢复后关闭熔断
  • 修改hystrix配置近实时生效

END

以上主要简单的介绍了下hystrix的使用场景,后续将会整理一些hystrix如何使用,工作原理,以及我们对hystrix的一些改造

后续系列文章推荐
Hystrix常用功能介绍
Hystrix执行原理
Hystrix熔断器执行机制
Hystrix超时实现机制


青芒
205 声望60 粉丝

java骚年


引用和评论

1 篇内容引用
0 条评论