Hystrix

Hystrix 是 Netflix公司的一个开源项目,它提供了熔断功能,能够阻止分布式系统中出现联动故障。Hystrix 是通过隔离服务的访问点,阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。

Hystrix 的设计原则

防止单个服务的故障耗尽整个服务的Servlet容器(例如 Tomcat)的线程资源。
快速失败机制,如果某个服务出现了故障,则调用该服务的请求快速失败,而不是线程等待。
提供回退(fallback)方案,在请求发生故障时,提供设定好的回退方案。
使用熔断机制,防止故障扩散到其他服务。
提供熔断器的监控组件 Hystrix Dashboard,可以实时监控熔断器的状态。

Hystrix 的工作机制


当服务的某个API接口失败次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,该API接口正常提供服务。
当该API接口处理请求的失败次数大于设定的阀值时,Hystrix 判定该API接口出现了故障,打开熔断器,此时请求该API接口会执行快速失败的逻辑(即fallback回退的逻辑),不执行业务逻辑,请求的线程不会处于堵塞状态。
处于打开状态的熔断器,一段时间后会处于半打开状态,并将一定数量的请求执行正常逻辑。剩余的请求会执行快速失败,如果执行正常逻辑的请求失败了,则熔断器继续打开;如果成功了,则将熔断器关闭。这样熔断器就具有了自我修复能力。

熔断器:Circuit Breaker

熔断器是位于线程池之前的组件。用户请求某一服务之后,Hystrix会先经过熔断器,此时如果熔断器的状态是打开(跳起),则说明已经熔断,这时将直接进行降级处理,不会继续将请求发到线程池。熔断器相当于在线程池之前的一层屏障。每个熔断器默认维护10个bucket ,每秒创建一个bucket ,每个blucket记录成功,失败,超时,拒绝的次数。当有新的bucket被创建时,最旧的bucket会被抛弃。

熔断器的状态机

Closed:熔断器关闭状态,调用失败次数积累,到了阈值(或一定比例)则启动熔断机制;
Open:熔断器打开状态,此时对下游的调用都内部直接返回错误,不走网络,但设计了一个时钟选项,默认的时钟达到了一定时间(这个时间一般设置成平均故障处理时间,也就是MTTR),到了这个时间,进入半熔断状态;
Half-Open:半熔断状态,允许定量的服务请求,如果调用都成功(或一定比例)则认为恢复了,关闭熔断器,否则认为还没好,又回到熔断器打开状态;

流程说明

1:每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中。
2:执行execute()/queue做同步或异步调用。
3:判断熔断器(circuit-breaker)是否打开,如果打开跳到步骤8,进行降级策略,如果关闭进入步骤。
4:判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤8,否则继续后续步骤。
5:调用HystrixCommand的run方法。运行依赖逻辑
5a:依赖逻辑调用超时,进入步骤8。
6:判断逻辑是否调用成功
6a:返回成功调用结果
6b:调用出错,进入步骤8。
7:计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态。
8:getFallback()降级逻辑。
以下四种情况将触发getFallback调用:
(1):run()方法抛出非HystrixBadRequestException异常
(2):run()方法调用超时
(3):熔断器开启拦截调用
(4):线程池/队列/信号量跑满
8a:没有实现getFallback的Command将直接抛出异常
8b:fallback降级逻辑调用成功直接返回
8c:降级逻辑调用失败抛出异常
9:返回执行成功结果

使用步骤:

  • 引入jar包依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  • 启动类开启熔断@EnableCircuitBreaker
@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
@EnableCircuitBreaker
public class RoleServiceMain8004 {public static void main(String[] args) {SpringApplication.run(RoleServiceMain8004.class, args);}}
  • 定义@HystrixCommand
@RestController
public class RemoteCallerController {@Autowiredprivate IUserService iUserService;@GetMapping("/user/sayHi/{name}")@HystrixCommand(fallbackMethod="sayHiFallback")public CommonRsp<String> sayHi(@PathVariable("name") String name) throws Exception {return iUserService.sayHi(name);}public CommonRsp<String> sayHiFallback(@PathVariable("name") String name) throws Exception {return CommonRspUtils.buildSuccessRsp("接口失败");}}
  • 启动应用,测试

