SpringCloud Alibaba系列之Sentinel的API实战

目录

  1. 前言
  2. 流量控制规则
  3. 熔断降级规则
  4. 系统保护规则
  5. 访问控制规则
  6. 热点参数规则
  7. 定义资源
  8. 异常统计
  9. 调用来源
  10. 总结

前言

之前老顾和大家介绍了如何利用Sentinel控制台,设置流控,降级,授权等功能。今天老顾带着大家来了解Sentinel的API,看看如何利用编码方式,对业务进行流控、降级管理

流量控制规则 (FlowRule)

流量规则的定义

重要属性:

SpringCloud Alibaba系列之Sentinel的API实战

同一个资源可以同时有多个限流规则,检查规则时会依次检查。

我们如何用代码进行流控规则的配置,其实也蛮简单;我们可以通过调用 FlowRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则,比如:

SpringCloud Alibaba系列之Sentinel的API实战

上面代码我们在应用启动的时候,初始化限流规则。启动后我们会发现控制台那边会有刚才代码定义的流控规则

SpringCloud Alibaba系列之Sentinel的API实战

熔断降级规则 (DegradeRule)

熔断降级规则包含下面几个重要的属性:

SpringCloud Alibaba系列之Sentinel的API实战

可以通过调用 DegradeRuleManager.loadRules() 方法定义流量控制规则。

SpringCloud Alibaba系列之Sentinel的API实战

系统保护规则 (SystemRule)

规则包含下面几个重要的属性:

SpringCloud Alibaba系列之Sentinel的API实战

可以通过调用 SystemRuleManager.loadRules() 方法定义流量控制规则。

SpringCloud Alibaba系列之Sentinel的API实战

访问控制规则 (AuthorityRule)

授权规则,即黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:

  • resource:资源名,即限流规则的作用对象
  • limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB
  • strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式

可以通过调用 AuthorityRuleManager.loadRules() 方法定义流量控制规则。

SpringCloud Alibaba系列之Sentinel的API实战

热点参数规则(ParamFlowRule)

热点参数规则类似于流量控制规则(FlowRule):

SpringCloud Alibaba系列之Sentinel的API实战

可以通过 ParamFlowRuleManager 的 loadRules 方法更新热点参数规则

SpringCloud Alibaba系列之Sentinel的API实战

定义资源

Sentinel利用SphU进行资源的定义

SpringCloud Alibaba系列之Sentinel的API实战

注意: SphU.entry(xxx) 需要与 entry.exit() 方法成对出现,匹配调用,否则会导致调用链记录异常,抛出 ErrorEntryFreeException 异常。

定义了上面资源名后,配合之前的流控规则,现在就起到了流控保护了。一旦超出流量就提示限流了

SpringCloud Alibaba系列之Sentinel的API实战

SphU.entry定义资源,对资源进行保护;Sentinel就会对这个资源的访问频率,异常等进行统计,监控;如果达到一定的阀值后,就会限流或降级。

异常统计

有些时候我们的业务代码发生了异常,我们希望可以进入业务异常监控,达到一定的阀值,直接

限流处理。我们先来看看下面的代码

SpringCloud Alibaba系列之Sentinel的API实战

上面代码表示如果参数a为空,就抛业务异常。我们再来设置一个降级规则

SpringCloud Alibaba系列之Sentinel的API实战

我们来运行访问一下 /test-api,故意不传参数a

SpringCloud Alibaba系列之Sentinel的API实战

我们发现,不管怎么快速刷新,一直报异常,没有进入降级捕获业务处理流程。这个是怎么回事呢?这个是因为Sentinel只会对BlockException以及他的子异常进行统计监控,不会对其他业务异常进行统计监控。

那我们如果处理呢?这个时候就需要我们

把业务异常也加入到Sentinel的统计监控里面,看如下代码

SpringCloud Alibaba系列之Sentinel的API实战

上面的代码我们捕获业务异常,并且到业务异常处理中,加入Tracer方法,把业务异常加入到统计中,这样业务异常就可以被降级了

调用来源

大家是否记得在

流控规则那里,有个针对来源

SpringCloud Alibaba系列之Sentinel的API实战

那如何代码设置调用来源,看一下

SpringCloud Alibaba系列之Sentinel的API实战

这样就是标记了调用来源。可以在流控规则那边设置针对来源的规则。

总结

Sentinel的核心的Api,SphU定义资源,Tracer定义统计,ContextUtil定义了上下文。小伙伴是不是也发现了,如果我们所有的代码都要用try-catch-finally方式进行处理,而且代码重复度很高,是不是很麻烦,也很恶心。下一篇老顾跟大家分享一下另一种实用的方式,谢谢!!!




---End---

最近老顾上传了微服务网关的分享课程,请大家多多支持

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缓存控制原理,看看能不能难住你

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热点参数限流


分享到:


相關文章: