• 【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来统计次数。

  • 相关阅读:
    C++前缀和算法的应用:向下取整数对和 原理源码测试用例
    略微扒一扒HashMap的源码
    Java实现前后端任意参数类型转换(Date、LocalDateTime、BigDecimal)
    【无标题】行操作DataFrame
    创建计划协议、维护创建计划、收货
    py-运算符
    hitTest的基本用法
    【Android开发】Android服务和系统服务
    正则验证用户名和跨域postmessage
    【Go入门】 Go如何使得Web工作
  • 原文地址:https://blog.csdn.net/llg___/article/details/132662283