Hystrix基本用法相关推荐

  1. SpringCloud Hystrix初体验

    文章目录 简介 实验步骤 bookstore应用 初始化应用 主程序 应用配置 访问应用 reading应用 初始化应用 主程序 BookService 应用配置 运行应用 参考资料 简介 Hystr ...

  2. 你真的了解lambda吗?一文让你明白lambda用法与源码分析

    本文作者: cmlanche 本文链接: http://www.cmlanche.com/2018/07/22/lambda用法与源码分析/ 转载来源:cmlanche.com 用法 示例:最普遍的一 ...

  3. 使用Hystrix守护应用(3)

    2019独角兽企业重金招聘Python工程师标准>>> 使用Hystrix守护应用(3) 博客分类: 架构 spring 微服务 监控HystrixCommand  除了隔离依赖服务 ...

  4. 白话SpringCloud | 第五章:服务容错保护(Hystrix)

    前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用.在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如 ...

  5. hystrix 单独使用_Spring cloud微服务架构-Hystrix工作原理(微服务故障熔断)

    流程图 下图显示了通过Hystrix向服务依赖项请求时发生的情况: 以下各节将更详细地说明此流程: 1.构造一个HystrixCommand或HystrixObservableCommand对象 第一 ...

  6. 关于“豪猪”,你理解的透彻吗?【Hystrix是个什么玩意儿】

    1. 什么是Hystrix Hystrix是Netflix的一个开源框架,地址如下:https://github.com/Netflix/Hystrix 中文名为"豪猪",即平时很 ...

  7. Spring Cloud自定义Hystrix请求命令

    在上篇文章中,我们介绍了断路器Hystrix的一个简单使用,主要是通过注解来实现断路器的功能的,不过对于Hystrix的使用,除了注解,我们也可以使用继承类的方式来实现,本文我们就来看看另一种Hyst ...

  8. 服务容错保护断路器Hystrix之七:做到自动降级

    从<高可用服务设计之二:Rate limiting 限流与降级>中的"自动降级"中,我们这边将系统遇到"危险"时采取的整套应急方案和措施统一称为降级 ...

  9. feign直接走熔断_SpringCloud微服务面试必问:Hystrix 服务降级、熔断

    本文作者:JLSong 本文链接:https://www.cnblogs.com/songjilong/p/12770999.html 1.Hystrix是什么? Hystrix 是一个用于处理分布式 ...

最新文章

  1. 浅析C语言的一个关键字——register
  2. 大学生学单片机怎么入门?
  3. volatile关键字的作用、原理
  4. [转载]《博客园精华集》Winform筛选结果(共105篇)
  5. 如何在友好的情景下向用户索取手机权限?
  6. 珠海网络推广浅析网站内页排名怎么提升?
  7. 数据库本地服务器为空,本地搭建的服务器访问不到数据库数据
  8. ios raise_如何在iOS 10中关闭“ Raise to Wake”
  9. java 哈希算法_选择Java密码算法第1部分-哈希
  10. testmeshpro合批_TextMesh Pro Emoji Align With Text(表情和文字对齐)
  11. sql azure 语法_Azure SQL Server中的CREATE DATABASE语句概述
  12. 2011版计算机网络原理,2011年7月自考04741计算机网络原理真题及答案
  13. 分享 上班族兼职项目——存着慢慢看很有用
  14. 【STM32】TFTLCD驱动原理
  15. 车上控制器中英文对照
  16. activiti选择上一步下一步处理人
  17. 双系统下Ubuntu完整卸载
  18. 【YbtOJ 线段树 - 2】公园遛狗
  19. 简单易用的OKR工具——源目标OKR
  20. 2022秋招蚂蚁金服面试

热门文章

  1. BB方案AR眼镜Viture One解析,颈挂+磁吸有点意思
  2. 企业常用的三种采购方式
  3. 开放式激光振镜运动控制器(五):ZMC408SCAN光纤激光器的能量控制
  4. 【产品宣传广告片制作软件】Focusky教程 | 前景设置功能
  5. 粉丝投稿!分享自己的帆软软件2021春招后台开发java面经,希望对大家有帮助!
  6. 教你如何保存机密文件(将压缩包保存为一张图片)
  7. 商业模式方面的经典书籍推荐:《商业模式必读12篇》
  8. sap的pod确认_POD交货证明相关配置和主数据维护
  9. Python-新浪微博爬虫采集数据
  10. 2018级SDUTACM集训队第二次选拔赛 E - 月白瞳美的星沙