sentinel原理源码分析系列(四)-Context&Entry

启动和初始化完成后,调用者调用受保护资源,触发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没有origi

插槽链

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

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

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

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

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

NEXT 下一篇开始分析插槽链

相关推荐
weixin199701080165 小时前
《淘宝双11同款:基于 Sentinel 的微服务流量防卫兵实战》
微服务·架构·sentinel
一叶飘零_sweeeet21 小时前
高可用架构核心:限流熔断降级全解,Sentinel 与 Resilience4j 原理 + 落地实战
架构·sentinel
Fang fan4 天前
Redis基础数据结构
数据结构·数据库·redis·缓存·bootstrap·sentinel
回到原点的码农5 天前
SpringCloud Gateway 集成 Sentinel 详解 及实现动态监听Nacos规则配置实时更新流控规则
spring cloud·gateway·sentinel
没有bug.的程序员6 天前
黑客僵尸网络的降维打击:Spring Cloud Gateway 自定义限流剿杀 Sentinel 内存黑洞
java·网络·spring·gateway·sentinel
xiaolingting8 天前
Gateway 网关流控与限流架构指南
spring cloud·架构·gateway·sentinel
sc_爬坑之路9 天前
redis windows环境配置读写分离:一主一从 + Sentinel 完整实战
windows·redis·sentinel
sc_爬坑之路9 天前
Linux 部署 Redis:一主一从 + Sentinel 完整实战
linux·redis·sentinel
杜子不疼.9 天前
Spring Cloud 熔断降级详解:用 “保险丝“ 类比,Sentinel 实战教程
人工智能·spring·spring cloud·sentinel
yc_xym11 天前
Redis哨兵(Sentinel)机制
数据库·redis·sentinel