微服务熔断,是当微服务中某个子服务,发生异常不可用,其他服务在进行远程调用时不能正常访问而一直占用资源,导致正常的服务也发生资源不能释放而崩溃,这时为了不造成整个微服务群瘫痪,进行的保护机制

01 关于微服务熔断,意想不到的实验结果

我们基于 SpringCloud,搭了一个简单的微服务场景,应用 A 调 B,在 A 的测试接口上设置了 Hystrix 熔断器,熔断超时时间是 1s,如下图:

你是否知道:

  • 这个熔断超时时间指的是 A 接口的执行时间,还是仅 A 调用 B 的调用时间?

  • A、B 执行逻辑计算的时间都设置了 500ms,熔断超时时间是 1s,熔断器未开启时,A 是否能拿到 B 的返回结果?

  • A 接口超时、抛 Exception 这两种场景都能触发它的降级熔断,底层触发逻辑有什么不一样?看似同步的请求竟然是通过异步线程来实现的?

  • 当 A 触发熔断器开启后,它是否还能成功调用到 B 接口?难道就这样让用户一直失败

实验结果究竟如何,我们一起往下看。(心急的小伙伴可以直接滑到文末,查看答案~)

02 可视化熔断实验的 demo 介绍

本次实验,基于 SpringCloud,Eureka 作为注册中心,单机部署,采用 OpenFeign 实现 RPC 调用,Hystrix 实现熔断机制,下面是应用 A(即 consumer)的测试接口代码:

我们借助 Kindling 程序摄像头,它能够查看分析一次请求调用下的所有线程的工作情况记录的能力,来看下实验结果。

03 实验 1: 当 A 未接入断路器,A 调用 B 的线程分析

