这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战
热点参数规则说明
热点参数规则是通过ParamFlowRule来配置的,也有和FlowRule不同的属性,分别如下参数说明:
- durationInSec:统计窗口时间长度,单位为秒
- paramIdx:热点参数的索引,是必填项,对应的是SphU.entry(xxx,args)中的参数索引位置
- maxQueueingTimeMS:最长排队等待时长,只有当流控行为设置为controlBehavior设置为匀速排队模式时才会生效。
- paramFlowItemList:对指定参数值单独设置限流阈值,不受count阈值的限制。
Sentinel工作原理
Sentinel的核心分为三个部分:工作流程、数据结果和限流算法,工作原理架构图如下所示:
调用链路是Sentinel的工作主流程,由各个Slot插槽组成,把不同的Slot按照顺序串在一起,从而将不同的功能限流、降级、系统保护组合在一起,Sentinel中的各个Slot承担了不同的职责,LogSlot负责记录日志,StatisticSlot负责指标数据、FlowSlot负责限流等,体现了职责分离的设计模式,每个模式都关注于实现某个功能。
在Sentinel中,所有的资源都对应一个资源名称,每次访问资源都会创建一个Entry对象,创建Entry时,会创建一系列的功能槽,这些功能槽组成一个责任链,每个槽负责不同的功能实现。
- NodeSelectorSlot:负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级。
- ClusterBuilderSlot:用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据。
- FlowSlot:根据限流规则和各个Node中的统计数据进行限流判断。
- LogSlot: 出现限流、熔断、系统保护时负责记录日志信息。
- StatisticSlot:用于统计不同维度的请求数、通过数、限流数、线程数等runtime信息,这些数据在DefaultNode、OriginNode和ClusterNode中。
- AuthoritySlot:用于权限控制,根据配置的黑白名单和调用来源信息,来做黑白名单控制。
- SystemSlot:控制总入口流量,限制条件依次是总QPS、总线程数、RT阈值、操作系统当前CPU利用率。
- DegradeSlot:根据熔断规则和各个Node中的统计数据进行服务降级,通过统计信息以及预设的规则,来做熔断降级。