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

文章目录

  • 架构图
  • 限流原理图
    • 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颜色相同表示同一对象

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

扩展点一官方原理图

在这里插入图片描述

扩展点一node类图

在这里插入图片描述

你可能感兴趣的:(sentinel源码分析,sentinel,限流)