Alibaba Sentinel 源码分析(2) core 核心功能 限流(一)

先来看下和Hystrix的对比

从一个基本的demo 看起  FlowQpsDemo,  直接看程序入口main

1.初始化流量统计的规则 rule

2.计时 tick() 方法

3.模拟流量,调用simulateTraffic

可以看到,Sentinel 核心功能,都是依赖于降级,限流的各种规则。都定义在slots目录下,分为鉴权authority,降级degrade和流量监测,限流flow

继续看FlowQpsDemo ,使用TimerTask来计时。 之前初始化规则的时候,已经设定qps限流20

下图是RunTask 来模拟请求

1.继续调用到CtSph的entry方法,继续调用到entryWithPriority

2.校验上下文context为空,就是用默认的context

3.检查全局global Switch,如果关闭,就无需检查其他的规则rule,直接返回

4.如果没有关闭,就获取执行链,也就是很多slot组成的chain

5.继续调用chain.entry,也就是各个slot的entry实现,这里看下flowSlot

6. 会调用checkFlow,调用到FlowRuleChecker

7.首先获取设定好的规则 rules,然后循环规则,每个rule都调用canPassCheck来检查是否可以通过。如果不能通过,则抛出FlowException异常

8.如果是集群模式,就调用passClusterCheck;我们这里看下passLocalCheck

根据策略选择出一个selectNode,继续调用canPass判断能否通过

1.策略为直接,也就是调用方的node;不为直接,在集群环境中获取对应关联资源的node

1.计算出当前的数量curCount,已消耗令牌数量

2.如果当前计数curCount + acquireCount > count (流控规则配置的阈值count),则进行限流处理

 

9.继续调用requestToken,最后通过Transport层(底层channel)发送调用请求,并且获取结果response

11.校验通过的结果,调用applyTokenResult,对结果进行处理;

     OK : 本请求可以执行

    SHOULD_WAIT : 请求应该等待,就休眠一段时间

12.执行完成后,继续调用entry,执行chain上面的下一个slot

 

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值