Sentinel源码阅读:流控管理

本文详细介绍了Sentinel的流控管理,重点解析了FlowSlot类和FlowRule配置对象。FlowSlot整合了多个插槽功能,用于收集运行时统计信息并决定是否执行限流。FlowRule包括资源名、限流策略、阈值等关键配置。通过FlowRuleChecker检查限流规则,根据调用来源、策略和阈值决定是否限流。Sentinel提供了多种流控策略,如快速失败、匀速排队和系统预热。
摘要由CSDN通过智能技术生成

Sentinel FlowSlot 流控管理

 

sentinel 触发流控的类为FlowSlot,在sentinel中触发流控需要经过以下几个步骤:

  • 设置流控规则
  • 采集调用信息
  • 根据调用信息、流控规则决定是否进行限流

1.FlowSlot

我们先来了解下FlowSlot的类注释,通过注释来认识FlowSlot类有哪些功能,会做一些什么样的处理:

  • 合并了从以前的插槽(NodeSelectorSlot,ClusterNodeBuilderSlot和StatisticSlot),FlowSlot收集的运行时统计信息将使用预设规则来决定是否应阻止传入请求。
  • 调用SphU.entry(resourceName)方法,如果有任何规则被触发将抛出:CodeFlowException,用户可以通过捕捉CodeFlowException自定义自己的逻辑。
  • 一个资源可以有多个流规则。FlowSlot遍历这些规则,直到触发其中一个规则或遍历了所有规则。
  • 每个流控规则主要由以下因素组成:grade、strategy、path。我们可以结合这些因素来达到不同的效果。

2.Rule 配置对象

Sentinel Dashboard添加流控规则操作界面:

0

FlowRule类图:

0

Resource:资源名称

limitApp:

流控规则中的 limitApp 字段用于根据调用来源进行流量控制。该字段的值有以下三种选项,分别对应不同的场景:

  • default:表示不区分调用者,来自任何调用者的请求都将进行限流统计。如果这个资源名的调用总和超过了这条规则定义的阈值,则触发限流。
  • {some_origin_name}:表示针对特定的调用者,只有来自这个调用者的请求才会进行流量控制。例如 NodeA 配置了一条针对调用者caller1的规则,那么当且仅当来自 caller1 对 NodeA 的请求才会触发流量控制。
  • other:表示针对除 {some_origin_name} 以外的其余调用方的流量进行流量控制。例如,资源NodeA配置了一条针对调用者 caller1 的限流规则,同时又配置了一条调用者为 other 的规则,那么任意来自非 caller1 对 NodeA 的调用,都不能超过 other 这条规则定义的阈值。

同一个资源名可以配置多条规则,规则的生效顺序为:{some_origin_name} > other > default

grade:限流控制的阈值类型(0:线程数,1:QPS)。

count:限流控制阈值计数。

strategy:限流控制策略,默认为STRATEGY_DIRECT

refResource:在具有相关资源或上下文的流控制中引用资源。

controlBehavior:流量控制后的采取的行为,默认为DefaultController

warmUpPeriodSec:预热时间,如果 controlBehavior 设置为预热(warm up)时,可以配置其预热时间,默认值 10s

maxQueueingTimeMs:

最大超时时间,如果 controlBehavior 设置为排队等待时,等待的最大超时时间,默认为500ms

clusterMode:是否是集群限流模式

clusterConfig:集群扩容相关配置

3.FlowSlot 详解

FlowSlot类结构非常简单,就持有一个CheckRule对象和简单的几个方法,我们重点是要关FlowRuleChecker类:

@SpiOrder(-2000)
public class FlowSlot extends AbstractLinkedProcessorSlot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值