Sentinel源代码分析 - 2.主要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是否生效。当前包含三种降级策略:平均响应时间;异常率;异常数。

 

转载于:https://my.oschina.net/zhuhui/blog/3081749

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值