• Sentinel源码分析


    Sentinel

    核心API-Sentinel-core

    Node

    Node:数据统计API接口

    StatisticNode:实现Node,使用滑动窗口实现数据统计

    DefaultNode:继承StatisticNode,关联资源、关联集群ClusterNode、持有一系列子节点

    EntranceNode:继承DefaultNode,qps,总数等会使用子节点参与计算

    ClusterNode:统一资源的全局统计点,维护originCountMap

    上下文

    Context:维护当前执行上下文信息,关联一个入口node,创建上下文时自动创建并加入到ROOT下

    ContextUtil:ThreadLocal维护Context,使用Map维护名称和上下文,默认创建了sentinel_default_context上下文,没指定时进入该上下文

    用户接口

    Sph:定义资源进出方法

    CtSph:实现Sph,维护ProcessorSlotChain,每个资源不同的ProcessorSlotChain

    SphO:调用返回boolean结果

    SphU:调用抛出异常

    核心处理流程

    ProcessorSlot:处理器槽,用于不同的业务处理,默认家在的插槽,自带责任链职责触发函数

    com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot
    com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot
    com.alibaba.csp.sentinel.slots.logger.LogSlot
    com.alibaba.csp.sentinel.slots.statistic.StatisticSlot
    com.alibaba.csp.sentinel.slots.system.SystemSlot
    com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot
    com.alibaba.csp.sentinel.slots.block.flow.FlowSlot
    com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot
    

    ProcessorSlotChain:ProcessorSlot实现,维护链结构

    DefaultProcessorSlotChain:维护首位节点指针,只负责传递事件

    Entry:维护当前入点信息

    CtEntry:维护当前的上下文和处理器槽链

    NodeSelectorSlot:维护上下文和DefaultNode的map,根据上下文名称创建并设置当前node

    ClusterBuilderSlot:维护资源和ClusterNode的map,根据资源创建并设置上一步node的ClusterNode,同时当前Slot是资源独有的,直接维护ClusterNode成员。如果上下文设置了来源,此处创建来源节点并设置

    LogSlot:使用EagleEyeLogUtil记录阻塞异常

    StatisticSlot:实时统计处理槽,对node进行实时技术,并触发回调StatisticSlotCallbackRegistry

    1、2为Node初始化插槽,4为Node统计插槽,顺序固定而且必须存在,3配合鹰眼系统使用

    SystemSlot:系统规则检查,使用SystemRuleManager完成检查

    Rule:规则基本接口,定义是否能通过规则校验

    AbstractRule:资源和limitApp维护

    SystemRule:定义系统插槽检查

    SystemRuleManager:管理系统规则,SystemRule只是为SystemRuleManager提供属性值,自己并不处理规则,也就是逻辑写在SystemRuleManager里面

    AuthoritySlot:认证处理器槽,使用AuthorityRuleManager、AuthorityRule、AuthorityRuleChecker

    FlowSlot:流控处理器槽,使用FlowRuleChecker、FlowRule、FlowRuleManager

    DegradeSlot:降级处理器槽:使用DegradeRuleManager、DegradeRule

    Env

    • 维护全局CtSph实例
    • 进行InitExecutor初始化调用,初始化SPI的InitFunc函数。其他扩展点都可以使用这个实现,比如与控制台远程通信的CommandCenterInitFunc和HeartbeatSenderInitFunc

    sentinel-transport-common

    • 使用上面提到的InitFunc初始化心跳上报客户端和命令执行客户端
    • 定义通用接口和命令
    • 命令执行主要使用Manager加载新规则

    sentinel-transport-simple-http和sentinel-transport-netty-http

    • 心跳和命令的具体实现
    • simple使用bio实现,netty的基于netty实现命令客户端,使用httpclient实现心跳
  • 相关阅读:
    随机变量和期望
    lj的锁
    lyd的旅行
    sg函数和nim游戏的关系
    game with probability problem
    cf 853 B Jury Meeting [前缀和]
    cf 853 A planning [贪心]
    [ZJOI2015][bzoj3924] 幻想乡战略游戏 [动态点分治]
    [IOI2011] Race [点分治]
    [网络流24题] 星际转移问题
  • 原文地址:https://www.cnblogs.com/zby9527/p/13558151.html
Copyright © 2020-2023  润新知