当 A 未接入断路器,请求是通过执行线程 exec 来执行,请求开始,打了 A 开始 Sleep 的日志,A sleep 500ms 之后,又打了开始调用 B(即 producter)的日志,最后拿到 B 的执行结果,请求结束。(关于 kindling 摄像头程序操作手册:http://www.kindling.space:33215/project-3/doc-94/)

04 实验 2: 当 A 接入断路器,A 调用 B 的线程分析

当 A 接入断路器后,执行线程 exec 上没有打执行日志了,反而是多了一个 hystrix-ConsumerController 线程,打了 A 开始 sleep 的日志。

接着又由这个线程 sleep500ms,再调用 B,但是我们在这个线程上找不到 net B 的请求事件,我们可以看到,是由另外一个线程 hystrix-producter 来和 B 建立网络连接。

但是我们点击这个线程,查看它从 B 读到的执行结果,它能拿到正常的返回结果:

但是,我们发现最后 A 返回给用户的报文却是:

其实这就是 A 接口上的熔断超时时间在起作用,如下图,Asleep 了 500ms,B 也执行了 500ms,再加上系统调用等时间开销,A 接口的执行时间肯定会超过我们设置的熔断超时时间是 1s,所以,Hystrix 上的 Timer 线程,监测到时间超时,进入了降级服务。

05 实验 3: 当 A 接入断路器,B 直接返回 Exception,线程分析

这个实验,我们让 B 不再执行 500ms,而是直接返回 Exception,也就是说,A 不会再因为超时而进入降级服务。同样的,它也是由多个 Hystrix 线程执行业务,但是和上一个实验中,Timer 线程监测到超时而触发降级的情况不同,这里是由 hystrix-consumerController 直接触发降级。

虽然最后这两个实验都是进入了降级服务,但是通过 Kindling 程序摄像头我们就能清楚的看到,它是怎么被触发降级的。

06 Hystrix 配置讲解

再回到配置这里,刚才实验中提到的熔断超时时间就是通过上图中,红框里的配置实验的,另外,第 1 条配置是 Hystrix 的开关。第 2、3、4 条配置是一起的,我这里配置的意思是:当 10s 内,接口的请求次数达到 10 次,且失败率在 60%以上,就会触发熔断。

07 实验 4: 当 A 接入断路器,且触发熔断后,请求调用情况

当 A 熔断器开启,所有请求直接返回降级结果,如下图:

但是等过了熔断时间窗口期,我们发现,Hystrix 有让一少部分请求正常执行:

这就是熔断器的自我恢复机制,熔断器一共有三种状态,断开后,过了时间窗口期,它就会允许一部分请求进行尝试,如果成功次数达到阈值,熔断器就会关闭,服务恢复。

最后总结一下开篇疑问:

  • 熔断超时时间指的是接口的执行时间

  • 接口超时是有 HystrixTimer 线程定时监测到时间超时,触发的降级,而接口异常是通过 Hystrix 执行线程触发降级

  • 熔断器触发之后,过了窗口时间,熔断器会允许少部分请求正常执行,尝试自我恢复

  • Hystrix 的底层用的也是线程池,一个线程执行业务,一个线程做网络调用,还有个线程做超时检测

眼见为实:关于微服务熔断这几个知识点,你可能理解错了相关推荐

  1. Service Mesh微服务熔断、限流的骚操作

    在微服务架构中,随着服务调用链路变长,为了防止出现级联雪崩,在微服务治理体系中,熔断.限流作为服务自我保护的重要机制,是确保微服务架构稳定运行的关键手段之一. 那么什么是熔断.限流?在传统Spring ...

  2. 玩转Service Mesh微服务熔断、限流骚操作

    在微服务架构中,随着服务调用链路变长,为了防止出现级联雪崩,在微服务治理体系中,熔断.限流作为服务自我保护的重要机制,是确保微服务架构稳定运行的关键手段之一. 那么什么是熔断.限流?在传统Spring ...

  3. 对微服务监控系统分层和监控架构的理解

    对微服务监控系统分层和监控架构的理解 目录 微服务专栏地址 目录 1. 简介 2. 为什么需要监控体系 3. 与单体应用有什么区别 4. 要监控什么 5. 监控体系和分层 6. 监控架构和主流技术栈 ...

  4. 轻拢慢捻,微服务熔断大总管

    本文经授权转载自微信公众号:小姐姐味道 我这篇文章来的晚了些,因为hystrix已经进入维护模式.但已经有非常多的同学入坑了,那么本篇文章就是及时雨.本文将说明熔断使用的一些注意事项,可能会细的让你厌 ...

  5. java中的熔断机制_微服务熔断机制与Hystrix原理

    微服务是由多个子系统构成的系统,每个子系统分别负责自己的业务,各个服务之间通过HTTP请求进行通讯,所以保证每个服务的可用性是整体可用性的前提,因此在一些服务提供者不可用的情况下,导致大量请求阻塞到此 ...

  6. java 熔断机制_利用Spring Cloud实现微服务- 熔断机制

    2. 代码实现及验证 本次代码实现对RestTemplate和Feign两种微服务调用场景下,使用Hystrix验证Spring Cloud的熔断机制. 2.1 RestTemplate的微服务调用场 ...

  7. hystrix 页面_SpringCloud微服务架构篇5:微服务熔断机制-Hystrix

    由于网络原因或者自身的原因,微服务并不能保证服务百分之百可用.如果单个服务出现问题,则调用该服务时会出现延迟甚至调用失败的情况:若调用失败,用户则会重新刷新页面并尝试再次调用,再加上其他服务的调用,从 ...

  8. 什么是微服务架构,该从哪些方面深入理解?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 简单地说,微服务架构就是以业务域或业务功能为边界,将一个大而全的应用拆分为可以独立开发,独立部署,独立测试,独立运行的一组小的应用,并且使用轻量级, ...

  9. 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践

    目录导读 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践 1. 开源代码整体架构设计 2. 微服务逻辑架构设计 3. 微服务熔断降级与限流规划 3.1 微服务熔断 ...

最新文章

  1. junit5和junit4_JUnit 5 –基础
  2. python填表_小Python填表得到d
  3. HTML5与Phonegap框架初步
  4. 使用DevExpress的WebChartControl控件绘制图表(柱状图、折线图、饼图)
  5. 准确检测图像的轮廓 opencv_OpenCV图像处理-轮廓和轮廓特征
  6. 如果华为自研的芯片无法给华为手机带来更高的性价比,那么华为自研芯片给消费者带来的意义是什么呢?
  7. IDEA 使用generator逆向工程生成pojo,mapper
  8. SSH 命令常见用法
  9. C++ 原子减 atomic::fetch_sub fetch_add 返回值
  10. 将swf转成html5代码,一键把swf转为html5 canvas动画 Fanvas
  11. SpringCloud-SpringCloud Bus服务总线的介绍(Day9)
  12. Android仿微信朋友圈发布动态
  13. jQuery淡入浅出
  14. 屏幕小虫子_这些是导致疯狂的小虫子
  15. bing每日壁纸_如何将Bing的每日背景用作Ubuntu壁纸
  16. C++ 中 substr 函数的用法
  17. 逐梦人工智能,普通人也能用百度AI实现梦想
  18. java24设计模式思维导图以及源码配置,思维导图使用幕布处理
  19. CodeGear RAD Studio 2009 RTM V12.0.3170.16989 绿化完全版
  20. 《左耳听风》完结感受

热门文章

  1. 北京矿大机电信息学院计算机专业,2018年中国矿业大学(北京)机电与信息工程学院免试攻读研究生初步名单公示...
  2. Python下安装Pywifi进行WiFi密码破解
  3. 并行传输VS串行传输
  4. 参考基因组 坐标转换 hg38 hg19
  5. excel跨多个表格求和_看完财务同事用Excel函数完成的进销存报表,老板惊呆了...
  6. 网络营销中的动态定价策略
  7. 解决 No converter found capable of converting from type [java.lang.String] to type ... 的问题
  8. 计算机技术在医学领域的运用,计算机在医疗系统中的应用
  9. 大数据智慧数字电商第五课 程序整合 可视化和BI分析
  10. excel每页打印标题