alibaba-sentinel
Posted 丶落幕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了alibaba-sentinel相关的知识,希望对你有一定的参考价值。
核心概念
1.流控
代码如下(示例):
流控
- QPS:每秒请求数,当超过阈值,触发熔断
- 线程数:字面意思,超过阈值,出发熔断
- 关联:当关联A达到阈值,自己熔断
- warm up(预热):预热时间内真实阈值=期望阈值/3,预热结束后,慢慢增长到期望值
- 排队等待:字面意思,设置指定时间,当请求达到阈值同时超过设定等待时间,触发熔断
2.降级
代码如下(示例):
降级:
- RT:当1s内持续进入5个请求(QPS>=5),对应时刻的平均响应时间(秒级)均超过阈值,那么在结下的时间窗口之内,对这个方法的调用都会自动熔断
- 异常比例:当1s内持续进入5个请求(QPS>=5),且异常比例大于设定值,开启熔断,到窗口期结束
- 异常数(分钟统计):当一分钟内异常数量达到设定值,开启熔断,到窗口期结束
3.热点规则
代码如下(示例):
热点规则
- 资源名称:即@SentinelResource中的value属性
- 参数索引:即参数个数,个人理解
- 参数例外项:即当参数指定值等于设置值时,使用参数例外项的阈值设定
4.系统规则
代码如下(示例):
系统规则(入口级别):
- load自适应(仅对Linux/Unix-like机器生效),一般设定值cpu核数*2.5
- CPU usage:当系统CPU使用率超过阈值即触发系统保护(取值范围0.0-1.0)
- 平均 RT:当单台机器上所有入口流量的平均RT达到阈值即触发系统保护
- 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护
- 入口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 //是否集群
}
]
总结
- 当配置了blockHandler,那么使用自定义,没有配置的话就用系统默认的
- 资源可以为id(即@SentinelResource中的value),也可以为url,只要资源名称唯一
- 可以使用全局的handler,方法必须是static,在@SentinelResource中指定即可
- @SentinelResource(value = “testhot”,blockHandlerClass = 指定class,blockHandler = 指定方法)
- @SentinelResource(value = “fallback”,fallback = “fallbackHandler”)//只负责业务异常
- @SentinelResource(value = “fallback”,blockHandler = “blockHandler”)//指负责sentinel控制台配置违规
- @SentinelResource(value = “fallback”,blockHandler = “blockHandler”,fallback = “fallbackHandler”,exceptionsToIgnore = {IllegalArgumentException.class})//exceptionsToIgnore:忽略
以上是关于alibaba-sentinel的主要内容,如果未能解决你的问题,请参考以下文章