如上图,我们可以看出来,调用链路是Sentinel的工作主要流程,是由各种Slot插槽组成的,将不同的Slot按照一定的顺序串在一起(其实就是责任链模式),从而将不同的功能组合在一起,这里说到的功能主要是限流、降级、系统保护,Sentinel中的各个插槽Slot都有不同的职责,比如:LogSlot,看名字就知道,这个插槽是负责日志的,FlowSlot就是负责限流的等等,职责相对比较分离,每个模块都着重维护着一个功能
在Sentinel中,其实所有资源都对应的资源名称,也就是resourceName,每次访问资源都会创建一个对应的Entry对象,在创建Entry的同事,还会创建一系列的功能插槽(slot chain),这些槽会组成一个责任链,并且每一个的职责还不一样,具体如下:
1、NodeSelectorSlot:负责收集资源的调用路径,以梳妆结构存储调用栈,用于根据调用路径来限流降级
2、ClusterBuilderSlot:负责创建以资源名维度统计的集群节点ClusterNode,一级创建每个ClusterNode下按调用来源prigin划分的StatisticNode
3、LogSlot:在出现限流、熔断、系统保护时负责记录日志
4、AuthoritySlot:权限控制,支持黑名单和白名单两种策略
5、SystemSlot:控制总的入口流量,限制条件依次是总QPS、总线程数、RT阈值、操作系统当前load、操作系统当前CPU利用率
6、FlowSlot:根据限流规则和各个Node中的同级数据进行限流判断
7、DegradeSlot:根据熔断规则和各个Node中的统计数据进行服务降级
8、StatisticSlot:统计不同维度的请求数、通过数、限流数、线程数等runtime信息,这些数据存储在DefaultNode、OriginNode和ClusterNode中