Sentinel熔断降级

分布式系统越来越流行,服务之间的可靠性、可用性越来重要。Sentinel 是面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护等多个维度来帮助您保障微服务的稳定性。

下面以客户端基础服务为例,阐述接入公司sentinel熔断实现流量控制、熔断降级为例。客户端基础服务处于公司业务链路中属于中间环节,既要对来自上游开放平台的请求流量控制,又要对下游基础服务的异常进行熔断降级。
1、流量控制
原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。详细请参考:
https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
注解形式+QPS+快速失败:加入注解,自定义限流后的blockHandler方法。
在这里插入图片描述
在这里插入图片描述
配置:
在这里插入图片描述
效果:
可以从sentinel Dashboard上看QPS限制在50,从日志上查看进入自定义blockHandler方法。
在这里插入图片描述
在这里插入图片描述

2、熔断降级
注解形式+RT:加入注解,自定义降级后的fallback方法。
平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 5 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。详细请参考:https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
在这里插入图片描述
在这里插入图片描述
配置:
在这里插入图片描述
效果:从日志上查看进入自定义fallBack方法
在这里插入图片描述

常见问题总结:
问题一:jar包冲突,sentinel的流控和降级注解不生效,冲突jar如下:
解决方案:合理排除掉冲突jar,客户端基础服务选择的保留高版本jar。
问题二:Apollo上未新增sentinel命名空间,流控和降级注解不生效。
解决方案:Apollo是sentinel规则持久化的形式,需要在项目中配置sentinel及在Apollo上新增sentinel命名空间。
问题三:使用@SentinelResoure注解同时配置blockHandler和fallback,会导致fallback不生效。
解决方案:注解中blockHandler和fallback分开。
问题四:dubbo超时时间会导致降级方法fallback不生效。
解决方法:若要进入降级方法,降级规则中RT时长要小于dubbo的超时时间。

本次客户端基础服务使用了sentinel最基本的功能限流和降级,sentinel有很多其他功能,比如:网管流控、白名单等功能,都在特定的业务场景下使用的。希望以上的分享对后面接入sentinel熔断的x小伙伴有所帮助或避坑。

作者简介:就职于甜橙金融信息技术部,负责服务端开发,专注于微服务、分布式、性能调优、高可用,欢迎各位同仁沟通交流。

发布了4 篇原创文章 · 获赞 17 · 访问量 2568

猜你喜欢

转载自blog.csdn.net/weixin_39178876/article/details/104819029