文章目录
架构图
限流原理图
context 与entry关系
context 与node关系
node自身关系树维护
从请求和资源维度看三者关系
扩展点一官方原理图
扩展点一node类图
架构图
整个源码部分以生产环境使用方式为准讲解
1.1 Sentinel包含控制台: 配置限流规则[系统规则,权限等]
1.2 控制台将规则推送至数据源(zookeeper等)落地
1.3 用户进程安装sentinel模块监听zk配置
2.1请求进入后交由sentinel-adapter对各模块进行拦截处理
2.2 在线程上下文中依据Adapter解析的contextName构建context
2.3 根据contextName构建EntranceNode
2.4 查找资源ResourceWrapper对应的ProcessorSlotChain
2.5 ProcessorSlotChain处理[统计,限流,规则校验等]
对象名 解释
EntranceNode 入口节点
StatisticNode 统计节点,包含秒级和分钟级两个滑动窗口结构
DefaultNode 链路节点,用于统计调用链路上某个资源的数据,维持树状结构
ClusterNode 簇点链路信息
Entry 每一次Adapter模块资源调用都会创建一个 Entry, 栈式结构[先进入]Entry1->Entry2->Entry3[先退出],包含了资源名、curNode(当前统计节点)等信息资源调用结束时需要entry.exit恢复调用栈
Context 调用链路上下文,维持着入口节点,Entry链路,curNode
一个context维护请求链路Entry,每个entry都包含node,维护资源之间的树状关系以及限流信息存储
限流原理图
限流整个工作机制通过责任链处理
每一个资源对应一个ProcessorSlotChain
此工作链通过Spi机制发现,用户可以自定义相应实现,并通过@SpiOrder编排优先级
context 与entry关系
context表示当前线程上下文
不同于跨进程追踪,这里我们不考虑跨线程跨进程处理
同一个线程内多次资源调用,会形成entry链,context 持有相关链
context是线程维度.但context的名称是资源ResourceWrapper维度
context 与node关系
根据资源名会构建EntranceNode
context会持有EntranceNode
node自身关系树维护
一个线程内多次调用资源限流,则node构成树结构
entry构成链表栈[先进后出]结构
从请求和资源维度看三者关系
x轴表示请求,每个请求所在线程构建一个context,但context可能相同,一般为资源名
每次创建context会从缓存获取或者构建entranceNode,同一个资源名对应同一个Node
node本身会构建一个树结构,表示当前统计node树结构限流信息
这也是为什么ProcessorSlotChain是按资源维度实例化,而不是单例模式
因为其中的统计Slot是按照资源维度统计,如果单例化则所有资源的限流统计信息在同一个node
上图中Node颜色相同表示同一对象
扩展点一官方原理图
————————————————
版权声明:本文为CSDN博主「岁月人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35529969/article/details/122930144