sentinel原理源码分析系列(四)-ContextEntry

devtools/2024/10/23 6:46:20/

        启动和初始化完成后,调用者调用受保护资源,触发sentinel的机制,首先构建或获取Context和获取Entry,然后进入插槽链,决定调用是否通过,怎样通过

上图展示构建Context和获取Entry的类互动图

获取或构建Context

调用者使用ContextUtils获取/构建Context,Context是资源调用上下文,Entry和Node挂在其内,作为后面插槽的链路结构,统计指标的容器

上面2图,分别是spring mvc,web servlet获取或构建Context,可以看到,各个适配器负责生成contextName和origin

SphU内也有使用ContextUtils构建Context,没有origin参数,有些适配器没有显式使用ContextUtils构建Context

获取Entry

很多分析sentinel的文章Entry翻译为令牌或凭证,我觉得签证更合适,填写签证申请是出国的必备,但能不能出国,还要看你签证面试,好比插槽能不能通过

代码比较简单,我们看构建Context和获取Entry 后的Context快照

上图是Context&Entry后的Context后的快照

  • ROOT:EntranceNode全局的,启动和初始化介绍过,持有所有Context调用入口EntranceNode,用于处理dashboard的查询请求
  • Context的EntranceNode  该Node先尝试从静态类变量ContextUtils的contextNameNodeMap获取,新建的放在该Map,key是context.name,context.name是适配器的维度,因此EntranceNode代表的是适配器的入口,但目前看来没使用
  • 调用Entry,可以parent/child级联,构建调用关系,上面提过origin也是用来构建调用关系,Context在线程变量,多次进入是同一个线程或多线程复制线程,支持本地调用,本地调用的适配器aop没有origin

插槽链

调用资源需要获得Entry,插槽链好比是一道道的检查口,通过检查颁发调用Entry,允许调用资源

上图构建集群节点,可以看到同一资源使用同一个chain实例,下面借用网一个图解释插槽链怎样构建

上图插槽链结构,链表结构,构建插槽链就是构建链表,插槽有前后关系,大致分为:

调用链路->统计->功能插槽(系统/限流/降级)

用户可以实现自己的提供者(Provider),构建自己的插槽链

NEXT 下一篇开始分析插槽链


http://www.ppmy.cn/devtools/128090.html

相关文章

Linux——数据链路层

目录 前言 理解网络转发 一以太网 1认识以太网 2以太网帧格式 3认识MAC地址 4MAC 地址和 IP 地址 5理解局域网通信 二ARP协议 1原因 2格式 3ARP过程 ​编辑 4ARP欺骗 三NAT技术 1NAT背景 2NAT IP转化过程 3NAPT 4内网穿透 5内网打洞 四代理服务器 …

导出问题处理

问题描述 测试出来一个问题,使用地市的角色,导出数据然后超过了20w的数据,提示报错,我还以为是偶然的问题,然后是发现是普遍的问题,本地环境复现了,然后是,这个功能是三套角色&…

windows启动qtcreator,任务管理器有,但是界面和任务栏不显示解决方案

原因 某次启动QtCreator,发现界面不显示,点击任务管理器,看到该进程已经在工作了。 解决方案 删除C:\Users\xxx\AppData\Romaing\QtProject里面的所有QtCreator.ini文件;重新启动QtCreator即可。 有时候可能会与安装有道词典冲突&#x…

QSlider和QProgressBar进度条控件

QProgressBar支持自定义样式,以满足不同应用程序的需求。用户可以设置进度条的颜色、文本格式等,以提升用户体验。通过样式表(StyleSheet),用户可以轻松地修改QProgressBar的外观。 简易小游戏 QTimer *timer;int val…

uniapp修改input中placeholder样式

Uniapp官方提供了两种修改的属性方法&#xff0c;但经过测试&#xff0c;只有 placeholder-class 属性能够生效 <input placeholder"请输入手机验证码" placeholder-class"input-placeholder"/><!-- css --> <style lang"scss" s…

Android SELinux——上下文Context源码(十)

通过前面的文章我们知道,SELinux 中的上下文(contexts)包含很多类型,这里我们就来看看Androd 源码中 上下文 SELinux Contexts 的代码结构。 一、Contexts源码 源码位置:/system/sepolicy/private 1、file_contexts file_contexts 文件用于定义系统中各个文件和…

MySQL索引、事物与存储引擎

目录 一、MySQL索引 1.索引的概念 2.索引的作用 3.创建索引的原则依据 4.索引的分类和创建 4.1 普通索引 4.2 唯一索引 4.3 主键索引 4.4 组合索引&#xff08;单列索引与多列索引&#xff09; 4.5 全文索引&#xff08;FULLTEXT&#xff09; 5. 查看索引 6.删除索引…

awk工具的主要作用在显示数据上。

一.awk工具介绍 作用&#xff1a; 能够按照特定的条件在文件中搜索数据&#xff0c;按照特定的格式进行显示。 $0代表当前处理的整行内容&#xff0c;$1代表第一个数据 awk在处理文本数据的时候也是逐行处理数据 工作流程&#xff1a;默认按照空白字符分割文本&#xff0c…