目录
- 前言
- 流量控制规则
- 熔断降级规则
- 系统保护规则
- 访问控制规则
- 热点参数规则
- 定义资源
- 异常统计
- 调用来源
- 总结
前言
之前老顾和大家介绍了如何利用Sentinel控制台,设置流控,降级,授权等功能。今天老顾带着大家来了解Sentinel的API,看看如何利用编码方式,对业务进行流控、降级管理。
流量控制规则 (FlowRule)
流量规则的定义
重要属性:
同一个资源可以同时有多个限流规则,检查规则时会依次检查。
我们如何用代码进行流控规则的配置,其实也蛮简单;我们可以通过调用 FlowRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则,比如:
上面代码我们在应用启动的时候,初始化限流规则。启动后我们会发现控制台那边会有刚才代码定义的流控规则。
熔断降级规则 (DegradeRule)
熔断降级规则包含下面几个重要的属性:
可以通过调用 DegradeRuleManager.loadRules() 方法定义流量控制规则。
系统保护规则 (SystemRule)
规则包含下面几个重要的属性:
可以通过调用 SystemRuleManager.loadRules() 方法定义流量控制规则。
访问控制规则 (AuthorityRule)
授权规则,即黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:
- resource:资源名,即限流规则的作用对象
- limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB
- strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式
可以通过调用 AuthorityRuleManager.loadRules() 方法定义流量控制规则。
热点参数规则(ParamFlowRule)
热点参数规则类似于流量控制规则(FlowRule):
可以通过 ParamFlowRuleManager 的 loadRules 方法更新热点参数规则
定义资源
Sentinel利用SphU进行资源的定义
注意: SphU.entry(xxx) 需要与 entry.exit() 方法成对出现,匹配调用,否则会导致调用链记录异常,抛出 ErrorEntryFreeException 异常。
定义了上面资源名后,配合之前的流控规则,现在就起到了流控保护了。一旦超出流量就提示限流了
SphU.entry定义资源,对资源进行保护;Sentinel就会对这个资源的访问频率,异常等进行统计,监控;如果达到一定的阀值后,就会限流或降级。
异常统计
有些时候我们的业务代码发生了异常,我们希望可以进入业务异常监控,达到一定的阀值,直接
限流处理。我们先来看看下面的代码上面代码表示如果参数a为空,就抛业务异常。我们再来设置一个降级规则
我们来运行访问一下 /test-api,故意不传参数a
我们发现,不管怎么快速刷新,一直报异常,没有进入降级捕获业务处理流程。这个是怎么回事呢?这个是因为Sentinel只会对BlockException以及他的子异常进行统计监控,不会对其他业务异常进行统计监控。
那我们如果处理呢?这个时候就需要我们
把业务异常也加入到Sentinel的统计监控里面,看如下代码上面的代码我们捕获业务异常,并且到业务异常处理中,加入Tracer方法,把业务异常加入到统计中,这样业务异常就可以被降级了。
调用来源
大家是否记得在
流控规则那里,有个针对来源那如何代码设置调用来源,看一下
这样就是标记了调用来源。可以在流控规则那边设置针对来源的规则。
总结
Sentinel的核心的Api,SphU定义资源,Tracer定义统计,ContextUtil定义了上下文。小伙伴是不是也发现了,如果我们所有的代码都要用try-catch-finally方式进行处理,而且代码重复度很高,是不是很麻烦,也很恶心。下一篇老顾跟大家分享一下另一种实用的方式,谢谢!!!
---End---
最近老顾上传了微服务网关的分享课程,请大家多多支持
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缓存控制原理,看看能不能难住你
43、SpringCloud Alibaba之Nacos多环境多项目管理
44、SpringCloud Alibaba系列之Nacos配置中心玩法
45、SpringCloud Alibaba之Nacos注册中心
46、SpringCloud Plus版本之SpringCloud Alibaba
47、SpringCloud Alibaba之Nacos集群、持久化
48、SpringCloud Alibaba之Nacos共享配置、灰度配置
49、SpringCloud Alibaba之Sentinel工作原理
50、SpringCloud Alibaba之Sentinel流控管理
51、SpringCloud Alibaba之Sentinel降级管理
52、SpringCloud Alibaba之Sentinel热点参数限流
閱讀更多 老顧聊技術 的文章