Hystrix是什么?

hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。

在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。

Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。

为什么需要Hystrix?

在大中型分布式系统中,通常系统很多依赖(HTTP,hession,Netty,Dubbo等),如下图:

在高并发访问下,这些依赖的稳定性与否对系统的影响非常大,但是依赖有很多不可控问题:如网络连接缓慢,资源繁忙,暂时不可用,服务脱机等。

如下图:QPS为50的依赖 I 出现不可用,但是其他依赖仍然可用。

当依赖I 阻塞时,大多数服务器的线程池就出现阻塞(BLOCK),影响整个线上服务的稳定性.如下图:

在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败。高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险

例如:一个依赖30个SOA服务的系统,每个服务99.99%可用。

99.99%的30次方 ≈ 99.7%

0.3% 意味着一亿次请求 会有 3,000,00次失败

换算成时间大约每月有2个小时服务不稳定.

随着服务依赖数量的变多,服务不稳定的概率会成指数性提高.

解决问题方案:对依赖做隔离,Hystrix就是处理依赖隔离的框架,同时也是可以帮我们做依赖服务的治理和监控。

Hystrix如何解决依赖隔离?

Hystrix使用命令模式HystrixCommand(Command)包装依赖调用逻辑,每个命令在单独线程中/信号授权下执行。

可配置依赖调用超时时间,超时时间一般设为比99.5%平均时间略高即可.当调用超时时,直接返回或执行fallback逻辑。

为每个依赖提供一个小的线程池(或信号),如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。

依赖调用结果分:成功,失败(抛出异常),超时,线程拒绝,短路。 请求失败(异常,拒绝,超时,短路)时执行fallback(降级)逻辑。

提供熔断器组件,可以自动运行或手动调用,停止当前依赖一段时间(10秒),熔断器默认错误率阈值为50%,超过将自动运行。

提供近实时依赖的统计和监控。

Hystrix依赖的隔离架构,如下图:

Hystrix应用实战
Maven:

<dependency><groupId>com.netflix.hystrix</groupId><artifactId>hystrix-core</artifactId><version>1.5.13</version>
</dependency>

源码太多,不一一贴上来,这里只展示主要的测试源码。

public static void main(String[] args) {System.out.println(test("javastack"));
}private static String test(String name) {HystrixUtil.HystrixReqConfig hc = HystrixUtil.HystrixReqConfig.withGroupKey("TestGroup").withTimeout(3).withUnit(TimeUnit.SECONDS).withPassNum(64);String result = HystrixUtil.getExcuteResult(new HystrixCallableService<String>() {@Overridepublic String execute() {try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}return "success " + name;}@Overridepublic String fallback() {return "fallback " + name;}}, hc);return result;
}

项目中的实际使用案例:

参考:

https://www.cnblogs.com/li3807/p/8780980.html

https://www.jianshu.com/p/3e11ac385c73?from=timeline

https://segmentfault.com/a/1190000012845088

https://www.colabug.com/2804676.html

https://blog.csdn.net/chengqiuming/article/details/81412510

https://blog.csdn.net/an88411980/article/details/80552973

https://hot66hot.iteye.com/blog/2155036

转载于:https://www.cnblogs.com/qmfsun/p/11003443.html

