sentinel源码分析第一篇一Sentinel概述

架构图

整个源码部分以生产环境使用方式为准讲解

  • 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颜色相同表示同一对象

  • 上图中Node颜色相同表示同一对象

扩展点一官方原理图

在这里插入图片描述

扩展点一node类图

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值