一个服务失败,导致整条链路的服务都失败的情形,我们称之为服务雪崩。
原因大致有四: 1、硬件故障; 2、程序Bug; 3、缓存击穿(用户大量访问缓存中没有的键值,导致大量请求查询数据库,使数据库压力过大); 4、用户大量请求;
服务雪崩的 第一阶段: 服务不可用; 第二阶段:调用端重试加大流量(用户重试/代码逻辑重试); 第三阶段:服务调用者不可用(同步等待造成的资源耗尽); 原文链接:https://blog.csdn.net/qq_38149225/article/details/109454418
Hystrix 就是一个能进行 熔断 和 降级 的库,通过使用它能提高整个系统的弹性。
- 服务降级 ,一些请求会做一些降级处理 比如当前人数太多请稍后查看等等。
- 服务熔断: 断路器将监视所有对远程资源的调用,如对某一个远程资源的调用时间太长或者调用失败次数足够多,那么断路器会出现并采取快速失败,阻止将来调用此远程资源的请求.
常用配置:
超时时间(默认1000ms,单位:ms)
(1)hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
在调用方配置,被该调用方的所有方法的超时时间都是该值,优先级低于下边的指定配置
(2)hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
在调用方配置,被该调用方的指定方法(HystrixCommandKey方法名)的超时时间是该值
断路器
(1)hystrix.command.default.circuitBreaker.requestVolumeThreshold(当在配置时间窗口内达到此数量的失败后,进行短路。默认20个)
For example, if the value is 20, then if only 19 requests are received in the rolling window (say a window of 10 seconds) the circuit will not trip open even if all 19 failed.
简言之,10s内请求失败数量达到20个,断路器开。
(2)hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds(短路多久以后开始尝试是否恢复,默认5s)
(3)hystrix.command.default.circuitBreaker.errorThresholdPercentage(出错百分比阈值,当达到此阈值后,开始短路。默认50%)
Resilience4j
https://github.com/resilience4j/resilience4j-spring-boot2-demo/blob/master/README.md