千家信息网

Sentinel 中slot实现的源代码分析

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,今天就跟大家聊聊有关Sentinel 中slot实现的源代码分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在CtSph.entryWith
千家信息网最后更新 2024年11月18日Sentinel 中slot实现的源代码分析

今天就跟大家聊聊有关Sentinel 中slot实现的源代码分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在CtSph.entryWithPriority方法中,会为每种资源分配一个ProcessorSlotChain实例。默认是通过DefaultSlotChainBuilder类来创建相应的slot chain,构造过程如下:

public ProcessorSlotChain build() {     ProcessorSlotChain chain = new DefaultProcessorSlotChain();     chain.addLast(new NodeSelectorSlot());     chain.addLast(new ClusterBuilderSlot());     chain.addLast(new LogSlot());     chain.addLast(new StatisticSlot());     chain.addLast(new SystemSlot());     chain.addLast(new AuthoritySlot());     chain.addLast(new FlowSlot());     chain.addLast(new DegradeSlot());     return chain; }

默认包含8个slot,分别如下.

NodeSelectorSlot

为同一个资源的不同context创建不同的DefaultNode,存储在一个slot级别的map中,用来存放统计数据。

ClusterBuilderSlot

为同一个资源维护一个单独的ClusterNode实例,存放统计数据。同时根据origin不同,创建相应的StatisticNode。

StatisticSlot

在entry/exit方法中增加default & cluster & statistic node的计数器,实现数据统计。

SystemSlot

通过SystemRuleManager.checkSystem方法实现全局(java进程级别)的流量控制,包括:总qps;总线程数;总平均响应时间;系统平均负载(通过OperatingSystemMXBean获得);CPU使用率(通过OperatingSystemMXBean获得)。

AuthoritySlot

通过AuthorityRuleManager管理所有AuthorityRule,并在resource-origin粒度上实现黑白名单检测。

FlowSlow

流控实现的核心逻辑,依赖FlowRuleManager来管理所有FlowRule集合,在resource维度上测试rule是否生效。FlowRule检查分为local check和cluster check,后者依赖集中服务统一管理资源访问token。

在local check模式中,主要分为两个步骤:选择正确的计数节点(origin/cluster/default node);TrafficShapingController通过计数节点统计数据判断是否放行当前调用。

DegradeSlot

DegradeRuleManager.checkDegrade方法将在resource维度上检测DegradeRule是否生效。当前包含三种降级策略:平均响应时间;异常率;异常数。

看完上述内容,你们对Sentinel 中slot实现的源代码分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0