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

享学课堂特约作者:老顾

目录

前言

全局异常降级

熔断遗失

熔断降级

配置思考

总结

前言

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

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

全局异常降级

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


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

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

Plain  Text===fall back===

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

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

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

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

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

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

熔断遗失

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

Plain  Texthttp://localhost:8083/getHeader

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

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

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

Java{

"statusCode": "0",

"statusMessage": "处理成功",

"data": "success"

}

我们再执行一次

Plain  Texthttp://localhost:8083/getHeader

照样报错!!!

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

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

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

熔断降级

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

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

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

这个原因就是

Plain  TextproviderServiceFeign.transferHeaders();

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

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

配置思考

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

Plain  TextGET:http://service-provider/transferHeaders

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

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

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

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

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

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

总结

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

你可能感兴趣的:(Sentinel全局默认熔断降级策略的思考)