Sentinel
核心API-Sentinel-core
Node
Node:数据统计API接口
StatisticNode:实现Node,使用滑动窗口实现数据统计
DefaultNode:继承StatisticNode,关联资源、关联集群ClusterNode、持有一系列子节点
EntranceNode:继承DefaultNode,qps,总数等会使用子节点参与计算
ClusterNode:统一资源的全局统计点,维护originCountMap
上下文
Context:维护当前执行上下文信息,关联一个入口node,创建上下文时自动创建并加入到ROOT下
ContextUtil:ThreadLocal维护Context,使用Map维护名称和上下文,默认创建了sentinel_default_context上下文,没指定时进入该上下文
用户接口
Sph:定义资源进出方法
CtSph:实现Sph,维护ProcessorSlotChain,每个资源不同的ProcessorSlotChain
SphO:调用返回boolean结果
SphU:调用抛出异常
核心处理流程
ProcessorSlot:处理器槽,用于不同的业务处理,默认家在的插槽,自带责任链职责触发函数
com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot
com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot
com.alibaba.csp.sentinel.slots.logger.LogSlot
com.alibaba.csp.sentinel.slots.statistic.StatisticSlot
com.alibaba.csp.sentinel.slots.system.SystemSlot
com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot
com.alibaba.csp.sentinel.slots.block.flow.FlowSlot
com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot
ProcessorSlotChain:ProcessorSlot实现,维护链结构
DefaultProcessorSlotChain:维护首位节点指针,只负责传递事件
Entry:维护当前入点信息
CtEntry:维护当前的上下文和处理器槽链
NodeSelectorSlot:维护上下文和DefaultNode的map,根据上下文名称创建并设置当前node
ClusterBuilderSlot:维护资源和ClusterNode的map,根据资源创建并设置上一步node的ClusterNode,同时当前Slot是资源独有的,直接维护ClusterNode成员。如果上下文设置了来源,此处创建来源节点并设置
LogSlot:使用EagleEyeLogUtil记录阻塞异常
StatisticSlot:实时统计处理槽,对node进行实时技术,并触发回调StatisticSlotCallbackRegistry
1、2为Node初始化插槽,4为Node统计插槽,顺序固定而且必须存在,3配合鹰眼系统使用
SystemSlot:系统规则检查,使用SystemRuleManager完成检查
Rule:规则基本接口,定义是否能通过规则校验
AbstractRule:资源和limitApp维护
SystemRule:定义系统插槽检查
SystemRuleManager:管理系统规则,SystemRule只是为SystemRuleManager提供属性值,自己并不处理规则,也就是逻辑写在SystemRuleManager里面
AuthoritySlot:认证处理器槽,使用AuthorityRuleManager、AuthorityRule、AuthorityRuleChecker
FlowSlot:流控处理器槽,使用FlowRuleChecker、FlowRule、FlowRuleManager
DegradeSlot:降级处理器槽:使用DegradeRuleManager、DegradeRule
Env
- 维护全局CtSph实例
- 进行InitExecutor初始化调用,初始化SPI的InitFunc函数。其他扩展点都可以使用这个实现,比如与控制台远程通信的CommandCenterInitFunc和HeartbeatSenderInitFunc
sentinel-transport-common
- 使用上面提到的InitFunc初始化心跳上报客户端和命令执行客户端
- 定义通用接口和命令
- 命令执行主要使用Manager加载新规则
sentinel-transport-simple-http和sentinel-transport-netty-http
- 心跳和命令的具体实现
- simple使用bio实现,netty的基于netty实现命令客户端,使用httpclient实现心跳