目录
- 前言
- 全局异常降级
- 熔断遗失
- 熔断降级
- 配置思考
- 总结
前言
之前的文章中老顾已经介绍了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、面试必备:网关异常了怎么办?如何做全局异常处理?
4、Gateway网关系列(二):SpringCloud Gateway入门实战,路由规则
5、Gateway网关系列开篇:SpringCloud的官方网关Gateway介绍
6、API网关在微服务架构中的应用,这一篇就够了
7、学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)
8、Lambda用在哪里?几种场景?
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缓存控制原理,看看能不能难住你
本文暂时没有评论,来添加一个吧(●'◡'●)