分布式服务防雪崩熔断器(Hystrix),实现服务降级相关推荐

  1. 分布式服务防雪崩熔断器,Hystrix理论+实战

    Hystrix是什么? hystrix对应的中文名字是"豪猪",豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netfl ...

  2. 第六章 服务熔断器Hystrix

    6-1.Hystrix是什么? ​   在微服务的框架中,我们是将一个单体应用拆分成多个服务单元,各个服务单元之间通过注册中心彼此发现和消费对方提供的服务,每个服务器单元都是单独部署,在各自服务的运行 ...

  3. 微服务-熔断器Hystrix

    1. 雪崩效应 复杂的分布式体系结构中的应用程序很多都有依赖调用关系, 每个依赖关系有些时候会出现不可避免的失败(异常,超时,网络故障等). 这种多个服务层调用,基础服务的故障可能会导致级联故障,进而 ...

  4. 防雪崩利器:熔断器 Hystrix 的原理与使用

    1.概述 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一 ...

  5. 防雪崩利器:熔断器 Hystrix 的原理与使用--转

    原文地址:https://segmentfault.com/a/1190000005988895 前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. ...

  6. 《深入理解 Spring Cloud 与微服务构建》第九章 熔断器 Hystrix

    <深入理解 Spring Cloud 与微服务构建>第九章 熔断器 Hystrix 文章目录 <深入理解 Spring Cloud 与微服务构建>第九章 熔断器 Hystrix ...

  7. 微服务(四) 【手摸手带你搭建Spring Cloud】 Hystrix 熔断器 什么是熔断器? 什么是Hystrix?为什么要熔断器 Hystrix用来做什么? 作用是什么?

    上一章我们讲了负载均衡 文章目录 前言 一.Hystrix是什么? 二.Hystrix的作用是什么?Hystrix具体要保护什么? 2.1什么是微服务-雪崩效应 2.1服务熔断原理 三.实践 前言 一 ...

  8. 熔断器 java_防雪崩利器:熔断器 Hystrix 的原理与使用

    我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...

  9. 注册中心集群 服务负载均衡 雪崩效应Hystrix

    集群 为什么需要集群? 如果只有一个注册中心服务器,会存在单点故障所以要集群. 什么是集群? 一组协同工作的服务实体,用以提供比单一服务实体更具扩展性和可用性的服务平台. 多台服务器集中在一起,实现同 ...

  10. springcloud的处理雪崩效应的Hystrix和服务监控Dashboard

    服务雪崩效应 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败. 正常情况下的访问 : 但是,当请求的服务中出现无法访问.异常.超时等问题时(图中的I),那么用户 ...

最新文章

  1. 【python语言基础】疑难点整理1
  2. android6.0单独编译和调试framework源码的方法
  3. 【渝粤教育】国家开放大学2018年春季 7397-21T家庭教育咨询与辅导 参考试题
  4. c语言中小数在内存中的存储,c语言中小数在内存中的存储
  5. python随机发红包_python 微信红包随机金额
  6. 【GANs学习笔记】(十三)BIGGAN
  7. ABAP RFC函数导入参数 EXPORTING 传入内表形式参数
  8. 是什么导致了脸上的痤疮呢?
  9. php h m s 转为秒,将m³/s换算为m³/h (立方米每秒换算为立方米每小时)
  10. BZOJ 1778 [Usaco2010 Hol] Dotp 驱逐猪猡
  11. NOIP2017大总结
  12. Jupyter notebook 报错 500 : Internal Server Error的解决方法
  13. 我的世界服务器怎么修改id,我的世界服务器id大全 | 手游网游页游攻略大全
  14. php 怎么调用git,Git怎么用
  15. Barsetto百胜图BAV02自助咖啡机,创造便捷生活的无限可能
  16. 快手抖音上热门涨粉后怎么赚钱引流变现四大技巧-阿甘电商
  17. 科技的成就(三十八)
  18. tf.image.resize与skimage的resize
  19. 两年数据对比柱形图_如何选择PPT数据图表类型?
  20. 聊聊 iOS 实现渐变色文本以及可能你不知道的细节

热门文章

  1. Android 编程下 ListView 和 CheckBox 混合使用时的常见问题
  2. Spring MVC 关于分页的简单实现
  3. 使用HTML编写简单的邮件模版
  4. 1024程序员节,别人家的公司真香!羡慕ing~
  5. 再见!LayUI !
  6. 看了扎心:39岁单身程序员入住养老院!养老院:院内平均年龄瞬间年轻了
  7. Linux!为何他一人就写出这么强的系统,中国却做不出来?
  8. 我一个普通程序员,光靠GitHub打赏就年入70万,其实你也可以
  9. 最受欢迎Java数据库访问框架(DAO层)
  10. 耐人寻味的 8 幅Java技术图