介绍
Sentinel 的核心是将不同的 Slot 按照顺序串在一起(使用了责任链模式),这些不同的 Slot实现了不同的功能(限流、降级、熔断、系统保护)。Slot Chain 主要可以分为两部分:统计数据构建部分(statistic)和判断部分(rule checking)。
核心结构如下图
结构图说明
通过上图可以看出,整个结构分为几大块
- Invocation Tree Node接口是Sentinel 里面的各种种类的统计节点,Invocation Tree 中就是各种Node,不同的上下文Context会
- ClusterNode ClusterNode保存的是同一个Resource的相关的统计信息,是以Resource为维度的,不区分Context
- WindowLeapArray 滑动窗口环形数组,适用于统计时间段内的统计数据的工具
- Slot Chain Entry 插槽责任节点调用链,一般是流控责任节点,每个责任节点负责一种相关的流控效果实现。 如果责任节点中被流控,那么就抛出相关的BlockedException,以实现流控效果
- Rules 通过Sentinel Dashboard中配置的各种流控规则,在相关责任节点需要的时候读取来根据规则进行流控。
相关核心概念
- Context 对资源操作时的上下文环境,每个资源操作(
针对Resource进行的entry/exit
)必须属于一个Context,如果程序中未指定Context,会创建name为"sentinel_default_context"的默认Context。一个Context生命周期内可能有多个资源操作,Context生命周期内的最后一个资源exit时会清理该Context,这也预示这真个Context生命周期的结束,可以粗略的理解成一个请求线程,就会产生一个Context,但是如果未指定,他们的名字都是sentinel_default_context - Entry 表示一次资源操作,内部会保存当前调用信息。在一个Context生命周期中多次资源操作,也就是对应多个Entry,这些Entry形成parent/child结构保存在Entry实例中
- SlotChain 流控责任节点插槽调用链,可以定义自己的责任节点在调用链上, 以实现自定义流控效果。