java 服务降级_SpringCloud微服务架构篇5:Hystrix服务降级

服务降级模式

1、快速失败

快速失败模式是指在服务降级处理逻辑中不提供任何处理,直接抛出一个异常。

59964b12f44c77fcd144720cba1ab32a.png

2、静默失败

静默失败即当进行服务降级处理时返回空的结果,针对返回值类型,返回的可能是null、空List或者空Map等。

c884ad63aab622e0a6dcf6a0b3a39298.png

67d41999aeef24f464230a6ac768e3da.png

3、返回默认值

a5c47bd7464e2445ac3ab73d15f7d017.png

4、返回组装的值

当我们的执行结果返回的是一个包括多个字段的复杂对象时,就可以通过服务请求中的值及一些默认值来组装这个返回结果。比如从cookie、服务请求的参数及header、之前成功返回的结果中获取返回结果需要的值。

892c8ef55fd6e4422db47a946ced3df7.png

如果是继承HystrixObservableCommand且返回多个值,当服务降级时仅希望返回为出错之前的结果。

9d78d8e7c1c8004ae0134e305434ee22.png

5、返回远程缓存

返回远程缓存是指在服务处理失败的情况下再发起一起远程请求,不过这次请求的是一个缓存,比如读取Redis中的缓存结果。

30ab9a88e2003eb337b0ea742d291518.png

当使用远程缓存时,需要重新封装为Command进行调用。执行fallback的线程一定要与主线程区分开,否则可能会造成主线程休眠,线程池被消耗光。

96e1c22dae7a6673211808447b71cdd2.png

0ed6cf7eebdc76b7dc24e8b2845a914a.png

6、主/从降级模式

如果从模式仅仅是用来作为主服务失败时的辅助处理,那么最好的方式是将主模式和从模式使用门面模式重新构建一个新的命令。

注意:由于主/从命令都是采用线程池隔离方式执行的,那么所构建的门面命令则可以使用信号量隔离方式,避免了系统多余的开销。

7ee31601511a16abd8188647fa4380d4.png

代码示例:

77bdc28376a4af7ef63983e701b91237.pngfcfc4fb011ab4a2475663060d14e41ab.pngd1ac3cd8b3f1c0d244b561fb70fa5a75.png

请求缓存

Hystrix提供的请求缓存可以在CommandKey/CommandGroup相同的情况下,直接共享命令执行的结果,降低依赖调用次数,在高并发和CacheKey命中率高场景下可以提升服务性能。

7afd78f023384ec43a82c7e4c8bfa3f3.png

1、清除缓存

c3e21e967a6b83f76373a043033b355d.png

2、判断是否是从缓存中返回

HystrixCommand中提供了isResponseFromCache()方法,判断是否从请求缓存中返回。

也可以使用注解:@CacheResult:标记返回结果需要进行缓存,该注解要与@HystrixCommand注解一起使用。

@CacheKey:用来标记如果构建缓存的值。

@CacheRemove:用来标记在方法执行完毕后清除指定的缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值