Hystrix熔断框架介绍

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

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

什么是熔断

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

Hystrix是什么

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

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

Hystrix主要解决那些问题

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

集群多依赖场景

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

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

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

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的一些改造blog

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