计算机系统应用教程网站

网站首页 > 技术文章 正文

Sentinel全局Feign默认熔断降级策略的思考

btikc 2024-09-10 12:03:32 技术文章 20 ℃ 0 评论

目录

  1. 前言
  2. 全局异常降级
  3. 熔断遗失
  4. 熔断降级
  5. 配置思考
  6. 总结

前言

之前的文章中老顾已经介绍了sentinel的基本用法,以及利用Sentinel-Dashboard控制台去配置降级策略,全局Feign调用默认异常,再可以通过nacos持久化方式保证降级策略不丢失

整体在使用过程中,没有发现什么大问题;但是仔细看一下日志就会发现一些问题;且为了解决这个问题要配置很多东西。发现有个地方在使用的时候不方便;而且是很不方便,浪费很多时间。我们先看看使用过程中的问题

全局异常降级

在之前的文章中,老顾介绍了Feign调用异常全局降级策略,这里我们再简单描述一下

上图中表示有个普通的业务,consumer服务通过Feign调用provider服务,为了保证系统的稳定性,防止provider服务出现什么情况,在consumer服务配置了fallback降级策略

这样设置之后,即使provider服务挂了,我们也可以走fallback方法,可以获取到

===fall back===

这样就保证了整体系统的稳定,而不会因为provider服务不稳定导致consumer服务也不稳定,专业术语就是防止雪崩效应。

有没有发现Fegin接口中@FeignClient注解需加上fallback属性

@FeignClient(name = "service-provider",fallback = ProviderServiceFallback.class)

小伙伴们我们想一想,如果我们consumer有10个Feign的外部调用,也就是有10个Feign接口,那么要保证系统的稳定,我们需要在每个Feign接口上面配置fallback。而且一般降级逻辑业务处理都是很类似的,都是标准的业务。是不是很麻烦,那能不能系统有个全局的fallback处理呢?

之前的文章《Sentinel限流、降级的统一处理》中已经做过介绍,小伙伴可以出门右拐就可以找到。

本篇文章就不重复介绍具体的实现了。

熔断遗失

上面我们介绍了全局降级;我们来看看的效果,我们把provider服务关掉,这样直接访问consumer对象的getHeader方法,代码里面是先获得客户端传过来的header参数,再远程Feign调用方法。看如下代码

http://localhost:8083/getHeader

我们发现因为provider服务挂了,导致

Load balancer does not have available server for client: service-provider

不过我们的返回结果,还是友好的;保证系统照样进行

{
    "statusCode": "0",
    "statusMessage": "处理成功",
    "data": "success"
}

我们再执行一次

http://localhost:8083/getHeader

照样报错!!!

不管执行几次,日志照样有异常;虽然前端看不出来!!!小伙伴有没有发现问题?怎么每次都有异常发生?现在的案例中的异常是provider服务不存在,大家看的不是太明显,因为consumer服务即时就知道立刻返回了异常;但如果异常是provider服务执行时间太长,导致consumer服务调用超时返回的异常;那么每次调用都产生超时异常,那根本起不到防止雪崩效应

那是不是哪边出了问题了?对的,我们忘记配置Sentinel的降级策略了;本质就是熔断降级策略。

关于熔断,小伙伴们可以网上查看,补一下知识哦

熔断降级

之前文章中老顾介绍过Sentinel Dashboard,可以进行配置熔断降级;怎么安装,小伙伴们可以去看之前的文章

上面的配置代表,10秒内最小请求数达到2个,而且有1个异常就执行熔断,熔断持续10秒

我们在执行多次,发现异常日志没有了。

这个原因就是

providerServiceFeign.transferHeaders();

执行Fegin远程调用时,如果熔断了,执行此代码时不会执行远程调用;而是会立刻调用fallback方法。

这样配置后才算真正的配置完成,达到熔断后保护系统的稳定性。

配置思考

我们上面配置了一个熔断降级策略,资源名为

GET:http://service-provider/transferHeaders

这个是根据服务名+请求url组成的。如果我们有很多Feign的远程调用;如

如果有很多Feign接口,那是不是我们都要进行一一配置呢?都要到Sentinel Dashboard那边进行配置呢?

而且如果微服务很多,那对应的每个服务都要进行一一配置;有没有觉得很麻烦。而且配置熔断的规则都很类似,连数值很多都一样。

而且很多时候我们也不记得有多少Feign方法了,需要自己一看看查找,真的很麻烦

