SpringCloud Hystrix

服务容错保护:SpringCloud Hystrix

Hystrix是什么?

SpringCloud Hystrix 实现来断路器、线程隔离等一系列服务保护功能。它是基于Netflix的开源框架Hystrix实现的,该框架的目标在于通过控制那些访问远程服务、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备服务降级,服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大的功能。

为什么会出现Hystrix?

在微服务架构中,我们将系统拆分来很多服务单元,各单元的应用通过服务注册于订阅的方式相互依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就可能因为网络原因或是依赖法务自身问题出现调用故障或延迟,而这些问题也会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后会因为等待出现故障的依赖方形成任务积压,最终导致自身服务的瘫痪。若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这种架构相比较传统架构更加不稳定,为了解决这样的问题,产生了断路器等一系列的服务保护机制。

Hystrix工作流程

Hystrix工作流程图

  1. 创建HystrixCommand或HystrixableCommand对象,表示对依赖服务的操作请求,同时传递所有需要的参数。
    HystrixCommand:用在依赖的服务返回单个操作结果的时候。
    HystrixableCommand:用在依赖的服务返回多个操作结果的时候。
  2. 命令执行,Hystrix在执行的时候会根据创建的Command对象以及具体情况来选择一个执行方式。
    HystrixCommand有两个执行方式:
    execute():同步执行,从依赖的服务返回一个单一的结果对象,或是在发生错误时抛出异常。
    queue():异步执行,直接返回一个Future对象,其中包含了服务执行结束时要返回的单一结果对象。
    HystrixableCommand有两个执行方式:
    observe():返回Observable对象,它代表操作多个结果,它是一个Hot Observable
    toObservable():返回Observable对象,但它返回的是一个Cold Observable
  3. 结果是否被缓存,如果当前命令的请求缓存功能是被启用的,并且该命令缓存命中,那么缓存的结果会立即以Observalbe对象的形式返回。
  4. 断路器是否打开,在命令结果没有缓存命中的时候,Hystrix在执行命令前需要检查断路器是否为打开状态,如果是打开的直接到fallback处理逻辑,如果是关闭的,那么Hystrix跳转到下一步,检查是否有可用资源来执行命令。
  5. 线程池/请求队列/信号量是否占满,如果这些被占满,那么Hystrix直接到fallback处理逻辑,否则就执行下一步。
  6. 执行HystrixObservableCommand.construct()或者HystrixCommand.run(),如果执行时间超出了命令设置的超时阀值,当前处理线程将会抛出一个TimeoutException,Hystrix会执行fallback处理逻辑,如果命令没有抛出异常并返回了结果,那么Hystrix在记录一些日志并采集监控报告之后将结果返回。
  7. 计算断路器的监控度, Hystrix会将“成功”,“失败”,“拒绝”,“超时”等信息报告给断路器,断路器会维护这些数据,并处理断路器的状态。
  8. fallback处理(服务降级),当命令执行失败Hystrix会进入fallback尝试回退处理。
  9. 返回成功的响应。

未完待续。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值