SpringCloud——服务容错——Hystrix

1.现在的微服务存在哪些问题?

在大型的微服务项目中,肯定少不了服务之间多条链路调用,如果调用中有一个服务出现了问题,如果不做任何的处理,就会造成大量的阻塞,可能会导致整个服务雪崩。

2.要解决的问题

3.服务降级(fallback)

什么情况下需要服务降级:

  • 程序运行异常或者宕机。

  • 超时。

  • 服务熔断触发服务降级(断路器打开)。

  • 线程池/信号量打满也会导致服务降级(利用Jmeter进行了压测,tomcat的默认的工作线程数被打满了,没有多余的线程来分解压力和处理,其他的接口也会卡顿)。

如果出现问题,要返回一个提示或者状态,不要傻等,一般最好在订单服务800处配置兜底方法。

3.1服务降级的配置

我们要在服务方法上面@HystrixCommand设置一个最长的执行时间,还要设置一个超时或异常之后要执行的兜底的方法。

但是这样会产生一个新的问题,每个业务方法对应一个兜底的方法,会导致代码膨胀,我们的优化思路是统一的和自定义的分开。在800端的controller层定义全局的服务降级(DefaultProperties)。

为了防止8001端宕机异常,我们的在所有的方法处配置降级,这样也会和业务逻辑混乱在一起,我们可以在800端的Service层的Feign调用处配置通配的服务降级(FeignFallback)。

注意

OpenFeign的服务调用默认只等待1秒钟,这里的等待和在controller的方法上配置的timeoutInMilliseconds是不一样的,比如timeoutInMilliseconds=5秒,意思是从我调用到返回到我controller时,我能等待5s,但是人家Service层的OpenFeign还是默认只能等1s。

4.服务熔断

需要注意的是服务熔断和服务降级完全是两个不同的概念。

4.1熔断机制概述

熔断机制是应对雪崩效应的一种微服务链路保护机制 。当调用链路中的某个微服务出异常或者响应时间太长时,会进行服务降级执行兜底方法,然后可通过其机制判断可能会熔断该节点微服务的调用,等到检测到该节点微服务调用响应正常后,恢复调用链路。

4.2对开启熔断机制过程的梳理

首先在一定的时间窗口期(默认10s)内,只有当请求的个数满足一定的阈值(默认20个)后,并且其请求失败率超过一定的阈值(默认50%),此时断路器将会开启(open),调用此接口的主逻辑都不能正常执行,会服务降级去调用兜底方法, 一段时间之后(默认5s),会暂时信任一下(openhalf),让一个请求进行执行主逻辑,如果成功,则断路器会关闭(close),如果失败,则断路器继续开启,等待下一次信任。

5.服务限流(后面使用Sentinel解决)

秒杀高并发等操作时,严禁一窝蜂的过来拥挤,大家排队,一个一个来。

6.HystrixDashboard图形监控的使用

相关推荐
Javashop_jjj1 小时前
三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
spring boot·ui·uni-app
PHP源码1 小时前
SpringBoot校园二手商城系统
java·spring boot·springboot二手商城·java校园二手商城系统
毕业设计制作和分享2 小时前
springboot159基于springboot框架开发的景区民宿预约系统的设计与实现
java·spring boot·后端
MC丶科3 小时前
【SpringBoot常见报错与解决方案】端口被占用?Spring Boot 修改端口号的 3 种方法,第 3 种 90% 的人不知道!
java·linux·spring boot
计算机学长felix4 小时前
基于SpringBoot的“中学信息技术课程教学网站”的设计与实现(源码+数据库+文档+PPT)_2025-10-17
数据库·spring boot·后端
Luffe船长4 小时前
前端vue2+js+springboot实现excle导入优化
前端·javascript·spring boot
周杰伦_Jay4 小时前
【Spring Boot从入门到精通】原理、实战与最佳实践
java·spring boot·后端
呼哧呼哧.4 小时前
SpringBoot 的入门开发
java·spring boot·后端
武昌库里写JAVA5 小时前
C语言 函数指针和指针函数区别 - C语言零基础入门教程
vue.js·spring boot·sql·layui·课程设计
小学鸡!6 小时前
spring boot实现接口数据脱敏,整合jackson实现敏感信息隐藏脱敏
java·spring boot