Sentinel实现原理(一):单机QPS流控原理
Sentinel实现原理(一):单机QPS流控原理
sentinel是一款常用的限流组件,既然是限流,我们有必要了解一些它是如何限流的。
一、具体流程
1、初始化context
context代表调用链路上下文,每一次调用都会有一个context。请求进来后,首先会初始化context。初始化context完成后,会新增一个EntranceNode,作为Root的子节点。
2、CtSph创建CtEntry
每次调用都会创建一个Entry。CtEntry为普通的Entry,创建完CtEntry后,设置到context的CurEntry中。
3、NodeSelectorSlot创建DefaultNode
创建的DefaultNode作为EntranceNode的子节点,并且也设置为context的CurNode。
4、ClusterBuilderSlot创建ClusterNode
创建的ClusterNode设置到DefaultNode中
5、FlowSlot校验是否可以通过
a、首先取出该资源所有配置的规则,假设我们只配置了1条流控规则
b、获取DefaultNode的ClusterNode
c、DefaultController根据ClusterNode的QPS判断是否可以通过,计算QPS采用滑动窗口算法
6、StatisticSlot累计QPS
增加DefaultNode的调用数和线程数,同时也增加ClusterNode的调用数和线程数
二、总结
每次调用都会创建context和entry,NodeSelectorSlot和ClusterBuilderSlot都会创建node。经过FlowSlot时,会根据QPS或者线程数判断是否限流。然后回到StatisticSlot时,StatisticSlot会增加Node的调用数和线程数,作为之后FlowSlot限流的依据。
参考文章:
Sentinel限流实现原理 - 吴振照 - 博客园