核心实现
责任链模式
时序图
- 限流功能-基于FlowSlot
SoltChain源码解析
- 类图
- SoltChain内部
1 | public interface ProcessorSlot<T> { |
1 |
|
AbstractLinkedProcessorSlot为一个Slot节点,通过setNext指定下一个Slot节点,通过 fireEntry()方法,调用下一个节点的transformEntry()最终调用到下一个Slot节点的entry方法,本身的结构类似于
1 | clsss Slot { |
- ProcessorSlotChain和DefaultProcessorSlotChain
1 | public abstract class ProcessorSlotChain extends AbstractLinkedProcessorSlot<Object> { |
1 |
|
DefaultProcessorSlotChain实质是指定头节点FirstSlot和endSnot的链表。就如下面结构 :
1 | public Class Chain{ |
com.alibaba.csp.sentinel.slots.DefaultSlotChainBuilde
1 | public ProcessorSlotChain build() { |
结构图
各个slot职责
NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
ClusterBuilderSlot则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
StatistcSlot 则用于记录,统计不同纬度的 runtime 信息;
SystemSlot 则通过系统的状态,例如 load1 等,来控制总的入口流量;
AuthorizationSlot 则根据黑白名单,来做黑白名单控制;
FlowSlot则用于根据预设的限流规则,以及前面 slot 统计的状态,来进行限流;
DegradeSlot则通过统计信息,以及预设的规则,来做熔断降级;
可以看到,我需要的熔断,限流,白名单控制都可以通过配置AuthorizationSlot,FlowSlot,DegradeSlot实现。
扩展
基于SPI与责任链模式的实现扩展。
- 新增自己的Slot。继承AbstractLinkedProcessorSlot。实现自己的流控业务。
- sentinel-core下的SPI配置:
com.alibaba.csp.sentinel.soltchain.SoltChainBuilder初始化追加扩展的Solt
参考:
【sentinel】深入浅出之原理篇SlotChain
文档索引
【流量控制系列1】引言和索引
【流量控制系列2】流量控制的基础方法和算法
【流量控制系列3】Semaphore信号量介绍
【流量控制系列4】Sentinel和Hystrix对比
【流量控制系列5】Sentinel 详细介绍
【流量控制系列6】Sentinel 详细介绍-SlotChain源码解析
【流量控制系列7】Sentinel实践