• 【Sentinel】ProcessorSlotChain处理器插槽链与Node


    1、Sentinel的基本概念

    Sentinel实现限流、隔离、降级、熔断等功能,本质要做的就是两件事情:

    • 统计数据:统计某个资源的访问数据(QPS、RT等信息)
    • 规则判断:判断限流规则、隔离规则、降级规则、熔断规则是否满足

    这里的资源就是希望被Sentinel保护的业务,例如项目中定义的controller方法就是默认被Sentinel保护的资源。

    2、ProcessorSlotChain

    实现上述功能的核心骨架是一个叫做ProcessorSlotChain的类(ProcessorSlotChain即处理器插槽链)。这个类基于责任链模式来设计,将不同的功能(限流、降级、系统保护)封装为一个个的Slot,请求进入后逐个执行即可。

    在这里插入图片描述

    插槽链中的插槽分两大类,一类负责统计数据的构建(statistic):

    • NodeSelectorSlot:负责构建簇点链路中的节点(DefaultNode),将这些节点形成链路树
    • ClusterBuilderSlot:负责构建某个资源的ClusterNode,ClusterNode可以保存资源的运行信息(响应时间、QPS、block 数目、线程数、异常数等)以及来源信息(origin名称)
    • StatisticSlot:负责统计实时调用数据,包括运行信息、来源信息等

    另一类插槽服务判断规则是否达到:

    • AuthoritySlot:负责授权规则(来源控制)
    • SystemSlot:负责系统保护规则
    • ParamFlowSlot:负责热点参数限流规则
    • FlowSlot:负责限流规则
    • DegradeSlot:负责降级规则

    3、Node

    Sentinel中的簇点链路是由一个个的Node组成的,Node是一个接口,包括下面的实现:
    在这里插入图片描述
    所有的节点都可以记录对资源的访问统计数据,所以都是StatisticNode的子类。按照作用分为两类Node:

    • DefaultNode:代表链路树中的每一个资源,一个资源出现在不同链路中时,会创建不同的DefaultNode节点。而树的入口节点叫EntranceNode,是一种特殊的DefaultNode
    • ClusterNode:代表资源,一个资源不管出现在多少链路中,只会有一个ClusterNode。记录的是当前资源被访问的所有统计数据之和。

    根据这两种node的特点,可以知道它们用于不同的限流模式:

    DefaultNode记录的是这个资源在当前链路中的访问数据,用来实现基于链路模式的限流规则。ClusterNode记录的是这个资源在所有链路中的访问数据,实现默认模式、关联模式的限流规则。

    例如:我们在一个SpringMVC项目中,有两个业务:

    • 业务1:controller中的资源/order/query访问了service中的资源/goods
    • 业务2:controller中的资源/order/save访问了service中的资源/goods

    则创建的链路如下:
    在这里插入图片描述
    此时,对于资源/goods,可使用DeafultNode对两个链路分别做限流,也可以直接用ClusterNode来对这个资源做统一的统计和整体的限流。当然,上面的EntranceNode,也是个资源,也有自身的Cluster来统计次数。

  • 相关阅读:
    不得不知道的一些Java学习资料
    Docker Ubuntu php nginx mysql redis 开发环境部署教程
    Kommander服务器系统配置
    dreamweaver作业静态HTML网页设计——动漫主题:天宝伏妖录(7页) 学生动漫网页设计作品静态HTML网页模板源码
    SpringMVC之CRUD(增删改查)
    Leecode DFS深度优先搜索
    英语单词记忆(词缀 / 前缀)
    JVM学习-自动内存管理
    Debian篇——系统安装在SD卡上如何调整系统分区大小
    3D可视化工厂是如何实现的?
  • 原文地址:https://blog.csdn.net/llg___/article/details/132662283