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实现的源代码分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。