sentinel原理源码分析系列(五)-构建调用链路

上节分析构建插槽链,Sentinel的资源调用好比一个个连续的检查口,能否通过,使用检查规则和统计指标,本章开始分析插槽,首先分析构建调用链路的两个插槽

构建调用链路

构建调用链路为指标统计搭建好结构,调用关系,下图是参与构建调用链路的类互动图

参与构建调用链路两个插槽,NodeSelectorSlot和ClusterBuilderSlot,下面分析这两个插槽

构建调用链路(NodeSelectorSlot)

NodeSelectorSlot构建代表调用资源的DefaultNode,设置到Context,在Context内构建调用链路,这个链路是本地调用链,对于微服务这种进程间调用使用origin,下图是NodeSelectorSlot后Context快照,若本地调用,context内部多个entry将以parent,child相连,形成调用链,意味着调用链有内外两条线(如果本地调用资源受保护),后面限流分析调用关系限流将深入分析

构建集群node(ClusterBuilderSlot)

ClusterBuilderSlot获取或构建资源相关的ClusterNode,关联到代表调用资源的DefaultNode

上图是ClusterNode的声明,构建插槽链那章介绍了,每个资源一个实例,因此ClusterNode每类资源类型对应一个实例

另外,ClusterBuilderSlot也负责origin构建和关联,origin放在ClusterBuilderSlot,意味着origin与ClusterNode一样,聚合统计同一类资源的指标,后面限流分析调用关系限流将深入分析

上图是本地资源R1调用情况, context.name是适配器产生的,有些适配器没有context.name,使用sentinel提供的默认名称,Context的维度是线程,可以想象,使用适配器同一资源不同线程调用是同一个EntranceNode,同一个DefaultNode,同一个ClusterNode

下图是相同的ContextName,同一个资源,不同的调用线程,这也是绝大部分适配器的情况

|------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| | |

上图在ClusterBuilderSlot两个调用线程的断点图,Context不同,不同的线程,资源类型相同

下面看一下不同context name的情况,手动造出来的场景,如下图

下图是同一资源的不同线程调用的context快照

|------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| | |

Context 不同,EntranceNode也不同;代表本次调用资源的DefaultNode不同,资源类型相同,ClusterNode相同

至此,资源调用的Context的结构准备完毕,下面分析统计指标插槽

相关推荐
suweijie7685 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
向阳12181 天前
sentinel来源访问控制(黑白名单)
java·sentinel
bohu831 天前
sentinel学习笔记1-为什么需要服务降级
笔记·学习·sentinel·滑动窗口
一个儒雅随和的男子1 天前
微服务详细教程之nacos和sentinel实战
微服务·架构·sentinel
bohu831 天前
sentinel学习笔记5-资源指标数据统计
笔记·sentinel·statisticslot
bohu832 天前
Sentinel 学习笔记3-责任链与工作流程
笔记·sentinel·责任链·processorslot
mengml_smile3 天前
Sentinel一分钟
java·开发语言·sentinel
LightOfNight11 天前
【Sentinel Go】新手指南、流量控制、熔断降级和并发隔离控制
开发语言·golang·sentinel
XMYX-011 天前
使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)
redis·kubernetes·sentinel
TsengOnce11 天前
Docker 安装 sentinel
docker·容器·sentinel