alibaba-sentinel

Posted 丶落幕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了alibaba-sentinel相关的知识,希望对你有一定的参考价值。

核心概念

1.流控

代码如下(示例):
在这里插入图片描述

流控

  1. QPS:每秒请求数,当超过阈值,触发熔断
  2. 线程数:字面意思,超过阈值,出发熔断
  3. 关联:当关联A达到阈值,自己熔断
  4. warm up(预热):预热时间内真实阈值=期望阈值/3,预热结束后,慢慢增长到期望值
  5. 排队等待:字面意思,设置指定时间,当请求达到阈值同时超过设定等待时间,触发熔断

2.降级

代码如下(示例):

在这里插入图片描述

降级:

  1. RT:当1s内持续进入5个请求(QPS>=5),对应时刻的平均响应时间(秒级)均超过阈值,那么在结下的时间窗口之内,对这个方法的调用都会自动熔断
  2. 异常比例:当1s内持续进入5个请求(QPS>=5),且异常比例大于设定值,开启熔断,到窗口期结束
  3. 异常数(分钟统计):当一分钟内异常数量达到设定值,开启熔断,到窗口期结束

3.热点规则

代码如下(示例):
在这里插入图片描述

热点规则

  1. 资源名称:即@SentinelResource中的value属性
  2. 参数索引:即参数个数,个人理解
  3. 参数例外项:即当参数指定值等于设置值时,使用参数例外项的阈值设定

4.系统规则

代码如下(示例):

在这里插入图片描述

系统规则(入口级别):

  1. load自适应(仅对Linux/Unix-like机器生效),一般设定值cpu核数*2.5
  2. CPU usage:当系统CPU使用率超过阈值即触发系统保护(取值范围0.0-1.0)
  3. 平均 RT:当单台机器上所有入口流量的平均RT达到阈值即触发系统保护
  4. 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护
  5. 入口QPS:当单台机器上所有入口流量的QPS达到阈值即触发系统保护

5.持久化

就是将持久化配置以json形式存储在nacos中,当sentinel一启动就会读取nacos中的配置,代码如下(示例):

[
    {
        "resource": "/rateLimit/byUrl", 	//资源名称
        "limitApp": "default",		//来源应用
        "grade": 1,					//阈值类型,0表示线程,1表示QPS
        "count": 1,					//单机阈值
        "strategy": 0,				//流控模式,0表示直接,1表示关联,2表示链路
        "controlBehavior": 0,		//流控效果,0表示快速失败,1表示warm up,2表示排队等待
        "clusterMode":false			//是否集群
    }
]

总结

  1. 当配置了blockHandler,那么使用自定义,没有配置的话就用系统默认的
  2. 资源可以为id(即@SentinelResource中的value),也可以为url,只要资源名称唯一
  3. 可以使用全局的handler,方法必须是static,在@SentinelResource中指定即可
  4. @SentinelResource(value = “testhot”,blockHandlerClass = 指定class,blockHandler = 指定方法)
  5. @SentinelResource(value = “fallback”,fallback = “fallbackHandler”)//只负责业务异常
  6. @SentinelResource(value = “fallback”,blockHandler = “blockHandler”)//指负责sentinel控制台配置违规
  7. @SentinelResource(value = “fallback”,blockHandler = “blockHandler”,fallback = “fallbackHandler”,exceptionsToIgnore = {IllegalArgumentException.class})//exceptionsToIgnore:忽略

以上是关于alibaba-sentinel的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器