那能不能像全局降级fallback一样,有一个可以配置全局熔断策略的方法呢?这样我们就可以不需要配置,只要@FeignClient远程调用,都会默认自动配置上熔断降级策略

小伙伴们想想有什么方案呢?老顾会在下一篇文章中介绍。

总结

有些知识确实需要在企业实战中发现问题,小伙伴们要善于观察、思考;重构解决方案,能不能找到更好的方案,从而提高效率,减少人为干预。小伙伴们持续看下一篇文章哦,介绍具体的实现方案哦。

---End---


老顾的微服务网关分享课程,请大家多多支持

推荐阅读

你所不知道的头部参数传递的坑,来吧!抓紧出坑

5分钟让你理解K8S必备架构概念,以及网络模型(一)

5分钟让你理解K8S必备架构概念,以及网络模型(二)

5分钟让你理解K8S必备架构概念,以及网络模型(三)

大厂如何基于binlog解决多机房同步mysql数据(一)?

大厂如何基于binlog解决多机房同步mysql数据(二)?

基于binlog的canal组件有哪些使用场景(三)?

基于binlog日志之canal企业应用及高可用原理(四)?

可用于大型应用的微服务生态灰度发布如何实现?

一线大厂级别公共Redis集群监控,细化到每个项目实例

Sharding-jdbc的实战入门之水平分表(一)

Sharding-Jdbc之水平分库和读写分离(二)

a、dubbo如何处理业务异常,这个一定要知道哦!

b、企业级SpringBoot应用多个子项目配置文件规划、多环境支持(一)

c、企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

d、企业级SpringBoot应用多个子项目配置文件之配置中心(三)

e、利用阿里开源工具进行排查线上CPU居高问题

f、阿里二面:如何快速排查死锁?如何避免死锁?

g、微服务分布式架构中,如何实现日志链路跟踪?

h、网关如何聚合各个微服务的接口文档?

i、Kubernetes之POD、容器之间的网络通信

j、K8S中的Service的存在理由

k、企业微服务项目如何进入K8S的全过程

l、阿里开源项目Sentinel限流、降级的统一处理

m、大厂二面:Redis的分布式布隆过滤器是什么原理?

1基于RocketMq的SpringCloud Stream框架实战入门

2、如何搭建消息中间件应用框架之SpringCloud Stream

3面试必备:网关异常了怎么办?如何做全局异常处理?

4Gateway网关系列(二):SpringCloud Gateway入门实战,路由规则

5Gateway网关系列开篇:SpringCloud的官方网关Gateway介绍

6API网关在微服务架构中的应用,这一篇就够了

7学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)

8Lambda用在哪里?几种场景?

9、为什么会出现Lambda表达式,你知道吗?

10、不说“分布式事务”理论,直接上大厂阿里的解决方案,绝对实用

11、女程序员问到这个问题,让我思考了半天,Mysql的“三高”架构

12、大厂二面:CAP原则为什么只能满足其中两项?而不能同时满足

13、阿里P7二面:聊聊零拷贝的原理

14、秒杀系统的核心点都在这里,快来取

15、你了解如何利用token方式实现分布式Session吗?

16、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂

17、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调

18、企业实战Redis全方面思考,你思考了吗?

19、面试题:Thread的start和run的区别

20、面试题:什么是CAS?CAS的作用以及缺点

21、如何访问redis中的海量数据?避免事故产生

22、如何解决Redis热点问题?以及如何发现热点?

23、如何设计API接口,实现统一格式返回?

24、你真的知道在生产环境下如何部署tomcat吗?

25、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案

26、分享大厂分布式唯一ID设计方案,快来围观

27、你想了解一线大厂的分布式唯一ID生成方案吗?

28、你知道如何处理大数据量吗?(数据拆分篇)

29、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)

30、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?

31、你了解大型网站的页面静态化吗?

32、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?

33、你知道怎么解决DB读写分离,导致数据不一致问题吗?

34、DB读写分离情况下,如何解决缓存和数据库不一致性问题?

35、你真的知道怎么使用缓存吗?

36、如何利用锁,防止缓存击穿?重构思想的重要性

37、海量订单产生的业务高峰期,如何避免消息的重复消费?

38、你知道如何保障生产端100%消息投递成功吗?

39、微服务下的分布式session该如何管理?

40、阿里二面:filter、interceptor、aspect应如何选择?很多人中招

41、互联网架构重要组员CDN,很多高级开发都没有实操过,来看这里

42、阿里二面:CDN缓存控制原理,看看能不能难住你

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表