上节分析构建插槽链,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的结构准备完毕,下面分析统计指标插槽